पीबीकेडीएफ2

क्रिप्टोग्राफी में, पीबीकेडीएफ1 और पीबीकेडीएफ2 (पासवर्ड-आधारित कुंजी व्युत्पत्ति फलन 1 और 2) स्लाइडिंग कम्प्यूटेशनल लागत के साथ प्रमुख व्युत्पत्ति फलन हैं, जिनका उपयोग ब्रूट-फ़ोर्स हमलों की भेद्यता को कम करने के लिए किया जाता है।

पीबीकेडीएफ2 आरएसए प्रयोगशालाओं की सार्वजनिक-कुंजी क्रिप्टोग्राफ़ी मानक (पीकेसीएस) श्रृंखला का हिस्सा है, विशेष रूप से पीकेसीएस#5 v2.0, इंटरनेट इंजीनियरिंग टास्क फोर्स के आरएफसी 2898 के रूप में भी प्रकाशित किया गया है। यह पीबीकेडीएफ1 का अधिक्रमण करता है, जो केवल 160 बिट तक लंबी व्युत्पन्न कुंजी का उत्पादन कर सकता है। आरएफसी 8018 (पीकेसीएस#5 v2.1), 2017 में प्रकाशित, पासवर्ड हैशिंग के लिए पीबीकेडीएफ2 की अनुशंसा करता है।

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

जब मानक वर्ष 2000 में लिखा गया था, तो पुनरावृत्तियों की अनुशंसित न्यूनतम संख्या 1,000 थी, लेकिन सीपीयू की गति में वृद्धि के साथ पैरामीटर को समय के साथ बढ़ाने का इरादा है। 2005 में एक करबरोस (प्रोटोकॉल) मानक ने 4,096 पुनरावृत्तियों की सिफारिश की; Apple Inc. ने कथित तौर पर iOS 3 के लिए 2,000 और iOS 4 के लिए 10,000 का उपयोग किया; जबकि 2011 में लास्ट पास  ने जावास्क्रिप्ट क्लाइंट के लिए 5,000 पुनरावृत्तियों और सर्वर-साइड हैशिंग के लिए 100,000 पुनरावृत्तियों का उपयोग किया। 2023 में, OWASP ने पीबीकेडीएफ2-HMAC-SHA256 के लिए 600,000 पुनरावृत्तियों और पीबीकेडीएफ2-HMAC-SHA512 के लिए 210,000 पुनरावृत्तियों का उपयोग करने की अनुशंसा की।

पासवर्ड में नमक मिलाने से हमलों के लिए प्रीकंप्यूटेड हैश (इंद्रधनुष टेबल) का उपयोग करने की क्षमता कम हो जाती है, और इसका मतलब है कि कई पासवर्डों का अलग-अलग परीक्षण किया जाना चाहिए, एक बार में नहीं। सार्वजनिक कुंजी क्रिप्टोग्राफी मानक कम से कम 64 बिट्स की नमक लंबाई की सिफारिश करता है। यूएस मानक और प्रौद्योगिकी का राष्ट्रीय संस्थान 128 बिट्स की नमक लंबाई की सिफारिश करता है।

कुंजी व्युत्पत्ति प्रक्रिया
पीबीकेडीएफ2 कुंजी व्युत्पत्ति फलन में पाँच इनपुट पैरामीटर हैं:

कहाँ:
 * $DK = PBKDF2(PRF, Password, Salt, c, dkLen)$ आउटपुट लंबाई के साथ दो पैरामीटर का छद्म यादृच्छिक फलन है hLen (उदा., एक बंद HMAC)
 * Password मास्टर पासवर्ड है जिससे व्युत्पन्न कुंजी उत्पन्न होती है
 * Salt बिट्स का अनुक्रम है, जिसे नमक (क्रिप्टोग्राफी) के रूप में जाना जाता है
 * c वांछित पुनरावृत्तियों की संख्या है
 * dkLen व्युत्पन्न कुंजी की वांछित बिट-लंबाई है
 * DK उत्पन्न व्युत्पन्न कुंजी है

