क्रिप्ट (सी): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 108: Line 108:


=== पारंपरिक डीईएस-आधारित पद्धति ===
=== पारंपरिक डीईएस-आधारित पद्धति ===
मूल पासवर्ड गूढ़लेखन पद्धति बहुत तीव्र पाई गई और इस प्रकार सबसे संभावित पासवर्डों की पशुपन बल गणना के अधीन थी।<ref name="passwd"/> सातवें संस्करण यूनिक्स में,<ref>{{cite web | url=http://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/man/man3/crypt.3 | title=crypt, setkey, encrypt – DES encryption | work=UNIX Seventh Edition Programmers' Manual | date = 1979 }}</ref> पद्धति को [[डेटा एन्क्रिप्शन मानक|डेटा गूढ़लेखन मानक]] एल्गोरिदम के एक संशोधित रूप में बदल दिया गया था। इस परिवर्तन का एक लक्ष्य गूढ़लेखन को मंद करना था। इसके अतिरिक्त, एल्गोरिदम में एक 12-बिट साल्ट (गूढ़लेखिकी) सम्मिलित है ताकि यह सुनिश्चित किया जा सके कि एक आक्रामक को एक साथ पूरे पासवर्ड डेटाबेस को लक्षित करने में सक्षम होने के विपरीत प्रत्येक पासवर्ड को स्वतंत्र रूप से क्रैक करने के लिए विवश किया जाएगा।
मूल पासवर्ड गूढ़लेखन पद्धति बहुत तीव्र पाई गई और इस प्रकार सबसे संभावित पासवर्डों के पशुपन बल गणना के अधीन थी।<ref name="passwd"/> सातवें संस्करण यूनिक्स में,<ref>{{cite web | url=http://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/man/man3/crypt.3 | title=crypt, setkey, encrypt – DES encryption | work=UNIX Seventh Edition Programmers' Manual | date = 1979 }}</ref> पद्धति को [[डेटा एन्क्रिप्शन मानक|डेटा गूढ़लेखन मानक]] एल्गोरिदम के एक संशोधित रूप में बदल दिया गया था। इस परिवर्तन का एक लक्ष्य गूढ़लेखन को मंद करना था। इसके अतिरिक्त, एल्गोरिदम में एक 12-बिट साल्ट (गूढ़लेखिकी) सम्मिलित है ताकि यह सुनिश्चित किया जा सके कि एक आक्रामक को एक साथ पूरे पासवर्ड डेटाबेस को लक्षित करने में सक्षम होने के विपरीत प्रत्येक पासवर्ड को स्वतंत्र रूप से क्रैक करने के लिए विवश किया जाएगा।


विस्तार से, उपयोगकर्ता के पासवर्ड को आठ अक्षरों तक छोटा कर दिया जाता है, और उनमें से प्रत्येक को मात्र 7-बिट तक सीमित कर दिया जाता है; यह 56-बिट डीईएस कुंजी बनाता है। उस कुंजी का उपयोग तब एक सभी-बिट-शून्य कक्ष को एन्क्रिप्ट करने के लिए किया जाता है, और फिर सिफ़र को उसी कुंजी के साथ फिर से एन्क्रिप्ट किया जाता है, और इसी प्रकार कुल 25 डीईएस गूढ़लेखन के लिए। गूढ़लेखन एल्गोरिदम को उद्विग्न करने के लिए 12-बिट साल्ट का उपयोग किया जाता है, इसलिए क्रिप्ट() को लागू करने के लिए मानक डीईएस कार्यान्वयन का उपयोग नहीं किया जा सकता है। साल्ट और अंतिम सिफ़र को [[बेस 64]] के रूप में मुद्रण करने योग्य स्ट्रिंग में एन्कोड किया गया है।
विस्तार से, उपयोगकर्ता के पासवर्ड को आठ अक्षरों तक छोटा कर दिया जाता है, और उनमें से प्रत्येक को मात्र 7-बिट तक सीमित कर दिया जाता है; यह 56-बिट डीईएस कुंजी बनाता है। उस कुंजी का उपयोग तब एक सभी-बिट-शून्य कक्ष को एन्क्रिप्ट करने के लिए किया जाता है, और फिर सिफ़र को उसी कुंजी के साथ फिर से एन्क्रिप्ट किया जाता है, और इसी प्रकार कुल 25 डीईएस गूढ़लेखन के लिए। गूढ़लेखन एल्गोरिदम को उद्विग्न करने के लिए 12-बिट साल्ट का उपयोग किया जाता है, इसलिए क्रिप्ट() को लागू करने के लिए मानक डीईएस कार्यान्वयन का उपयोग नहीं किया जा सकता है। साल्ट और अंतिम सिफ़र को [[बेस 64]] के रूप में मुद्रण करने योग्य स्ट्रिंग में विकोडित किया गया है।


यह तकनीकी रूप से गूढ़लेखन नहीं है क्योंकि डेटा (सभी बिट शून्य) को गुप्त नहीं रखा जा रहा है; यह व्यापक रूप से पहले से सभी के लिए जाना जाता है। यद्यपि, डीईएस की एक विशेषता यह है कि यह [[ज्ञात सादा पाठ|ज्ञात सादे पाठ]] स्थितियों में भी की पुनः प्राप्ति के लिए बहुत प्रतिरोधी है। यह सैद्धांतिक रूप से संभव है कि दो अलग-अलग पासवर्ड का परिणाम एक ही हैश में हो सकता है। इस प्रकार पासवर्ड को कभी भी डिक्रिप्ट नहीं किया जाता है: इसका उपयोग मात्र परिणाम की गणना करने के लिए किया जाता है, और मिलान के परिणामों को प्रमाण माना जाता है कि पासवर्ड समान थे।
यह तकनीकी रूप से गूढ़लेखन नहीं है क्योंकि डेटा (सभी बिट शून्य) को गुप्त नहीं रखा जा रहा है; यह व्यापक रूप से पहले से सभी के लिए जाना जाता है। यद्यपि, डीईएस की एक विशेषता यह है कि यह [[ज्ञात सादा पाठ|ज्ञात सादे पाठ]] स्थितियों में भी की पुनः प्राप्ति के लिए बहुत प्रतिरोधी है। यह सैद्धांतिक रूप से संभव है कि दो अलग-अलग पासवर्ड का परिणाम एक ही हैश में हो सकता है। इस प्रकार पासवर्ड को कभी भी डिक्रिप्ट नहीं किया जाता है: इसका उपयोग मात्र परिणाम की गणना करने के लिए किया जाता है, और मिलान के परिणामों को प्रमाण माना जाता है कि पासवर्ड समान थे।
Line 117: Line 117:


==== पारंपरिक पद्धति की दुर्बलता ====
==== पारंपरिक पद्धति की दुर्बलता ====
पारंपरिक डीईएस-आधारित क्रिप्ट एल्गोरिदम मूल रूप से चुना गया था क्योंकि डीईएस ज्ञात सादे पाठ हमलों के सामने भी कुंजी पुनर्प्राप्ति के लिए प्रतिरोधी था, और क्योंकि यह कम्प्यूटेशनल रूप से महंगा था। शुरुआती यूनिक्स मशीनों पर पासवर्ड हैश की गणना करने में पूरे एक सेकंड का समय लगता था। इसने उस युग में शब्दकोष के हमलों के लिए यथोचित प्रतिरोधी बना दिया। उस समय पासवर्ड हैश सामान्यतः एक खाता फ़ाइल (<code>[[/etc/passwd]]</code>) जो प्रणाली पर किसी के लिए भी पठनीय था। (इस खाता फ़ाइल का उपयोग उपयोगकर्ता आईडी नंबरों को नामों में, और उपयोगकर्ता नामों को पूर्ण नामों आदि में मैप करने के लिए भी किया गया था)।
पारंपरिक डीईएस-आधारित क्रिप्ट एल्गोरिदम मूल रूप से चुना गया था क्योंकि डीईएस ज्ञात सादे पाठ आक्षेप के सामने भी कुंजी पुनर्प्राप्ति के लिए प्रतिरोधी था, और क्योंकि यह संगणनात्मक रूप से कीमती था। प्रारंभिक यूनिक्स मशीनों पर पासवर्ड हैश की गणना करने में पूरे एक सेकंड का समय लगता था। इसने उस युग में शब्दकोष के आक्षेप के लिए यथोचित प्रतिरोधी बना दिया। उस समय पासवर्ड हैश सामान्यतः एक खाता फ़ाइल (<code>[[/etc/passwd]]</code>) में संग्रहीत किया जाता था जो प्रणाली पर किसी के लिए भी पठनीय था। (इस खाता फ़ाइल का उपयोग उपयोगकर्ता आईडी संख्याओं को नामों में, और उपयोगकर्ता नामों को पूर्ण नामों आदि में प्रतिचित्रित करने के लिए भी किया गया था)।


उस समय से तीन दशकों में, कंप्यूटर बहुत अधिक शक्तिशाली हो गए हैं। मूर के नियम को सामान्यतः सही माना गया है, इसलिए किसी दिए गए वित्तीय निवेश के लिए उपलब्ध कंप्यूटर की गति और क्षमता यूनिक्स के पहली बार लिखे जाने के बाद से 20 गुना से अधिक हो गई है। इसने लंबे समय से डीईएस-आधारित एल्गोरिदम को शब्दकोश हमलों के प्रति संवेदनशील बना दिया है, और यूनिक्स और यूनिक्स जैसी प्रणालियों जैसे कि [[लिनक्स]] ने शैडो पासवर्ड का उपयोग किया है। लंबे समय तक शैडो फाइलें, खाता फ़ाइल से मात्र पासवर्ड हैश मानों को माइग्रेट करना (<code>/etc/passwd</code>) और एक फ़ाइल में (पारंपरिक रूप से नामित <code>[[/etc/shadow|/etc/एसएचएdow]]</code>) जिसे मात्र विशेषाधिकार प्राप्त प्रक्रियाओं द्वारा ही पढ़ा जा सकता है।
उस समय से तीन दशकों में, कंप्यूटर बहुत अधिक शक्तिशाली हो गए हैं। मूर के नियम को सामान्यतः सत्य माना गया है, इसलिए किसी दिए गए वित्तीय निवेश के लिए उपलब्ध कंप्यूटर की गति और क्षमता यूनिक्स के पहली बार लिखे जाने के बाद से 20 गुना से अधिक हो गई है। इसने लंबे समय से डीईएस-आधारित एल्गोरिदम को शब्दकोश आक्षेप के प्रति संवेदनशील बना दिया है, और यूनिक्स और यूनिक्स जैसी प्रणालियों जैसे कि [[लिनक्स]] ने लंबे समय तक "शैडो" फ़ाइलोंका उपयोग किया है, खाता फ़ाइल (<code>/etc/passwd</code>) से मात्र पासवर्ड हैश मानों को गतिमान करना और एक फ़ाइल में (पारंपरिक रूप से नामित <code>[[/etc/shadow|/etc/shodow]]</code>) जिसे मात्र विशेषाधिकार प्राप्त प्रक्रियाओं द्वारा ही पढ़ा जा सकता है।


पासवर्ड तोड़ने की कम्प्यूटेशनल लागत को बढ़ाने के लिए, कुछ यूनिक्स साइटों ने निजी तौर पर तदर्थ आधार पर गूढ़लेखन आवर्तन की संख्या में वृद्धि करना प्रारम्भ कर दिया।{{Citation needed|date=July 2011}} इसका उनके बनाने का साइड इफेक्ट था <code>crypt()</code> मानक के साथ असंगत <code>crypt()</code>: हैश का शाब्दिक रूप समान था, लेकिन अब एक अलग एल्गोरिदम का उपयोग करके गणना की गई थी। मानक ऑल-बिट-शून्य से प्रारंभिक कक्ष को संशोधित करके कुछ साइटों ने इस असंगति प्रभाव का भी लाभ उठाया।{{Citation needed|date=July 2011}} इससे हैशिंग की लागत में वृद्धि नहीं हुई, लेकिन इसका मतलब यह था कि मानक के आधार पर प्रीकंप्यूटेड हैश शब्दकोश {{mono|crypt()}} लागू नहीं किया जा सका।
पासवर्ड तोड़ने की संगणनात्मक लागत को बढ़ाने के लिए, कुछ यूनिक्स साइटों ने व्यक्तिगत रूप से तदर्थ आधार पर गूढ़लेखन आवर्तन की संख्या में वृद्धि करना प्रारम्भ कर दिया।{{Citation needed|date=July 2011}} इसका उनके <code>crypt()</code> को मानक <code>crypt()</code> के साथ असंगत बनाने का दुष्प्रभाव था: हैश का एक ही शाब्दिक रूप था, परन्तु अब एक अलग एल्गोरिदम का उपयोग करके गणना की गई थी। मानक सभी-बिट-शून्य से प्रारंभिक कक्ष को संशोधित करके कुछ साइटों ने इस असंगति प्रभाव का भी लाभ उठाया।{{Citation needed|date=July 2011}} इससे हैशिंग की लागत में वृद्धि नहीं हुई, परन्तु इसका अर्थ यह था कि मानक {{mono|crypt()}} के आधार पर पूर्व संगणित हैश शब्दकोशों को लागू नहीं किया जा सका।


=== बीएसडीआई ने डीईएस-आधारित पद्धति का विस्तार किया ===
=== बीएसडीआई ने डीईएस-आधारित पद्धति का विस्तार किया ===
[[बर्कले सॉफ्टवेयर डिजाइन]] ने क्लासिक डीईएस-आधारित पद्धति में मामूली संशोधन किया। बीएसडीआई ने साल्ट को 24 बिट तक बढ़ाया और आवर्तन की संख्या को चर बना दिया (2 तक<sup>24</sup>-1). आवर्तन की चुनी हुई संख्या संग्रहीत पासवर्ड हैश में एन्कोड की गई है, जो साइट द्वारा मूल पद्धति द्वारा उपयोग किए जाने वाले आवर्तन की संख्या को संशोधित करने पर उत्पन्न होने वाली असंगति से बचाती है। अंडरस्कोर से प्रारम्भ करके इन हैश की पहचान की जाती है (<code>_</code>), जिसके बाद 4 वर्ण आवर्तन की संख्या का प्रतिनिधित्व करते हैं, फिर साल्ट के लिए 4 वर्ण।
[[बर्कले सॉफ्टवेयर डिजाइन]] ने उत्कृष्ट डीईएस-आधारित पद्धति में साधारण संशोधन किया। बीएसडीआई ने साल्ट को 24 बिट तक बढ़ाया और आवर्तन की संख्या को चर बना दिया (2<sup>24</sup>-1 )आवर्तन की चुनी हुई संख्या संग्रहीत पासवर्ड हैश में विकोडित की गई है, जो साइट द्वारा मूल पद्धति द्वारा उपयोग किए जाने वाले आवर्तन की संख्या को संशोधित करने पर उत्पन्न होने वाली असंगति से बचाती है। इन हैश की पहचान अधोरेखांकन (<code>_</code>) से प्रारम्भ करके की जाती है, जिसके बाद 4 वर्ण आवर्तन की संख्या का प्रतिनिधित्व करते हैं, फिर साल्ट के लिए 4 वर्ण।


बीएसडीआई एल्गोरिदम भी लंबे पासवर्ड का समर्थन करता है, डीईएस का उपयोग करके प्रारंभिक लंबे पासवर्ड को मूल एल्गोरिदम द्वारा समर्थित आठ 7-बिट बाइट्स तक नीचे कर देता है।
बीएसडीआई एल्गोरिदम भी लंबे पासवर्ड का समर्थन करता है, डीईएस का उपयोग करके प्रारंभिक लंबे पासवर्ड को मूल एल्गोरिदम द्वारा समर्थित आठ 7-बिट बाइट तक नीचे कर देता है।


=== एमडी5-आधारित पद्धति ===
=== एमडी5-आधारित पद्धति ===
[[Poul-Henning Kamp]] ने एमडी5 संदेश डाइजेस्ट एल्गोरिदम पर आधारित एक बारोक और (उस समय) कम्प्यूटेशनल रूप से महंगा एल्गोरिदम डिज़ाइन किया। एमडी5 स्वयं पासवर्ड हैश के लिए ठीक गूढ़लेखिकी ताकत प्रदान करेगा, लेकिन यह प्रदान की जाने वाली ताकत के सापेक्ष गणना करने के लिए काफी तीव्र डिज़ाइन किया गया है। शब्दकोश हमलों को मंद करने के लिए, क्रिप्ट () पद्धति की गणना करने के लिए महंगा होने के लिए डिज़ाइन किया गया है। एमडी5 पासवर्ड हैश का मुद्रण करने योग्य रूप से प्रारम्भ होता है <code>$1$</code>.
[[Poul-Henning Kamp|पॉल-हेनिंग कैंप]] ने एमडी5 संदेश डाइजेस्ट एल्गोरिदम पर आधारित एक बारोक और (उस समय) संगणनात्मक रूप से महंगा एल्गोरिदम डिज़ाइन किया। एमडी5 स्वयं पासवर्ड हैश के लिए ठीक गूढ़लेखिकी ताकत प्रदान करेगा, परन्तु यह प्रदान की जाने वाली ताकत के सापेक्ष गणना करने के लिए काफी तीव्र डिज़ाइन किया गया है। शब्दकोश आक्षेप को मंद करने के लिए, क्रिप्ट () पद्धति की गणना करने के लिए महंगा होने के लिए डिज़ाइन किया गया है। एमडी5 पासवर्ड हैश का मुद्रण करने योग्य रूप से प्रारम्भ होता है <code>$1$</code>.


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


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


निश्चित पुनरावृति गणना के कारण इस पद्धति ने कम्प्यूटेशनल व्यय को खो दिया है जो एक बार आनंद लिया था और अब चक्रों की परिवर्तनीय संख्या का समर्थन किया जाता है। जून 2012 में, पॉल-हेनिंग काम्प ने एल्गोरिदम को असुरक्षित घोषित किया और उपयोगकर्ताओं को मजबूत पासवर्ड स्क्रैम्बलर में माइग्रेट करने के लिए प्रोत्साहित किया।<ref>{{cite web|url=http://phk.freebsd.dk/sagas/md5crypt_eol.html|title=Md5crypt Password scrambler is no longer considered safe by author — PHKs Bikeshed|website=Phk.freebsd.dk|access-date=2 December 2018|archive-url=https://web.archive.org/web/20180317164935/http://phk.freebsd.dk/sagas/md5crypt_eol.html|archive-date=17 March 2018}}</ref>
निश्चित पुनरावृति गणना के कारण इस पद्धति ने संगणनात्मक व्यय को खो दिया है जो एक बार आनंद लिया था और अब चक्रों की परिवर्तनीय संख्या का समर्थन किया जाता है। जून 2012 में, पॉल-हेनिंग काम्प ने एल्गोरिदम को असुरक्षित घोषित किया और उपयोगकर्ताओं को मजबूत पासवर्ड स्क्रैम्बलर में माइग्रेट करने के लिए प्रोत्साहित किया।<ref>{{cite web|url=http://phk.freebsd.dk/sagas/md5crypt_eol.html|title=Md5crypt Password scrambler is no longer considered safe by author — PHKs Bikeshed|website=Phk.freebsd.dk|access-date=2 December 2018|archive-url=https://web.archive.org/web/20180317164935/http://phk.freebsd.dk/sagas/md5crypt_eol.html|archive-date=17 March 2018}}</ref>




Line 148: Line 148:
  | first = Solar | last = Designer
  | first = Solar | last = Designer
}} See also {{CVE|2011-2483}}.</ref> इस स्ट्रिंग द्वारा संकेतित हैश अब अस्पष्ट हैं और त्रुटिपूर्ण कार्यान्वयन, या बाद के निश्चित, कार्यान्वयन द्वारा उत्पन्न हो सकते हैं। गैर-ASCII (8-बिट-सेट) वर्ण वाले कुछ पासवर्ड स्ट्रिंग्स द्वारा त्रुटि को ट्रिगर किया जा सकता है।
}} See also {{CVE|2011-2483}}.</ref> इस स्ट्रिंग द्वारा संकेतित हैश अब अस्पष्ट हैं और त्रुटिपूर्ण कार्यान्वयन, या बाद के निश्चित, कार्यान्वयन द्वारा उत्पन्न हो सकते हैं। गैर-ASCII (8-बिट-सेट) वर्ण वाले कुछ पासवर्ड स्ट्रिंग्स द्वारा त्रुटि को ट्रिगर किया जा सकता है।
* <code>$2b$</code>{{snd}} रैपअआवर्तन समस्या को कम करने के लिए हाल के OpenBSD कार्यान्वयन द्वारा उपयोग किया जाता है।<ref>{{Cite web|url=http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/crypt/bcrypt.c?rev=1.27&content-type=text/x-cvsweb-markup|title=src/lib/libc/crypt/bcrypt.c – view – 1.27|website=Cvsweb.openbsd.org|access-date=2016-05-14}}</ref> एल्गोरिदम के पिछले संस्करणों में लंबे पासवर्ड की समस्या है। डिज़ाइन के अनुसार, लंबे पासवर्ड को 72 अक्षरों में काट दिया जाता है, लेकिन कुछ पासवर्ड लंबाई के साथ एक बाइट पूर्णांक रैपआवर्तन समस्या होती है, जिसके परिणामस्वरूप दुर्बल हैश होता है।<ref>{{cite web
* <code>$2b$</code>{{snd}} रैपअआवर्तन समस्या को कम करने के लिए हाल के OpenBSD कार्यान्वयन द्वारा उपयोग किया जाता है।<ref>{{Cite web|url=http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/crypt/bcrypt.c?rev=1.27&content-type=text/x-cvsweb-markup|title=src/lib/libc/crypt/bcrypt.c – view – 1.27|website=Cvsweb.openbsd.org|access-date=2016-05-14}}</ref> एल्गोरिदम के पिछले संस्करणों में लंबे पासवर्ड की समस्या है। डिज़ाइन के अनुसार, लंबे पासवर्ड को 72 अक्षरों में काट दिया जाता है, परन्तु कुछ पासवर्ड लंबाई के साथ एक बाइट पूर्णांक रैपआवर्तन समस्या होती है, जिसके परिणामस्वरूप दुर्बल हैश होता है।<ref>{{cite web
  | url = http://www.openwall.com/lists/oss-security/2012/01/02/4
  | url = http://www.openwall.com/lists/oss-security/2012/01/02/4
  | title = OpenBSD bcrypt 8-bit key_len wraparound | date = 2012-01-02
  | title = OpenBSD bcrypt 8-bit key_len wraparound | date = 2012-01-02
  | first = Solar | last = Designer
  | first = Solar | last = Designer
}}</ref>
}}</ref>
* <code>$2x$</code>{{snd}} के बाद एक ध्वज जोड़ा गया {{tt|crypt_blowfish}} बग खोज। पुराने हैश का नाम बदलकर किया जा सकता है <code>$2x$</code> यह इंगित करने के लिए कि वे टूटे हुए एल्गोरिदम के साथ उत्पन्न हुए थे। ये हैश अभी भी दुर्बल हैं, लेकिन कम से कम यह स्पष्ट है कि उन्हें उत्पन्न करने के लिए किस एल्गोरिदम का उपयोग किया गया था।
* <code>$2x$</code>{{snd}} के बाद एक ध्वज जोड़ा गया {{tt|crypt_blowfish}} बग खोज। पुराने हैश का नाम बदलकर किया जा सकता है <code>$2x$</code> यह इंगित करने के लिए कि वे टूटे हुए एल्गोरिदम के साथ उत्पन्न हुए थे। ये हैश अभी भी दुर्बल हैं, परन्तु कम से कम यह स्पष्ट है कि उन्हें उत्पन्न करने के लिए किस एल्गोरिदम का उपयोग किया गया था।
* <code>$2y$</code>{{snd}} में एक झंडा {{tt|crypt_blowfish}} स्पष्ट रूप से नए, सही एल्गोरिदम का उपयोग करने के लिए। बग से पीड़ित पुराने कार्यान्वयन पर, <code>$2y$</code> बस कार्य नहीं करेगा। एक नए, निश्चित कार्यान्वयन पर, यह उपयोग करने के समान परिणाम देगा <code>$2b$</code>.
* <code>$2y$</code>{{snd}} में एक झंडा {{tt|crypt_blowfish}} स्पष्ट रूप से नए, सत्य एल्गोरिदम का उपयोग करने के लिए। बग से पीड़ित पुराने कार्यान्वयन पर, <code>$2y$</code> बस कार्य नहीं करेगा। एक नए, निश्चित कार्यान्वयन पर, यह उपयोग करने के समान परिणाम देगा <code>$2b$</code>.


ब्लोफिश अपने महंगे कुंजी सेटअप चरण के लिए कक्ष सिफर के बीच उल्लेखनीय है। यह एक मानक स्थिति में उपकुंजियों के साथ प्रारम्भ होता है, फिर कुंजी के हिस्से का उपयोग करके कक्ष गूढ़लेखन करने के लिए इस स्थिति का उपयोग करता है, और कुछ उपकुंजियों को बदलने के लिए उस गूढ़लेखन (वास्तव में, एक हैशिंग) के परिणाम का उपयोग करता है। फिर यह कुंजी के दूसरे भाग को एन्क्रिप्ट करने के लिए इस संशोधित स्थिति का उपयोग करता है, और अधिक उपकुंजियों को बदलने के लिए परिणाम का उपयोग करता है। यह इस प्रकार से आगे बढ़ता है, जब तक कि सभी उपकुंजियों को सेट नहीं किया जाता है, तब तक कुंजी को हैश करने और राज्य के बिट को बदलने के लिए उत्तरोत्तर संशोधित स्थिति का उपयोग किया जाता है।
ब्लोफिश अपने महंगे कुंजी सेटअप चरण के लिए कक्ष सिफर के बीच उल्लेखनीय है। यह एक मानक स्थिति में उपकुंजियों के साथ प्रारम्भ होता है, फिर कुंजी के हिस्से का उपयोग करके कक्ष गूढ़लेखन करने के लिए इस स्थिति का उपयोग करता है, और कुछ उपकुंजियों को बदलने के लिए उस गूढ़लेखन (वास्तव में, एक हैशिंग) के परिणाम का उपयोग करता है। फिर यह कुंजी के दूसरे भाग को एन्क्रिप्ट करने के लिए इस संशोधित स्थिति का उपयोग करता है, और अधिक उपकुंजियों को बदलने के लिए परिणाम का उपयोग करता है। यह इस प्रकार से आगे बढ़ता है, जब तक कि सभी उपकुंजियों को सेट नहीं किया जाता है, तब तक कुंजी को हैश करने और राज्य के बिट को बदलने के लिए उत्तरोत्तर संशोधित स्थिति का उपयोग किया जाता है।
Line 188: Line 188:
: यसक्रिप्ट, एसक्रिप्ट का एक विस्तार है ({{code|$7$}}) और एक पीएचसी फाइनलिस्ट। इसका उपयोग वर्तमाना पद्धतिओं के विकल्प के रूप में कई [[लिनक्स वितरण]]ों में किया जाता है।<ref>{{cite web |title=FESCo Says "Yes" To Fedora 35 Using Yescrypt For Hashing Shadow Passwords - Phoronix |url=https://www.phoronix.com/scan.php?page=news_item&px=Fedora-35-Yescrypt-Yes |website=www.phoronix.com}}</ref> इस हैश का उपयोग करने के लिए, {{code|libcrypt}} को glibc से libxcrypt प्रोजेक्ट से पिछड़े-संगत से बदल दिया गया है।<ref>{{cite web |title=Changes/yescrypt as default hashing method for shadow - Fedora Project Wiki |url=https://fedoraproject.org/wiki/Changes/yescrypt_as_default_hashing_method_for_shadow |website=libxcrypt: Is already capable for computing yescrypt hashes since v4.3.}}</ref>
: यसक्रिप्ट, एसक्रिप्ट का एक विस्तार है ({{code|$7$}}) और एक पीएचसी फाइनलिस्ट। इसका उपयोग वर्तमाना पद्धतिओं के विकल्प के रूप में कई [[लिनक्स वितरण]]ों में किया जाता है।<ref>{{cite web |title=FESCo Says "Yes" To Fedora 35 Using Yescrypt For Hashing Shadow Passwords - Phoronix |url=https://www.phoronix.com/scan.php?page=news_item&px=Fedora-35-Yescrypt-Yes |website=www.phoronix.com}}</ref> इस हैश का उपयोग करने के लिए, {{code|libcrypt}} को glibc से libxcrypt प्रोजेक्ट से पिछड़े-संगत से बदल दिया गया है।<ref>{{cite web |title=Changes/yescrypt as default hashing method for shadow - Fedora Project Wiki |url=https://fedoraproject.org/wiki/Changes/yescrypt_as_default_hashing_method_for_shadow |website=libxcrypt: Is already capable for computing yescrypt hashes since v4.3.}}</ref>
; {{code|$argon2d$}}, {{code|$argon2i$}}, {{code|$argon2ds$}}
; {{code|$argon2d$}}, {{code|$argon2i$}}, {{code|$argon2ds$}}
: ये [[Argon2]] एल्गोरिदम के लिए पीएचसी द्वारा निर्दिष्ट नाम हैं, लेकिन व्यापक रूप से उपयोग किए जाने वाले प्रतीत नहीं होते हैं।
: ये [[Argon2]] एल्गोरिदम के लिए पीएचसी द्वारा निर्दिष्ट नाम हैं, परन्तु व्यापक रूप से उपयोग किए जाने वाले प्रतीत नहीं होते हैं।


अतिरिक्त प्रारूप, यदि कोई हो, कार्यान्वयन के [[मैन पेज|मैन पृष्ठ]] में वर्णित हैं।<ref>
अतिरिक्त प्रारूप, यदि कोई हो, कार्यान्वयन के [[मैन पेज|मैन पृष्ठ]] में वर्णित हैं।<ref>
Line 198: Line 198:
==== पुरातन यूनिक्स पद्धतिएं ====
==== पुरातन यूनिक्स पद्धतिएं ====
BigCrypt, HP-UX, Digital Unix, और OSF/1 पर प्रयुक्त डीईएस-Crypt का संशोधित संस्करण है। इसके और डीईएस के बीच मुख्य अंतर यह है कि BigCrypt एक पासवर्ड के सभी वर्णों का उपयोग करता है, न कि मात्र पहले 8 का, और इसकी एक चर लंबाई हैश है।<ref>{{cite web|url=https://pythonhosted.org/passlib/lib/passlib.hash.bigcrypt.html|title=passlib.hash.bigcrypt - BigCrypt — Passlib v1.7.1 Documentation|website=Pythonhosted.org|access-date=2 December 2018}}</ref>
BigCrypt, HP-UX, Digital Unix, और OSF/1 पर प्रयुक्त डीईएस-Crypt का संशोधित संस्करण है। इसके और डीईएस के बीच मुख्य अंतर यह है कि BigCrypt एक पासवर्ड के सभी वर्णों का उपयोग करता है, न कि मात्र पहले 8 का, और इसकी एक चर लंबाई हैश है।<ref>{{cite web|url=https://pythonhosted.org/passlib/lib/passlib.hash.bigcrypt.html|title=passlib.hash.bigcrypt - BigCrypt — Passlib v1.7.1 Documentation|website=Pythonhosted.org|access-date=2 December 2018}}</ref>
Crypt16 डीईएस का मामूली संशोधन है, जो 16 अक्षरों तक के पासवर्ड की अनुमति देता है। अल्ट्रिक्स और ट्रू64 पर इस्तेमाल किया गया।<ref>{{cite web|url=https://pythonhosted.org/passlib/lib/passlib.hash.crypt16.html|title=passlib.hash.crypt16 - Crypt16 — Passlib v1.7.1 Documentation|website=Pythonhosted.org|access-date=2 December 2018}}</ref>
Crypt16 डीईएस का साधारण संशोधन है, जो 16 अक्षरों तक के पासवर्ड की अनुमति देता है। अल्ट्रिक्स और ट्रू64 पर इस्तेमाल किया गया।<ref>{{cite web|url=https://pythonhosted.org/passlib/lib/passlib.hash.crypt16.html|title=passlib.hash.crypt16 - Crypt16 — Passlib v1.7.1 Documentation|website=Pythonhosted.org|access-date=2 December 2018}}</ref>





Revision as of 17:59, 21 May 2023


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

अधिक औपचारिक रूप से, क्रिप्ट यूनिक्स प्रणाली पर पासवर्ड सत्यापन और भंडारण के लिए गूढ़लेखिकी कुंजी व्युत्पत्ति प्रकार्य प्रदान करता है।

यूनिक्स क्रिप्ट उपयोगिता से संबंध

यूनिक्स में एक असंबंधित क्रिप्ट (यूनिक्स) उपयोगिता है, जिसे प्रायः सी लाइब्रेरी प्रकार्य के साथ भ्रमित किया जाता है। दोनों के बीच अंतर करने के लिए, लेखक प्रायः उपयोगिता प्रोग्राम को 'क्रिप्ट (1)' के रूप में संदर्भित करते हैं, क्योंकि यह यूनिक्स मैनुअल पृष्ठ (यूनिक्स) के खंड 1 में प्रलेखित है, और सी लाइब्रेरी प्रकार्य को 'क्रिप्ट' के रूप में संदर्भित करता है। (3) , क्योंकि इसका प्रलेखन मैनुअल अनुभाग 3 में है।[1]


विवरण

यह एक ही क्रिप्ट प्रकार्य का उपयोग भंडारण के लिए एक नवीन हैश उत्पन्न करने के लिए और तुलना के लिए अभिलेखबद्ध किए गए साल्ट (गूढ़लेखिकी) के साथ एक प्रस्तावित पासवर्ड को हैश करने के लिए भी किया जाता है।

क्रिप्ट लाइब्रेरी परिच्छेदन के आधुनिक यूनिक्स कार्यान्वयन विभिन्न प्रकार की हैश पद्धतिओं का समर्थन करते हैं। मॉड्यूलर क्रिप्ट प्रारूप नामक वास्तविक मानक के बाद, परिणामस्वरूप हैशटेक्स्ट में उपयोग किए जाने वाले विशेष हैश एल्गोरिदम को एक अद्वितीय कोड प्रीफिक्स द्वारा पहचाना जा सकता है।[2][3][4]

crypt() लाइब्रेरी प्रकार्य पर्ल,[5] पीएचपी,[6] पाईक (प्रोग्रामिंग भाषा),[7] पायथन (प्रोग्रामिंग भाषा)[8] (यद्यपि अब इसे 3.11 के रूप में हटा दिया गया है), और रूबी (प्रोग्रामिंग भाषा)[9] प्रोग्रामिंग भाषाओं में भी सम्मिलित है।

क्रिप्ट द्वारा समर्थित कुंजी व्युत्पत्ति प्रकार्य

समय के साथ विभिन्न एल्गोरिदम प्रस्तुत किए गए हैं। पिछड़े संगतता को सक्षम करने के लिए, प्रत्येक पद्धति ने पासवर्ड हैश के क्रमांकन के कुछ सम्मेलन का उपयोग करना प्रारम्भ किया जिसे बाद में मॉड्यूलर क्रिप्ट प्रारूप (एमसीएफ) कहा गया।[3] वास्तविक एमसीएफ मानक से पहले जनित किया गया प्राचीन क्रिप्ट(3) हैश एक पद्धति से दूसरी पद्धति में भिन्न हो सकता है। पासवर्ड हैशिंग प्रतियोगिता के समय मॉड्यूलर क्रिप्ट प्रारूप का एक ठीक रूप से परिभाषित उपसमूह बनाया गया था।[3] प्रारूप को इस प्रकार परिभाषित किया गया है:[10]

$<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]]

जहाँ

  • id: हैशिंग एल्गोरिदम का प्रतिनिधित्व करने वाला एक पहचानकर्ता (जैसे कि एमडी5 के लिए 1, एसएचए-2 आदि के लिए 5)
  • param नाम और उसकी value: हैश जटिलता पैरामीटर, जैसे आवर्तन/पुनरावृत्तियों की संख्या
  • salt: मूलांक-64 विकोडित साल्ट (गूढ़लेखिकी)
  • hash: पासवर्ड और साल्ट को हैश करने का मूलांक -64 विकोडित परिणाम

क्रिप्ट में रेडिक्स-64 विकोडन को बी64 कहा जाता है और वर्णमाला का उपयोग करता है ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz जो अधिक सामान्य बेस64 कार्यान्वयन और इतिहास से भिन्न है

पद्धति आईडी रूपरेखा उदाहरण
डीईएस Kyq4bCxAXJkbg
_ बीएसडीआई _EQ0.jzhSVeUyoSqLupI
1 एमडी5 $1$etNnh7FA$OlM7eljE/B7F1J4XYNnk81
2, 2a, 2b, 2x, 2y बीक्रिप्ट $2a$10$VIhIOofSMqgdGlL4wzE//e.77dAQGqntF/1dT7bqCrVtquInWy2qi
3 एनटीहैश $3$$8846f7eaee8fb117ad06bdd830b7586c
5 एसएचए-256 $5$9ks3nNEqv31FX.F$gdEoLFsCRsn/WRN3wxUnzfeZLoooVlzeF4WjLomTRFD
6 एसएचए-512 $6$qoE2letU$wWPRl.PVczjzeMVgjiA8LLy2nOyZbf7Amj3qLIL978o18gbMySdKZ7uepq9tmMQXxyTIrS12Pln.2Q/6Xscao0
7 एसक्रिप्ट $7$DU..../....2Q9obwLhin8qvQl6sisAO/$एसएचएyJj/JBdcuD4lJ1AxiwCo9e5XSi8TcINcmyID12i8
8 (Cisco) एसएचए256 के साथपीबीकेडीएफ2 $8$mTj4RZG8N9ZDOk$elY/asfm8kD3iDmkBe3hD2r4xcA/0oWS5V3os.O91u.
8 (JunOS) पीबीकेडीएफ2 $8$crypt-algo$hash-algo$iterations$salt$iv$tag$encrypted

$8$aes256-gcm$hmac-एसएचए2-256$100$y/4YMC4YDLU$fzYDI4jjN6YCyQsYLsaf8A$Ilu4jLcZarD9YnyD /Hejww$okhBlc0cGakSqYxKww

gy गोस्त-यसक्रिप्ट $gy$jCT$HM87v.7RwpQLba8fDjNSk1$VgqS7k2OZWhFbAJVBye2vaA7ex/1VtU3a5fmL8Wv/26
md5 सोलारिस एमडी5 $एमडी5,rounds=5000$GUBv0xjJ$$mSwgIswdjlTY0YxV7HBVm0
sha1 एसएचए-1

के साथपीबीकेडीएफ1

$एसएचए1$40000$jtNX3nZ2$hBNaIXkt4wBI2o5rsi8KejSjNqIq
y यसक्रिप्ट $y$j9T$F5Jx5fExrKuPp53xLKQ..1$X3DX6M94c7o.9agCG9G317fhZg9SqC.5i5rd.RhAtQ7

पीएचसी उपसमूह में अधिकांश एमसीएफ हैश सम्मिलित हैं। कई अतिरिक्त एप्लिकेशन-परिभाषित विधियां स्थित हैं।[3]



एक कुंजी के रूप में पासवर्ड का उपयोग करके मूल कार्यान्वयन

तीसरे संस्करण यूनिक्स में[11] क्रिप्ट() लाइब्रेरी प्रकार्य का मूल कार्यान्वयन[12] ने एम-209 सिफर मशीन का अनुकरण किया। एक कुंजी के साथ पासवर्ड को एन्क्रिप्ट करने के अतिरिक्त, जो पासवर्ड को गूढलेखित मान और कुंजी से पुनर्प्राप्त करने की अनुमति देता, उसने पासवर्ड को एक कुंजी के रूप में उपयोग किया, और पासवर्ड डेटाबेस में इस कुंजी के साथ पासवर्ड को एन्क्रिप्ट करने का परिणाम था।

पारंपरिक डीईएस-आधारित पद्धति

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

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

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

इस पद्धति का लाभ यह रहा है कि हैशटेक्स्ट को प्रणाली संचालनों या अन्य उपयोगकर्ताओं को संबंधित सादे पाठ पासवर्ड को उद्भासित किए बिना यूनिक्स प्रणाली के बीच संग्रहीत और अनुकरण किया जा सकता है। इस सुवाह्यता ने 30 से अधिक वर्षों तक कंप्यूटिंग स्थापत्य की कई पीढ़ियों और कई विक्रेताओं से यूनिक्स के कई संस्करणों में कार्य किया है।

पारंपरिक पद्धति की दुर्बलता

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

उस समय से तीन दशकों में, कंप्यूटर बहुत अधिक शक्तिशाली हो गए हैं। मूर के नियम को सामान्यतः सत्य माना गया है, इसलिए किसी दिए गए वित्तीय निवेश के लिए उपलब्ध कंप्यूटर की गति और क्षमता यूनिक्स के पहली बार लिखे जाने के बाद से 20 गुना से अधिक हो गई है। इसने लंबे समय से डीईएस-आधारित एल्गोरिदम को शब्दकोश आक्षेप के प्रति संवेदनशील बना दिया है, और यूनिक्स और यूनिक्स जैसी प्रणालियों जैसे कि लिनक्स ने लंबे समय तक "शैडो" फ़ाइलोंका उपयोग किया है, खाता फ़ाइल (/etc/passwd) से मात्र पासवर्ड हैश मानों को गतिमान करना और एक फ़ाइल में (पारंपरिक रूप से नामित /etc/shodow) जिसे मात्र विशेषाधिकार प्राप्त प्रक्रियाओं द्वारा ही पढ़ा जा सकता है।

पासवर्ड तोड़ने की संगणनात्मक लागत को बढ़ाने के लिए, कुछ यूनिक्स साइटों ने व्यक्तिगत रूप से तदर्थ आधार पर गूढ़लेखन आवर्तन की संख्या में वृद्धि करना प्रारम्भ कर दिया।[citation needed] इसका उनके crypt() को मानक crypt() के साथ असंगत बनाने का दुष्प्रभाव था: हैश का एक ही शाब्दिक रूप था, परन्तु अब एक अलग एल्गोरिदम का उपयोग करके गणना की गई थी। मानक सभी-बिट-शून्य से प्रारंभिक कक्ष को संशोधित करके कुछ साइटों ने इस असंगति प्रभाव का भी लाभ उठाया।[citation needed] इससे हैशिंग की लागत में वृद्धि नहीं हुई, परन्तु इसका अर्थ यह था कि मानक crypt() के आधार पर पूर्व संगणित हैश शब्दकोशों को लागू नहीं किया जा सका।

बीएसडीआई ने डीईएस-आधारित पद्धति का विस्तार किया

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

बीएसडीआई एल्गोरिदम भी लंबे पासवर्ड का समर्थन करता है, डीईएस का उपयोग करके प्रारंभिक लंबे पासवर्ड को मूल एल्गोरिदम द्वारा समर्थित आठ 7-बिट बाइट तक नीचे कर देता है।

एमडी5-आधारित पद्धति

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

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

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

निश्चित पुनरावृति गणना के कारण इस पद्धति ने संगणनात्मक व्यय को खो दिया है जो एक बार आनंद लिया था और अब चक्रों की परिवर्तनीय संख्या का समर्थन किया जाता है। जून 2012 में, पॉल-हेनिंग काम्प ने एल्गोरिदम को असुरक्षित घोषित किया और उपयोगकर्ताओं को मजबूत पासवर्ड स्क्रैम्बलर में माइग्रेट करने के लिए प्रोत्साहित किया।[14]


ब्लोफिश-आधारित पद्धति

नील्स प्रोवोस और डेविड माज़िएरेस ने ब्लोफिश (सिफर) पर आधारित एक क्रिप्ट () पद्धति को डिजाइन किया, जिसे बीक्रिप्ट कहा जाता है, और इसे 1999 में यूसेनिक्स में प्रस्तुत किया।[15] इन हैश का मुद्रण करने योग्य रूप से प्रारम्भ होता है $2$, $2a$, $2b$, $2x$ या $2y$ एल्गोरिदम के किस संस्करण का उपयोग किया जाता है इसके आधार पर:

  • $2$ – अप्रचलित।
  • $2a$ – इस पद्धति की पहचान करने के लिए उपयोग की जाने वाली वर्तमान कुंजी। चूंकि 2011 में एक गैर-ओपनबीएसडी में एक बड़ी सुरक्षा खामी का पता चला था crypt_blowfish एल्गोरिदम का कार्यान्वयन,[16] इस स्ट्रिंग द्वारा संकेतित हैश अब अस्पष्ट हैं और त्रुटिपूर्ण कार्यान्वयन, या बाद के निश्चित, कार्यान्वयन द्वारा उत्पन्न हो सकते हैं। गैर-ASCII (8-बिट-सेट) वर्ण वाले कुछ पासवर्ड स्ट्रिंग्स द्वारा त्रुटि को ट्रिगर किया जा सकता है।
  • $2b$ – रैपअआवर्तन समस्या को कम करने के लिए हाल के OpenBSD कार्यान्वयन द्वारा उपयोग किया जाता है।[17] एल्गोरिदम के पिछले संस्करणों में लंबे पासवर्ड की समस्या है। डिज़ाइन के अनुसार, लंबे पासवर्ड को 72 अक्षरों में काट दिया जाता है, परन्तु कुछ पासवर्ड लंबाई के साथ एक बाइट पूर्णांक रैपआवर्तन समस्या होती है, जिसके परिणामस्वरूप दुर्बल हैश होता है।[18]
  • $2x$ – के बाद एक ध्वज जोड़ा गया crypt_blowfish बग खोज। पुराने हैश का नाम बदलकर किया जा सकता है $2x$ यह इंगित करने के लिए कि वे टूटे हुए एल्गोरिदम के साथ उत्पन्न हुए थे। ये हैश अभी भी दुर्बल हैं, परन्तु कम से कम यह स्पष्ट है कि उन्हें उत्पन्न करने के लिए किस एल्गोरिदम का उपयोग किया गया था।
  • $2y$ – में एक झंडा crypt_blowfish स्पष्ट रूप से नए, सत्य एल्गोरिदम का उपयोग करने के लिए। बग से पीड़ित पुराने कार्यान्वयन पर, $2y$ बस कार्य नहीं करेगा। एक नए, निश्चित कार्यान्वयन पर, यह उपयोग करने के समान परिणाम देगा $2b$.

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

कीइंग के आवर्तन की संख्या दो की शक्ति है, जो एल्गोरिदम का एक इनपुट है। संख्या टेक्स्ट हैश में विकोडित है, उदा। $2y$10...


एनटी हैश पद्धति

MS-CHAP के माध्यम से NT खातों के साथ आसान संगतता प्रदान करने के लिए FreeBSD ने NTLM हैश एल्गोरिदम के लिए समर्थन लागू किया।[19] एनटी-हैश एल्गोरिदम दुर्बल होने के लिए जाना जाता है, क्योंकि यह बिना किसी साल्ट के बहिष्कृत एमडी 4 हैश एल्गोरिदम का उपयोग करता है।[20] फ्रीबीएसडी ने इस्तेमाल किया $3$ इसके लिए प्रीफिक्स। इसके उपयोग की अनुशंसा नहीं की जाती है, क्योंकि यह आसानी से टूट जाता है।[1]


एसएचए2-आधारित पद्धति

सामान्यतः इस्तेमाल की जाने वाली एमडी5 आधारित पद्धति पर हमला करना आसान हो गया है क्योंकि कंप्यूटर की शक्ति बढ़ गई है। यद्यपि ब्लोफिश-आधारित प्रणाली में आवर्तन जोड़ने का विकल्प होता है और इस प्रकार यह एक चुनौतीपूर्ण पासवर्ड एल्गोरिदम बना रहता है, यह राष्ट्रीय मानक और प्रौद्योगिकी-अनुमोदित एल्गोरिदम का उपयोग नहीं करता है। इन तथ्यों के आलोक में, Red Hat के Ulrich Drepper ने एसएचए-2 (एसएचए-256 और एसएचए-512) हैश फ़ंक्शंस पर आधारित एक पद्धति बनाने का प्रयास किया।[21] इन हैश का मुद्रण करने योग्य रूप से प्रारम्भ होता है $5$ (एसएचए-256 के लिए) या $6$ (एसएचए-512 के लिए) जिसके आधार पर एसएचए संस्करण का उपयोग किया जाता है। इसका डिज़ाइन एमडी5-आधारित क्रिप्ट के समान है, कुछ उल्लेखनीय अंतरों के साथ:[21]

  • यह कुछ ही चरणों में लगातार डेटा जोड़ने से बचता है।
  • एमडी5 एल्गोरिद्म बार-बार पासवर्ड का पहला अक्षर जोड़ देगा;[citation needed] इस कदम को काफी बदल दिया गया था।
  • सन माइक्रोप्रणाली्स से प्रेरित | सन का क्रिप्ट () कार्यान्वयन, पुनरावृत्तियों की संख्या निर्दिष्ट करने के लिए कार्यक्षमता (आवर्तन) एल्गोरिदम प्रदर्शन में मुख्य लूप जोड़ा गया था[22][23]
  • पुनरावृत्तियों की संख्या डिफ़ॉल्ट रूप से 5000 है, न्यूनतम 1000 और अधिकतम 999,999,999।[24]

विनिर्देश और नमूना कोड सार्वजनिक डोमेन में जारी किए गए हैं; इसे प्रायः एसएचएcrypt के रूप में संदर्भित किया जाता है।[24]


अन्य हैश

$y$
यसक्रिप्ट, एसक्रिप्ट का एक विस्तार है ($7$) और एक पीएचसी फाइनलिस्ट। इसका उपयोग वर्तमाना पद्धतिओं के विकल्प के रूप में कई लिनक्स वितरणों में किया जाता है।[25] इस हैश का उपयोग करने के लिए, libcrypt को glibc से libxcrypt प्रोजेक्ट से पिछड़े-संगत से बदल दिया गया है।[26]
$argon2d$, $argon2i$, $argon2ds$
ये Argon2 एल्गोरिदम के लिए पीएचसी द्वारा निर्दिष्ट नाम हैं, परन्तु व्यापक रूप से उपयोग किए जाने वाले प्रतीत नहीं होते हैं।

अतिरिक्त प्रारूप, यदि कोई हो, कार्यान्वयन के मैन पृष्ठ में वर्णित हैं।[27]


पुरातन यूनिक्स पद्धतिएं

BigCrypt, HP-UX, Digital Unix, और OSF/1 पर प्रयुक्त डीईएस-Crypt का संशोधित संस्करण है। इसके और डीईएस के बीच मुख्य अंतर यह है कि BigCrypt एक पासवर्ड के सभी वर्णों का उपयोग करता है, न कि मात्र पहले 8 का, और इसकी एक चर लंबाई हैश है।[28] Crypt16 डीईएस का साधारण संशोधन है, जो 16 अक्षरों तक के पासवर्ड की अनुमति देता है। अल्ट्रिक्स और ट्रू64 पर इस्तेमाल किया गया।[29]


ऑपरेटिंग प्रणाली में सहायता

पद्धति आईडी Scheme Linux (glibc) FreeBSD NetBSD OpenBSD सोलारिस MacOS
डीईएस Yes[30] Yes Yes Yes Yes Yes
_ बीएसडीआई Yes[30] Yes Yes Yes No Yes
1 एमडी5 Yes[30] Yes Yes Yes Yes No
2, 2a, 2b, 2x, 2y बीक्रिप्ट Yes[30] Yes Yes Yes Yes No
3 एनटीहैश Yes[30] Yes No No No No
5 एसएचए-256 2.7+[30] 8.3+ No No Yes No
6 एसएचए-512 2.7+[30] 8.3+ No No Yes No
7 एसक्रिप्ट Yes[30] Yes No No Yes No
एमडी5 सोलारिस एमडी5 Yes[30] No No No Yes No
एसएचए1 पीबीकेडीएफ1 के साथ एसएचए1 Yes[30] No Yes No No No
gy गोस्त-यसक्रिप्ट Yes[30] No No No No No
y यसक्रिप्ट Yes[30] No No No No No


लिनक्स

लगभग सभी लिनक्स वितरणों द्वारा उपयोग की जाने वाली जीएनयू सी लाइब्रेरी क्रिप्ट प्रकार्य का कार्यान्वयन प्रदान करती है जो डीईएस, एमडी5 और (संस्करण 2.7 के बाद से) एसएचए-2 आधारित हैशिंग एल्गोरिदम का समर्थन करती है। glibc अनुरक्षक, Ulrich Drepper ने बीक्रिप्ट (स्कीम 2) समर्थन को अस्वीकार कर दिया क्योंकि यह राष्ट्रीय मानक और प्रौद्योगिकी संस्थान द्वारा अनुमोदित नहीं है।[31] बिना बीक्रिप्ट वाले प्रणाली के लिए एक सार्वजनिक डोमेन crypt_blowfish लाइब्रेरी उपलब्ध है। इसे एसयूएसई लिनक्स में ग्लिबैक में एकीकृत किया गया है।[32] इसके अतिरिक्त, उपर्युक्त libxcrypt का उपयोग यसक्रिप्ट-सक्षम प्रणाली पर glibc crypt() को बदलने के लिए किया जाता है।

musl C लाइब्रेरी स्कीम 1, 2, 5 और 6 के साथ-साथ परंपरा डीईएस स्कीम का समर्थन करती है। पारंपरिक डीईएस कोड बीएसडी फ्रीसेक पर आधारित है, जिसमें ग्लिबक यूएफसी-क्रिप्ट के साथ संगत होने के लिए संशोधन किया गया है।[33]


मैकोज़

डार्विन के मूल निवासी crypt() सीमित कार्यक्षमता प्रदान करता है, मात्र डीईएस और बीएसडीआई का समर्थन करता है। OS X अपने स्वयं के पासवर्ड हैश के लिए कुछ प्रणाली का उपयोग करता है, जो पुराने NeXTStep netinfo से लेकर नई डायरेक्टरी सर्विसेज (ds) प्रणाली तक है।[34][35]


यह भी देखें

संदर्भ

  1. 1.0 1.1 crypt(3) – FreeBSD Library Functions Manual
  2. Simson Garfinkel, Alan Schwartz, Gene Spafford. "Practical Unix & Internet Security". 2003. section "4.3.2.3 crypt16( ), DES Extended, and Modular Crypt Format". "The Modular Crypt Format (MCF) specifies an extensible scheme for formatting encrypted passwords. MCF is one of the most popular formats for encrypted passwords"
  3. 3.0 3.1 3.2 3.3 "Modular Crypt Format — Passlib v1.7.1 Documentation". Pythonhosted.org. Retrieved 2 December 2018.
  4. "ademarre/binary-mcf". GitHub.com. Retrieved 2 December 2018.
  5. "क्रिप्ट - perldoc.perl.org". Perldoc.perl.org. Retrieved 2 December 2018.
  6. "PHP: crypt - Manual". Us.php.net. Retrieved 2 December 2018.
  7. "तहखाना ()". Archived from the original on 2012-10-02. Retrieved 2013-02-09.
  8. "crypt — Function to check Unix passwords — Python 3.7.1 documentation". Docs.python.org. Retrieved 2 December 2018.
  9. "Class: String (Ruby 2.5.3)". Ruby-doc.org. Retrieved 2 December 2018.
  10. Password Hash Competition. "पीएचसी स्ट्रिंग प्रारूप". Github.
  11. "crypt – password encoding". UNIX Third Edition Programmers' Manual. 1973-01-15.
  12. 12.0 12.1 Morris, Robert; Thompson, Ken (1978-04-03). "Password Security: A Case History". Bell Laboratories. Retrieved 2013-12-17.
  13. "crypt, setkey, encrypt – DES encryption". UNIX Seventh Edition Programmers' Manual. 1979.
  14. "Md5crypt Password scrambler is no longer considered safe by author — PHKs Bikeshed". Phk.freebsd.dk. Archived from the original on 17 March 2018. Retrieved 2 December 2018.
  15. Provos, Niels; Mazières, David (1999). "एक भविष्य-अनुकूलनीय पासवर्ड योजना". Proceedings of 1999 USENIX Annual Technical Conference: 81–92.
  16. Designer, Solar (2011-06-21). "crypt_blowfish 1.1; Owl glibc security update". See also CVE-2011-2483.
  17. "src/lib/libc/crypt/bcrypt.c – view – 1.27". Cvsweb.openbsd.org. Retrieved 2016-05-14.
  18. Designer, Solar (2012-01-02). "OpenBSD bcrypt 8-bit key_len wraparound".
  19. "NT MD4 password hash as new password encryption method for FreeBSD". Mail-archive.com. Retrieved 2 December 2018.
  20. "एनटीएलएम प्रमाणीकरण प्रोटोकॉल और सुरक्षा सहायता प्रदाता". Davenport.sourceforge.net. Retrieved 2 December 2018.
  21. 21.0 21.1 Drepper, Ulrich (19 September 2007). "Unix crypt with SHA-256/512". Retrieved 21 November 2018.
  22. Sun Microsystems. "crypt_sunmd5(5) man page". Archived from the original on 2008-04-16. Retrieved 2008-03-05.
  23. Muffett, Alec (2005-12-05). "OpenSolaris, Pluggable Crypt, and the SunMD5 Password Hash Algorithm". Retrieved 2012-08-11.
  24. 24.0 24.1 Drepper, Ulrich. "Unix crypt using SHA-256 and SHA-512".
  25. "FESCo Says "Yes" To Fedora 35 Using Yescrypt For Hashing Shadow Passwords - Phoronix". www.phoronix.com.
  26. "Changes/yescrypt as default hashing method for shadow - Fedora Project Wiki". libxcrypt: Is already capable for computing yescrypt hashes since v4.3.
  27. "passlib.hash.bigcrypt - BigCrypt — Passlib v1.7.1 Documentation". Pythonhosted.org. Retrieved 2 December 2018.
  28. "passlib.hash.crypt16 - Crypt16 — Passlib v1.7.1 Documentation". Pythonhosted.org. Retrieved 2 December 2018.
  29. 30.00 30.01 30.02 30.03 30.04 30.05 30.06 30.07 30.08 30.09 30.10 30.11 "Debian manpage crypt". manpages.debian.org. Retrieved 11 Jan 2022.
  30. "bcrypt support for passwords in /etc/shadow - Red Hat Customer Portal". Access.redhat.com. Retrieved 2 December 2018.
  31. "आपके सॉफ़्टवेयर और आपके सर्वर के लिए bcrypt पासवर्ड हैशिंग ("पासवर्ड एन्क्रिप्शन")". www.openwall.com.
  32. "crypt_r.c\crypt\src - musl - musl - an implementation of the standard library for Linux-based systems". git.musl-libc.org.
  33. "कैसे मैक ओएस एक्स पासवर्ड प्रमाणीकरण लागू करता है". Dribin.org. Retrieved 2 December 2018.
  34. "मैक ओएस एक्स पासवर्ड कैसे क्रैक करें - ऑनलाइन हैश क्रैक". Onlinehashcrack.com. Retrieved 2 December 2018.


बाहरी संबंध