की स्ट्रेचिंग

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

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

की स्ट्रेचिंग एक हमलावर के पास दो विकल्प छोड़ती है:
 * उन्नत कुंजी के संभावित संयोजनों का प्रयास करें, लेकिन यह संभव नहीं है यदि उन्नत कुंजी पर्याप्त रूप से लंबी और अप्रत्याशित है ( ⁠i.e.,एल्गोरिदम यादृच्छिकता की इतनी अच्छी तरह से नकल करता है कि हमलावर को संपूर्ण विस्तारित कुंजी स्थान का परीक्षण करना चाहिए)
 * कमजोर प्रारंभिक कुंजी के संभावित संयोजनों का प्रयास करें, संभावित रूप से एक शब्दकोश हमले के साथ शुरू हो रहा है यदि प्रारंभिक कुंजी एक पासवर्ड या पासफ़्रेज़ है, लेकिन प्रत्येक परीक्षण के लिए हमलावर का अतिरिक्त प्रयास हमले को असंवैधानिक बना सकता है, महंगी गणना और मेमोरी की खपत अपेक्षित लाभ से अधिक होनी चाहिए

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

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

हैश-आधारित
कई पुस्तकालय ऐसे कार्य प्रदान करते हैं जो उनके कार्य के भाग के रूप में की स्ट्रेचिंग करते हैं; एक उदाहरण के लिए Crypt (C)|Crypt(3) देखें। PBKDF2 पासवर्ड से एन्क्रिप्शन कुंजी उत्पन्न करने के लिए है, और पासवर्ड प्रमाणीकरण के लिए जरूरी नहीं है। PBKDF2 का उपयोग दोनों के लिए किया जा सकता है यदि आउटपुट बिट्स की संख्या PBKDF2 में प्रयुक्त आंतरिक हैशिंग एल्गोरिथम से कम या उसके बराबर है, जो आमतौर पर SHA-2 (512 बिट्स तक) है, या स्थैतिक डेटा को एन्क्रिप्ट करने के लिए एन्क्रिप्शन कुंजी के रूप में उपयोग किया जाता है।

शक्ति और समय
ये उदाहरण मानते हैं कि एक उपभोक्ता CPU एक सेकंड में लगभग 65,000 SHA-1 हैश कर सकता है। इस प्रकार, एक प्रोग्राम जो की स्ट्रेचिंग का उपयोग करता है, 65,000 राउंड हैश का उपयोग कर सकता है और उपयोगकर्ता को अधिकतम एक सेकंड के लिए विलंबित कर सकता है।

परीक्षण पासवर्ड या पासफ़्रेज़ का परीक्षण करने के लिए आमतौर पर एक हैश ऑपरेशन की आवश्यकता होती है। लेकिन यदि कुंजी खींचने का उपयोग किया गया था, तो हमलावर को प्रत्येक परीक्षण के लिए एक मजबूत कुंजी की गणना करनी चाहिए, जिसका अर्थ है कि प्रति परीक्षण की गणना करने के लिए 65,000 हैश हैं। इससे हमलावर का वर्कलोड 65,000 के कारक से लगभग 2 बढ़ जाता है16, जिसका अर्थ है कि बढ़ी हुई कुंजी कुंजी शक्ति में लगभग 16 अतिरिक्त बिट्स के लायक है।

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

सीपीयू-बाउंड हैश फ़ंक्शन अभी भी कस्टम हार्डवेयर हमला के प्रति संवेदनशील हैं। SHA-1 के ऐसे कार्यान्वयन में 5,000 गेट्स और 400 घड़ी चक्रों का उपयोग होता है। $100 से कम लागत वाले मल्टी-मिलियन गेट FPGAs के साथ, एक हमलावर लगभग $5,000 में पूरी तरह से लूप अनोलिंग हार्डवेयर पटाखा बना सकता है। 100 मेगाहर्ट्ज पर क्लॉक किया गया ऐसा डिज़ाइन लगभग 300,000 कुंजी/सेकेंड का परीक्षण कर सकता है। हमलावर एक अच्छी कीमत/गति समझौता चुनने के लिए स्वतंत्र है, उदाहरण के लिए $2,500 के लिए 150,000 कुंजी/दूसरा डिज़ाइन। की स्ट्रेचिंग अभी भी ऐसी स्थिति में हमलावर को धीमा कर देती है; सीधे SHA-1 हैश पर हमला करने वाला $5,000 का डिज़ाइन 300,000÷2 को आज़माने में सक्षम होगा16 ≈ 4.578 की/सेकंड।

इसी तरह, आधुनिक उपभोक्ता जीपीयू हैशिंग को काफी तेज कर सकते हैं। उदाहरण के लिए, एक बेंचमार्क में, एक Nvidia RTX 2080 SUPER FE 10 बिलियन SHA1 हैश प्रति सेकंड से अधिक की गणना करता है। हार्डवेयर दृष्टिकोण से बचाव के लिए, मेमोरी बाउंड फंक्शन|मेमोरी-बाउंड क्रिप्टोग्राफ़िक फ़ंक्शन विकसित किए गए हैं। ये बड़ी मात्रा में मेमोरी को अप्रत्याशित रूप से एक्सेस करते हैं जैसे कि कैश (कंप्यूटिंग) अप्रभावी हैं। चूंकि बड़ी मात्रा में कम विलंबता मेमोरी महंगी होती है, एक संभावित हमलावर महत्वपूर्ण रूप से डरा हुआ है।

