कुंजी व्युत्पन्न फंक्शन

क्रिप्टोग्राफी में, एक कुंजी व्युत्पत्ति फ़ंक्शन (केडीएफ) एक क्रिप्टोग्राफ़िक एल्गोरिथ्म है जो एक गुप्त मान से एक या एक से अधिक कुंजी (क्रिप्टोग्राफी) प्राप्त करता है जैसे मास्टर कुंजी, एक पासवर्ड या छद्म यादृच्छिक फ़ंक्शन (जो आमतौर पर एक क्रिप्टोग्राफ़िक का उपयोग करता है) का उपयोग करके पदबंध हैश फ़ंक्शन या ब्लॉक सिफर)।  केडीएफ का उपयोग कुंजी को लंबी कुंजी में फैलाने या आवश्यक प्रारूप की कुंजी प्राप्त करने के लिए किया जा सकता है, जैसे उन्नत एन्क्रिप्शन मानक के उपयोग के लिए डिफी-हेलमैन कुंजी एक्सचेंज का परिणाम एक समूह तत्व को एक सममित कुंजी में परिवर्तित करना। HMAC प्रमुख व्युत्पत्ति के लिए उपयोग किए जाने वाले छद्म आयामी कार्यों के लोकप्रिय उदाहरण हैं।

इतिहास
पहला जानबूझकर धीमा (की स्ट्रेचिंग) पासवर्ड-आधारित कुंजी व्युत्पत्ति फ़ंक्शन को तहखाना (सी)  (या क्रिप्ट (3) इसके मैनुअल पेज ([[यूनिक्स)]] के बाद) कहा जाता था, और 1978 में रॉबर्ट मॉरिस (क्रिप्टोग्राफर) द्वारा इसका आविष्कार किया गया था। यह एक एन्क्रिप्ट करेगा निरंतर (शून्य), एक संशोधित डेटा एन्क्रिप्शन मानक एन्क्रिप्शन एल्गोरिदम के 25 पुनरावृत्तियों को निष्पादित करके कुंजी के रूप में उपयोगकर्ता के पासवर्ड के पहले 8 वर्णों का उपयोग करके (जिसमें रीयल-टाइम कंप्यूटर घड़ी से पढ़ा गया 12-बिट नंबर परेशान करने के लिए उपयोग किया जाता है) गणना)। परिणामी 64-बिट संख्या को 11 प्रिंट करने योग्य वर्णों के रूप में एन्कोड किया गया है और फिर यूनिक्स पासवर्ड फ़ाइल में संग्रहीत किया गया है। जबकि यह उस समय एक बड़ी प्रगति थी, पीडीपी-11 युग के बाद से प्रोसेसर की गति में वृद्धि ने क्रिप्ट के खिलाफ क्रूर-बल के हमलों को संभव बना दिया है, और भंडारण में प्रगति ने 12-बिट नमक को अपर्याप्त बना दिया है। क्रिप्ट फ़ंक्शन का डिज़ाइन भी उपयोगकर्ता पासवर्ड को 8 वर्णों तक सीमित करता है, जो कीस्पेस को सीमित करता है और मजबूत पासफ़्रेज़ को असंभव बनाता है।