प्रत्येक hLen-बिट ब्लॉक T$i$}व्युत्पन्न कुंजी का } DK, की गणना निम्नानुसार की जाती है (के साथ $PRF$ अंकन स्ट्रिंग संयोजन):



कार्यक्रम $+$ xor है ($DK = T1 + T2 + ⋯ + Tdklen/hlen$) श्रृंखलित PRFs के पुनरावृत्तियों का। PRF का पहला पुनरावृत्ति PRF कुंजी के रूप में पासवर्ड का उपयोग करता है और नमक के साथ जुड़ा हुआ है i इनपुट के रूप में बिग-एंडियन 32-बिट पूर्णांक के रूप में एन्कोड किया गया। (ध्यान दें कि i एक 1-आधारित इंडेक्स है।) PRF के बाद के पुनरावृत्तियों में PRF कुंजी के रूप में पासवर्ड का उपयोग किया जाता है और इनपुट के रूप में पिछले PRF गणना का आउटपुट:



कहाँ:

उदाहरण के लिए, WPA2 उपयोग करता है:



पीबीकेडीएफ1 की एक सरल प्रक्रिया थी: प्रारंभिक U (इस संस्करण में T कहा जाता है) द्वारा बनाया गया है $Ti = F(Password, Salt, c, i)$, और निम्नलिखित बस हैं $F$. कुंजी को अंतिम हैश के पहले dkLen बिट्स के रूप में निकाला जाता है, यही कारण है कि आकार सीमा होती है।

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

इसलिए, HMAC-SHA1 का उपयोग करते समय, इसे SHA-1 का उपयोग करके प्री-हैश किया जाता है:
 * पासवर्ड:

ASCII में किसका प्रतिनिधित्व किया जा सकता है:
 * SHA1 (हेक्स):

इसका मतलब है कि नमक या पुनरावृत्तियों की परवाह किए बिना, पीबीकेडीएफ2-HMAC-SHA1 पासवर्ड के लिए समान कुंजी बाइट उत्पन्न करेगा:
 * SHA1 (ASCII):


 * plnlrtfpijpuhqylxbgqiiyipeyxvfsavzgxbbcfusqkozwpngsyjqlmjsytrmd
 * eBkXQTfuBqp'cTcar&g*

उदाहरण के लिए, का उपयोग कर:


 * पीआरएफ: HMAC-SHA1
 * नमक: A009C1A485912C6AE630D3E744240B04
 * पुनरावृत्तियाँ: 1,000
 * व्युत्पन्न कुंजी लंबाई: 16 बाइट्स

निम्नलिखित दो फलन कॉल:

पीबीकेडीएफ2-HMAC-SHA1( plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd, ...) पीबीकेडीएफ2-HMAC-SHA1(eBkXQTfuBqp'cTcar&g*, ...)

समान व्युत्पन्न कुंजी बाइट उत्पन्न करेगा. ये व्युत्पन्न कुंजी टकराव एक सुरक्षा भेद्यता का प्रतिनिधित्व नहीं करते हैं - क्योंकि पासवर्ड का हैश उत्पन्न करने के लिए किसी को अभी भी मूल पासवर्ड पता होना चाहिए।

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

2013 में, अधिक प्रतिरोधी दृष्टिकोण विकसित करने के लिए पासवर्ड हैशिंग प्रतियोगिता (PHC) आयोजित की गई थी। 20 जुलाई 2015 को Argon2 को अंतिम PHC विजेता के रूप में चुना गया था, जिसमें चार अन्य पासवर्ड हैशिंग योजनाओं को विशेष मान्यता दी गई थी: Catena, Lyra2, Yescrypt और Makwa। एक अन्य विकल्प गुब्बारा हैशिंग  है, जिसकी पासवर्ड नीति#NIST दिशानिर्देशों में अनुशंसा की गई है।

यह भी देखें

 * पीबीकेडीएफ2 कार्यान्वयन की सूची

बाहरी संबंध

 * – Specification of PKCS#5 v2.0.
 * – Test vectors for पीबीकेडीएफ2 with HMAC-SHA1.
 * NIST Special Publication 800-132 Recommendation for Password-Based Key Derivation
 * NIST Special Publication 800-132 Recommendation for Password-Based Key Derivation