इतिहास
पहला जानबूझकर धीमा पासवर्ड-आधारित कुंजी व्युत्पत्ति फ़ंक्शन क्रिप्ट (सी)#पारंपरिक डेस-आधारित योजना| CRYPT को 1978 में रॉबर्ट मॉरिस (क्रिप्टोग्राफर) द्वारा यूनिक्स पासवर्ड को एन्क्रिप्ट करने के लिए वर्णित किया गया था। इसने उप-फ़ंक्शन के रूप में 25 की पुनरावृति संख्या, एक 12-बिट नमक और डेटा एन्क्रिप्शन मानक के एक संस्करण का उपयोग किया। (मानक DES हार्डवेयर का उपयोग करके हमलों को विफल करने के प्रयास में DES उचित को टाला गया था।) पासवर्ड अधिकतम आठ ASCII वर्णों तक सीमित थे। जबकि यह अपने समय के लिए एक महान उन्नति थी, CRYPT(3) को अब अपर्याप्त माना जाता है। PDP-11 युग के लिए डिज़ाइन की गई पुनरावृति संख्या बहुत कम है, 12 बिट नमक एक असुविधा है, लेकिन पूर्व-गणना किए गए शब्दकोश हमलों को नहीं रोकता है, और आठ-वर्ण की सीमा मजबूत पासफ़्रेज़ के उपयोग को रोकती है।

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

2009 में, कुंजी परीक्षण को गति देने के लिए कस्टम, अत्यधिक समानांतर हार्डवेयर के उपयोग को सीमित करने के इरादे से एक स्मृति-गहन कुंजी सुदृढ़ीकरण एल्गोरिदम, लिखी हुई कहानी पेश किया गया था। 2013 में, एक बेहतर की स्ट्रेचिंग मानक का चयन करने के लिए एक पासवर्ड हैशिंग प्रतियोगिता आयोजित की गई थी जो ग्राफिक्स प्रोसेसर और विशेष प्रयोजन हार्डवेयर के हमलों का विरोध करेगी। विजेता, Argon2, 1 जुलाई 2015 को चुना गया था।

कुछ प्रणालियाँ जो की स्ट्रेचिंग
का उपयोग करती हैं कुछ [[डिस्क एन्क्रिप्शन सॉफ्टवेयर की तुलना]] नहीं (डिस्क एन्क्रिप्शन सॉफ़्टवेयर की तुलना देखें):


 * 7- 7-ज़िप
 * Apache HTTP सर्वर .htpasswd APR1 और OpenSSL पासवार्ड MD5 की स्ट्रेचिंग के 1000 राउंड का उपयोग करते हैं।
 * कीपास और कीपासएक्ससी, फ्री और ओपन-सोर्स सॉफ्टवेयर | ओपन-सोर्स पासवर्ड प्रबंधक  यूटिलिटीज। 2020 तक, नवीनतम संस्करण डिफ़ॉल्ट 1 सेकंड की स्ट्रेचिंग देरी के साथ Argon2d का उपयोग करता है।
 * लिनक्स और कुछ अन्य यूनिक्स जैसी प्रणालियाँ SHAcrypt मोड प्रदान करती हैं जो डिफ़ॉल्ट रूप से 5000 SHA256 या SHA512 हैश पुनरावृत्तियों का प्रदर्शन करती हैं, न्यूनतम 1000 और अधिकतम 999,999,999 के साथ।
 * पासवर्ड सुरक्षित फ्री और ओपन-सोर्स सॉफ्टवेयर | ओपन-सोर्स पासवर्ड मैनेजर।
 * काफ़ी अच्छी गोपनीयता, जीएनयू प्राइवेसी गार्ड एनक्रिप्शन सॉफ्टवेयर। जीपीजी डिफ़ॉल्ट रूप से हैश को 65536 बार दोहराता है।
 * व्यक्तिगत मोड में वाई-फाई संरक्षित पहुंच (WPA और WPA2) वायरलेस एन्क्रिप्शन प्रोटोकॉल ने 4096 पुनरावृत्तियों के साथ PBKDF2 का उपयोग किया। (WPA3 बराबर के एक साथ प्रमाणीकरण का उपयोग करता है जो पासवर्ड हैश को उजागर नहीं करने का दावा करता है।)

यह भी देखें

 * कुंजी व्युत्पत्ति समारोह - अक्सर कुंजी खींच का उपयोग करता है
 * PBKDF2, bcrypt, scrypt, Argon2 - व्यापक रूप से उपयोग किए जाने वाले प्रमुख स्ट्रेचिंग एल्गोरिदम
 * हैश चेन