हालांकि उच्च थ्रूपुट सामान्य-उद्देश्य वाले हैश कार्यों में एक वांछनीय गुण है, पासवर्ड सुरक्षा अनुप्रयोगों में विपरीत सच है जिसमें क्रूर-बल क्रैकिंग के खिलाफ बचाव एक प्राथमिक चिंता है। बड़े पैमाने पर समानांतर हार्डवेयर जैसे जीपीयू, एफपीजीए, और यहां तक ​​​​कि एएसआईसी के ब्रूट-फोर्स क्रैकिंग के बढ़ते उपयोग ने एक उपयुक्त एल्गोरिदम के चयन को और भी महत्वपूर्ण बना दिया है क्योंकि अच्छे एल्गोरिदम को न केवल कम्प्यूटेशनल लागत की एक निश्चित मात्रा को लागू करना चाहिए बल्कि सीपीयू, लेकिन ऐसे कार्यों के लिए आधुनिक व्यापक-समानांतर प्लेटफार्मों की लागत/प्रदर्शन लाभों का भी विरोध करते हैं। इस उद्देश्य के लिए विशेष रूप से विभिन्न एल्गोरिदम तैयार किए गए हैं, जिनमें bcrypt, scrypt और, हाल ही में, Lyra2 और Argon2 (बाद वाला पासवर्ड हैशिंग प्रतियोगिता का विजेता है) शामिल है। बड़े पैमाने पर एशले मैडिसन डेटा उल्लंघन जिसमें हमलावरों द्वारा लगभग 36 मिलियन पासवर्ड हैश चुरा लिए गए थे, पासवर्ड सुरक्षित करने में एल्गोरिदम चयन के महत्व को दर्शाते हैं। हालांकि bcrypt को हैश की सुरक्षा के लिए नियोजित किया गया था (बड़े पैमाने पर ब्रूट-फोर्स क्रैकिंग महंगी और समय लेने वाली), समझौता किए गए डेटा में खातों के एक महत्वपूर्ण हिस्से में तेज़ सामान्य-उद्देश्य MD5 एल्गोरिथ्म के आधार पर एक पासवर्ड हैश भी शामिल था, जिसने बनाया कुछ ही हफ्तों में 11 मिलियन से अधिक पासवर्ड को क्रैक करना संभव है। जून 2017 में, यू.एस. राष्ट्रीय मानक और प्रौद्योगिकी संस्थान (एनआईएसटी) ने अपने डिजिटल प्रमाणीकरण दिशानिर्देशों का एक नया संशोधन जारी किया, एनआईएसटी एसपी 800-63बी-3, यह बताते हुए कि: सत्यापनकर्ता कंठस्थ रहस्यों को संग्रहित करेंगे [अर्थात पासवर्ड] एक ऐसे रूप में जो ऑफ़लाइन हमलों के लिए प्रतिरोधी है। याद किए गए रहस्यों को एक उपयुक्त एक तरफ़ा कुंजी व्युत्पत्ति फ़ंक्शन का उपयोग करके नमकीन और हैश किया जाएगा। कुंजी व्युत्पत्ति कार्य इनपुट के रूप में एक पासवर्ड, एक नमक और एक लागत कारक लेते हैं और फिर एक पासवर्ड हैश उत्पन्न करते हैं। उनका उद्देश्य एक हमलावर द्वारा प्रत्येक पासवर्ड का अनुमान लगाने का परीक्षण करना है जिसने एक पासवर्ड हैश फ़ाइल प्राप्त की है और इसलिए अनुमान लगाने की लागत उच्च या निषेधात्मक है।

आधुनिक पासवर्ड-आधारित कुंजी व्युत्पत्ति कार्य, जैसे PBKDF2 (RFC 2898 में निर्दिष्ट), एक मान्यता प्राप्त क्रिप्टोग्राफ़िक हैश पर आधारित हैं, जैसे SHA-2, अधिक नमक (कम से कम 64 बिट्स और बेतरतीब ढंग से चुने गए) और एक उच्च पुनरावृत्ति गणना का उपयोग करते हैं। NIST 10,000 की न्यूनतम पुनरावृति संख्या की अनुशंसा करता है। विशेष रूप से महत्वपूर्ण कुंजियों के लिए, या बहुत शक्तिशाली प्रणालियों या प्रणालियों के लिए जहां उपयोगकर्ता-कथित प्रदर्शन महत्वपूर्ण नहीं है, 10,000,000 की पुनरावृत्ति संख्या उपयुक्त हो सकती है।

कुंजी व्युत्पत्ति
केडीएफ के लिए मूल उपयोग कुंजी व्युत्पत्ति है, गुप्त पासवर्ड या पासफ़्रेज़ से कुंजियों का निर्माण। इस विषय पर बदलाव में शामिल हैं:


 * एक सामान्य गुप्त मूल्य (जिसे कभी-कभी कुंजी विविधीकरण भी कहा जाता है) से एक या अधिक कुंजी प्राप्त करने के लिए गैर-गुप्त पैरामीटर के संयोजन के साथ। इस तरह के उपयोग से एक हमलावर को रोका जा सकता है जो इनपुट गुप्त मूल्य या किसी अन्य व्युत्पन्न कुंजी के बारे में उपयोगी जानकारी सीखने से व्युत्पन्न कुंजी प्राप्त करता है। एक केडीएफ का उपयोग यह सुनिश्चित करने के लिए भी किया जा सकता है कि व्युत्पन्न कुंजियों में अन्य वांछनीय गुण हैं, जैसे कि कुछ विशिष्ट एन्क्रिप्शन सिस्टम में कमजोर कुंजियों से बचना।
 * मल्टीपार्टी कुंजी-समझौता प्रोटोकॉल के घटकों के रूप में। ऐसे प्रमुख व्युत्पत्ति कार्यों के उदाहरणों में KDF1, IEEE P1363|IEEE Std 1363-2000 में परिभाषित, और ANSI X9.42 में समान कार्य शामिल हैं।
 * गुप्त पासवर्ड या पासफ़्रेज़ (एक पासवर्ड-आधारित KDF) से कुंजी प्राप्त करने के लिए।
 * प्रदान की गई कुंजियों से अलग-अलग लंबाई की कुंजी प्राप्त करने के लिए: इस उद्देश्य के लिए डिज़ाइन किए गए KDFs का एक उदाहरण HKDF है।
 * चाबी खींचना और की स्ट्रेंथनिंग।

की स्ट्रेचिंग और की स्ट्रेंथनिंग
कुंजी व्युत्पत्ति कार्यों का उपयोग अनुप्रयोगों में गुप्त पासवर्ड या पासफ़्रेज़ से कुंजी प्राप्त करने के लिए भी किया जाता है, जिसमें आमतौर पर क्रिप्टोग्राफ़िक कुंजी के रूप में सीधे उपयोग किए जाने वाले वांछित गुण नहीं होते हैं। ऐसे अनुप्रयोगों में, आमतौर पर यह अनुशंसा की जाती है कि कुंजी व्युत्पत्ति फ़ंक्शन को जानबूझकर धीमा किया जाए ताकि पासवर्ड या पासफ़्रेज़ इनपुट मान पर पशुबल का आक्रमण या शब्दकोश हमला  को विफल किया जा सके।

इस तरह के उपयोग के रूप में व्यक्त किया जा सकता है $DK = KDF(key, salt, iterations)$, कहाँ $DK$ व्युत्पन्न कुंजी है, $KDF$ प्रमुख व्युत्पत्ति उपनेमका है, $key$ मूल कुंजी या पासवर्ड है, $salt$ एक यादृच्छिक संख्या है जो नमक (क्रिप्टोग्राफी) के रूप में कार्य करती है, और $iterations$ उप-फ़ंक्शन के पुनरावृत्तियों की संख्या को संदर्भित करता है। सिस्टम की कुंजी के रूप में मूल कुंजी या पासवर्ड के बजाय व्युत्पन्न कुंजी का उपयोग किया जाता है। नमक के मान और पुनरावृत्तियों की संख्या (यदि यह तय नहीं है) को हैश किए गए पासवर्ड के साथ संग्रहीत किया जाता है या एक एन्क्रिप्टेड संदेश के साथ सादे पाठ (अनएन्क्रिप्टेड) ​​​​के रूप में भेजा जाता है। पुनरावृत्तियों की संख्या के साथ क्रूर बल के हमले की कठिनाई बढ़ जाती है। पुनरावृति गणना पर एक व्यावहारिक सीमा उपयोगकर्ताओं की अनिच्छा है जो कंप्यूटर में लॉग इन करने या डिक्रिप्ट किए गए संदेश को देखने में एक प्रत्यक्ष देरी को सहन करने के लिए है। नमक (क्रिप्टोग्राफी) का उपयोग हमलावरों को व्युत्पन्न कुंजी के शब्दकोश को प्रीकंप्यूटिंग करने से रोकता है।

एक वैकल्पिक दृष्टिकोण, जिसे कुंजी सुदृढ़ीकरण कहा जाता है, यादृच्छिक नमक के साथ कुंजी को बढ़ाता है, लेकिन फिर (कुंजी खींचने के विपरीत) नमक को सुरक्षित रूप से हटा देता है। यह हमलावर और वैध उपयोगकर्ताओं दोनों को नमक मूल्य के लिए क्रूर-बल खोज करने के लिए मजबूर करता है। हालांकि वह पेपर जिसने की स्ट्रेचिंग की शुरुआत की इस पहले की तकनीक को संदर्भित किया गया है और जानबूझकर एक अलग नाम चुना गया है, शब्द की मजबूती अब अक्सर (यकीनन गलत तरीके से) की स्ट्रेचिंग को संदर्भित करने के लिए उपयोग की जाती है।

पासवर्ड हैशिंग
कुंजी व्युत्पत्ति के लिए उनके मूल उपयोग के बावजूद, KDF संभवतः पासवर्ड हैशिंग (क्रिप्टोग्राफ़िक हैश फ़ंक्शन#पासवर्ड सत्यापन) में उनके उपयोग के लिए जाने जाते हैं, जैसा कि पासवर्ड फ़ाइल या छाया पासवर्ड  फ़ाइल द्वारा उपयोग किया जाता है। क्रूर-बल के हमलों के मामले में गणना करने के लिए पासवर्ड हैश फ़ंक्शन अपेक्षाकृत महंगा होना चाहिए, और इस विशेषता को प्रदान करने के लिए केडीएफ की प्रमुख स्ट्रेचिंग होती है। इस संदर्भ में गैर-गुप्त मापदंडों को नमक (क्रिप्टोग्राफी) कहा जाता है।

2013 में पासवर्ड हैशिंग के लिए एक नया, मानक एल्गोरिदम चुनने के लिए एक पासवर्ड हैशिंग प्रतियोगिता की घोषणा की गई थी। 20 जुलाई 2015 को प्रतियोगिता समाप्त हो गई और Argon2 को अंतिम विजेता घोषित किया गया। चार अन्य एल्गोरिदम को विशेष पहचान मिली: कैटेना, लाइरा2, मकवा और येसक्रिप्ट।

अग्रिम पठन

 * Key Derivation Functions
 * Key Derivation Functions