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

From Vigyanwiki
m (Deepak moved page तहखाना (सी) to क्रिप्ट (सी) without leaving a redirect)
No edit summary
Line 1: Line 1:
{{short description|Key derivation function ("password hash")}}
{{short description|Key derivation function ("password hash")}}
{{about|the Unix C library function|the Unix utility|Crypt (Unix)}}
{{about|यूनिक्स सी लाइब्रेरी प्रकार्य|यूनिक्स उपयोगिता|क्रिप्ट (यूनिक्स)}}
{{DISPLAYTITLE:crypt (C)}}
{{DISPLAYTITLE:crypt (C)}}
क्रिप्ट एक C POSIX लाइब्रेरी फंक्शन है। यह आमतौर पर उपयोगकर्ता खाता पासवर्ड के [[क्रिप्टोग्राफ़िक हैश फ़ंक्शन]] की गणना करने के लिए उपयोग किया जाता है। फ़ंक्शन एक टेक्स्ट स्ट्रिंग को आउटपुट करता है जो [[नमक (क्रिप्टोग्राफी)]] को भी [[कोड]] करता है (आमतौर पर पहले दो वर्ण स्वयं नमक होते हैं और शेष हैशेड परिणाम होता है), और उपयोग किए गए हैश एल्गोरिदम की पहचान करता है (पारंपरिक रूप से नीचे समझाया गया है)। यह आउटपुट स्ट्रिंग एक पासवर्ड रिकॉर्ड बनाता है, जो आमतौर पर टेक्स्ट फ़ाइल में संग्रहीत होता है।


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


== यूनिक्स क्रिप्ट यूटिलिटी से संबंध ==
== यूनिक्स क्रिप्ट यूटिलिटी से संबंध ==
यूनिक्स में एक असंबंधित [[क्रिप्ट (यूनिक्स)]] उपयोगिता है, जिसे अक्सर सी लाइब्रेरी फ़ंक्शन के साथ भ्रमित किया जाता है। दोनों के बीच अंतर करने के लिए, लेखक अक्सर यूटिलिटी प्रोग्राम को 'क्रिप्ट (1)' के रूप में संदर्भित करते हैं, क्योंकि यह यूनिक्स [[मैनुअल पेज (यूनिक्स)]] के खंड 1 में प्रलेखित है, और सी लाइब्रेरी फ़ंक्शन को 'क्रिप्ट' के रूप में संदर्भित करता है। (3) '', क्योंकि इसका प्रलेखन मैनुअल सेक्शन 3 में है।<ref name=fbsd3/>
यूनिक्स में एक असंबंधित [[क्रिप्ट (यूनिक्स)]] उपयोगिता है, जिसे अक्सर सी लाइब्रेरी प्रकार्य के साथ भ्रमित किया जाता है। दोनों के बीच अंतर करने के लिए, लेखक अक्सर यूटिलिटी प्रोग्राम को 'क्रिप्ट (1)' के रूप में संदर्भित करते हैं, क्योंकि यह यूनिक्स [[मैनुअल पेज (यूनिक्स)]] के खंड 1 में प्रलेखित है, और सी लाइब्रेरी प्रकार्य को 'क्रिप्ट' के रूप में संदर्भित करता है। (3) '', क्योंकि इसका प्रलेखन मैनुअल सेक्शन 3 में है।<ref name=fbsd3/>




== विवरण ==
== विवरण ==
यह एक ही क्रिप्ट फ़ंक्शन का उपयोग भंडारण के लिए एक नया हैश उत्पन्न करने के लिए और तुलना के लिए रिकॉर्ड किए गए नमक (क्रिप्टोग्राफी) के साथ एक प्रस्तावित पासवर्ड को हैश करने के लिए भी किया जाता है।<!-- TODO: example in pseudocode or Perl -->
यह एक ही क्रिप्ट प्रकार्य का उपयोग भंडारण के लिए एक नया हैश उत्पन्न करने के लिए और तुलना के लिए रिकॉर्ड किए गए नमक (क्रिप्टोग्राफी) के साथ एक प्रस्तावित पासवर्ड को हैश करने के लिए भी किया जाता है।<!-- TODO: example in pseudocode or Perl -->
क्रिप्ट लाइब्रेरी रूटीन के आधुनिक यूनिक्स कार्यान्वयन विभिन्न प्रकार की हैश योजनाओं का समर्थन करते हैं। मॉड्यूलर क्रिप्ट प्रारूप नामक वास्तविक मानक के बाद, परिणामस्वरूप हैशटेक्स्ट में उपयोग किए जाने वाले विशेष हैश एल्गोरिदम को एक अद्वितीय कोड उपसर्ग द्वारा पहचाना जा सकता है।<ref>
क्रिप्ट लाइब्रेरी रूटीन के आधुनिक यूनिक्स कार्यान्वयन विभिन्न प्रकार की हैश योजनाओं का समर्थन करते हैं। मॉड्यूलर क्रिप्ट प्रारूप नामक वास्तविक मानक के बाद, परिणामस्वरूप हैशटेक्स्ट में उपयोग किए जाने वाले विशेष हैश एल्गोरिदम को एक अद्वितीय कोड उपसर्ग द्वारा पहचाना जा सकता है।<ref>
Simson Garfinkel, Alan Schwartz, Gene Spafford.
Simson Garfinkel, Alan Schwartz, Gene Spafford.
Line 20: Line 21:
</ref><ref name=":0">{{cite web|url=http://pythonhosted.org/passlib/modular_crypt_format.html|title=Modular Crypt Format — Passlib v1.7.1 Documentation|website=Pythonhosted.org|access-date=2 December 2018}}</ref><ref>{{cite web|url=https://github.com/ademarre/binary-mcf|title=ademarre/binary-mcf|website=GitHub.com|access-date=2 December 2018}}</ref>
</ref><ref name=":0">{{cite web|url=http://pythonhosted.org/passlib/modular_crypt_format.html|title=Modular Crypt Format — Passlib v1.7.1 Documentation|website=Pythonhosted.org|access-date=2 December 2018}}</ref><ref>{{cite web|url=https://github.com/ademarre/binary-mcf|title=ademarre/binary-mcf|website=GitHub.com|access-date=2 December 2018}}</ref>


  <code>crypt()</code> ई> लाइब्रेरी फ़ंक्शन भी [[पर्ल]] में शामिल है,<ref>{{cite web|url=http://perldoc.perl.org/functions/crypt.html|title=क्रिप्ट - perldoc.perl.org|website=Perldoc.perl.org|access-date=2 December 2018}}</ref> [[पीएचपी]],<ref>{{cite web|url=http://us.php.net/manual/en/function.crypt.php|title=PHP: crypt - Manual|website=Us.php.net|access-date=2 December 2018}}</ref> पाईक (प्रोग्रामिंग भाषा),<ref>{{cite web |url=http://pike.ida.liu.se/generated/manual/modref/ex/predef_3A_3A/crypt.html |title=तहखाना ()|access-date=2013-02-09 |archive-url=https://web.archive.org/web/20121002215125/http://pike.ida.liu.se/generated/manual/modref/ex/predef_3A_3A/crypt.html |archive-date=2012-10-02 }}</ref> [[पायथन (प्रोग्रामिंग भाषा)]]<ref>{{cite web|url=https://docs.python.org/library/crypt.html|title=crypt — Function to check Unix passwords — Python 3.7.1 documentation|website=Docs.python.org|access-date=2 December 2018}}</ref> (हालांकि अब इसे 3.11 के रूप में हटा दिया गया है), और [[रूबी (प्रोग्रामिंग भाषा)]]<ref>{{cite web|url=http://ruby-doc.org/core/classes/String.html#M001174|title=Class: String (Ruby 2.5.3)|website=Ruby-doc.org|access-date=2 December 2018}}</ref> प्रोग्रामिंग भाषा।
  <code>crypt()</code> ई> लाइब्रेरी प्रकार्य भी [[पर्ल]] में शामिल है,<ref>{{cite web|url=http://perldoc.perl.org/functions/crypt.html|title=क्रिप्ट - perldoc.perl.org|website=Perldoc.perl.org|access-date=2 December 2018}}</ref> [[पीएचपी]],<ref>{{cite web|url=http://us.php.net/manual/en/function.crypt.php|title=PHP: crypt - Manual|website=Us.php.net|access-date=2 December 2018}}</ref> पाईक (प्रोग्रामिंग भाषा),<ref>{{cite web |url=http://pike.ida.liu.se/generated/manual/modref/ex/predef_3A_3A/crypt.html |title=तहखाना ()|access-date=2013-02-09 |archive-url=https://web.archive.org/web/20121002215125/http://pike.ida.liu.se/generated/manual/modref/ex/predef_3A_3A/crypt.html |archive-date=2012-10-02 }}</ref> [[पायथन (प्रोग्रामिंग भाषा)]]<ref>{{cite web|url=https://docs.python.org/library/crypt.html|title=crypt — Function to check Unix passwords — Python 3.7.1 documentation|website=Docs.python.org|access-date=2 December 2018}}</ref> (हालांकि अब इसे 3.11 के रूप में हटा दिया गया है), और [[रूबी (प्रोग्रामिंग भाषा)]]<ref>{{cite web|url=http://ruby-doc.org/core/classes/String.html#M001174|title=Class: String (Ruby 2.5.3)|website=Ruby-doc.org|access-date=2 December 2018}}</ref> प्रोग्रामिंग भाषा।


== क्रिप्ट == द्वारा समर्थित कुंजी व्युत्पत्ति कार्य
== क्रिप्ट == द्वारा समर्थित कुंजी व्युत्पत्ति कार्य
Line 100: Line 101:


=== एक कुंजी === के रूप में पासवर्ड का उपयोग करके मूल कार्यान्वयन
=== एक कुंजी === के रूप में पासवर्ड का उपयोग करके मूल कार्यान्वयन
क्रिप्ट() लाइब्रेरी फ़ंक्शन का मूल कार्यान्वयन<ref name="passwd">{{cite web  | url=https://www.bell-labs.com/usr/dmr/www/passwd.ps | title=Password Security: A Case History. | work=Bell Laboratories |author1=Morris, Robert |author2=Thompson, Ken | date=1978-04-03 | access-date=2013-12-17 }}</ref> तीसरे संस्करण यूनिक्स में<ref>{{cite web | url=http://minnie.tuhs.org/cgi-bin/utree.pl?file=V3/man/man3/crypt.3 | title=crypt – password encoding | work=UNIX Third Edition Programmers' Manual | date = 1973-01-15 }}</ref> [[M-209]] सिफर मशीन की नकल की। एक कुंजी के साथ [[पासवर्ड]] को एन्क्रिप्ट करने के बजाय, जो पासवर्ड को एन्क्रिप्टेड मान और कुंजी से पुनर्प्राप्त करने की अनुमति देता, उसने पासवर्ड को एक कुंजी के रूप में उपयोग किया, और पासवर्ड डेटाबेस में इस कुंजी के साथ पासवर्ड को एन्क्रिप्ट करने का परिणाम था।
क्रिप्ट() लाइब्रेरी प्रकार्य का मूल कार्यान्वयन<ref name="passwd">{{cite web  | url=https://www.bell-labs.com/usr/dmr/www/passwd.ps | title=Password Security: A Case History. | work=Bell Laboratories |author1=Morris, Robert |author2=Thompson, Ken | date=1978-04-03 | access-date=2013-12-17 }}</ref> तीसरे संस्करण यूनिक्स में<ref>{{cite web | url=http://minnie.tuhs.org/cgi-bin/utree.pl?file=V3/man/man3/crypt.3 | title=crypt – password encoding | work=UNIX Third Edition Programmers' Manual | date = 1973-01-15 }}</ref> [[M-209]] सिफर मशीन की नकल की। एक कुंजी के साथ [[पासवर्ड]] को एन्क्रिप्ट करने के बजाय, जो पासवर्ड को एन्क्रिप्टेड मान और कुंजी से पुनर्प्राप्त करने की अनुमति देता, उसने पासवर्ड को एक कुंजी के रूप में उपयोग किया, और पासवर्ड डेटाबेस में इस कुंजी के साथ पासवर्ड को एन्क्रिप्ट करने का परिणाम था।


=== पारंपरिक डीईएस-आधारित योजना ===
=== पारंपरिक डीईएस-आधारित योजना ===
Line 112: Line 113:


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


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


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


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


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


निश्चित पुनरावृति गणना के कारण इस योजना ने कम्प्यूटेशनल व्यय को खो दिया है जो एक बार आनंद लिया था और अब चक्रों की परिवर्तनीय संख्या का समर्थन किया जाता है। जून 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 161: Line 162:


=== SHA2-आधारित योजना ===
=== SHA2-आधारित योजना ===
आमतौर पर इस्तेमाल की जाने वाली MD5 आधारित योजना पर हमला करना आसान हो गया है क्योंकि कंप्यूटर की शक्ति बढ़ गई है। हालांकि ब्लोफिश-आधारित प्रणाली में राउंड जोड़ने का विकल्प होता है और इस प्रकार यह एक चुनौतीपूर्ण पासवर्ड एल्गोरिदम बना रहता है, यह राष्ट्रीय मानक और प्रौद्योगिकी-अनुमोदित एल्गोरिदम का उपयोग नहीं करता है। इन तथ्यों के आलोक में, [[Red Hat]] के [[Ulrich Drepper]] ने SHA-2 (SHA-256 और SHA-512) हैश फ़ंक्शंस पर आधारित एक योजना बनाने का प्रयास किया।<ref name="shacrypt">{{cite web  
सामान्यतः इस्तेमाल की जाने वाली MD5 आधारित योजना पर हमला करना आसान हो गया है क्योंकि कंप्यूटर की शक्ति बढ़ गई है। हालांकि ब्लोफिश-आधारित प्रणाली में राउंड जोड़ने का विकल्प होता है और इस प्रकार यह एक चुनौतीपूर्ण पासवर्ड एल्गोरिदम बना रहता है, यह राष्ट्रीय मानक और प्रौद्योगिकी-अनुमोदित एल्गोरिदम का उपयोग नहीं करता है। इन तथ्यों के आलोक में, [[Red Hat]] के [[Ulrich Drepper]] ने SHA-2 (SHA-256 और SHA-512) हैश फ़ंक्शंस पर आधारित एक योजना बनाने का प्रयास किया।<ref name="shacrypt">{{cite web  
| first = Ulrich  
| first = Ulrich  
| last = Drepper  
| last = Drepper  
Line 318: Line 319:


=== लिनक्स ===
=== लिनक्स ===
लगभग सभी लिनक्स वितरणों द्वारा उपयोग की जाने वाली [[जीएनयू सी लाइब्रेरी]] क्रिप्ट फ़ंक्शन का कार्यान्वयन प्रदान करती है जो डीईएस, एमडी5 और (संस्करण 2.7 के बाद से) एसएचए-2 आधारित हैशिंग एल्गोरिदम का समर्थन करती है।
लगभग सभी लिनक्स वितरणों द्वारा उपयोग की जाने वाली [[जीएनयू सी लाइब्रेरी]] क्रिप्ट प्रकार्य का कार्यान्वयन प्रदान करती है जो डीईएस, एमडी5 और (संस्करण 2.7 के बाद से) एसएचए-2 आधारित हैशिंग एल्गोरिदम का समर्थन करती है।
glibc अनुरक्षक, Ulrich Drepper ने bcrypt (स्कीम 2) समर्थन को अस्वीकार कर दिया क्योंकि यह राष्ट्रीय मानक और प्रौद्योगिकी संस्थान द्वारा अनुमोदित नहीं है।<ref>{{cite web|url=https://access.redhat.com/articles/1519843|title=bcrypt support for passwords in /etc/shadow - Red Hat Customer Portal|website=Access.redhat.com|access-date=2 December 2018}}</ref> बिना bcrypt वाले सिस्टम के लिए एक सार्वजनिक डोमेन crypt_blowfish लाइब्रेरी उपलब्ध है। इसे [[एसयूएसई लिनक्स]] में ग्लिबैक में एकीकृत किया गया है।<ref>{{cite web |title=आपके सॉफ़्टवेयर और आपके सर्वर के लिए bcrypt पासवर्ड हैशिंग ("पासवर्ड एन्क्रिप्शन")|url=https://www.openwall.com/crypt/ |website=www.openwall.com}}</ref> इसके अलावा, उपर्युक्त libxcrypt का उपयोग Yescrypt-सक्षम सिस्टम पर glibc crypt() को बदलने के लिए किया जाता है।
glibc अनुरक्षक, Ulrich Drepper ने bcrypt (स्कीम 2) समर्थन को अस्वीकार कर दिया क्योंकि यह राष्ट्रीय मानक और प्रौद्योगिकी संस्थान द्वारा अनुमोदित नहीं है।<ref>{{cite web|url=https://access.redhat.com/articles/1519843|title=bcrypt support for passwords in /etc/shadow - Red Hat Customer Portal|website=Access.redhat.com|access-date=2 December 2018}}</ref> बिना bcrypt वाले सिस्टम के लिए एक सार्वजनिक डोमेन crypt_blowfish लाइब्रेरी उपलब्ध है। इसे [[एसयूएसई लिनक्स]] में ग्लिबैक में एकीकृत किया गया है।<ref>{{cite web |title=आपके सॉफ़्टवेयर और आपके सर्वर के लिए bcrypt पासवर्ड हैशिंग ("पासवर्ड एन्क्रिप्शन")|url=https://www.openwall.com/crypt/ |website=www.openwall.com}}</ref> इसके अलावा, उपर्युक्त libxcrypt का उपयोग Yescrypt-सक्षम सिस्टम पर glibc crypt() को बदलने के लिए किया जाता है।



Revision as of 23:04, 20 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: हैशिंग एल्गोरिथ्म का प्रतिनिधित्व करने वाला एक पहचानकर्ता (जैसे कि MD5 के लिए 1, SHA-2|SHA-256 आदि के लिए 5)
  • param नाम और उसका value: हैश जटिलता पैरामीटर, जैसे राउंड/पुनरावृत्तियों की संख्या
  • salt: मूलांक-64 एन्कोडेड नमक (क्रिप्टोग्राफी)
  • hash: पासवर्ड और नमक को हैश करने का मूलांक -64 एन्कोडेड परिणाम

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

Scheme id Schema Example
DES Kyq4bCxAXJkbg
_ BSDi _EQ0.jzhSVeUyoSqLupI
1 MD5 $1$etNnh7FA$OlM7eljE/B7F1J4XYNnk81
2, 2a, 2b, 2x, 2y bcrypt $2a$10$VIhIOofSMqgdGlL4wzE//e.77dAQGqntF/1dT7bqCrVtquInWy2qi
3 NTHASH $3$$8846f7eaee8fb117ad06bdd830b7586c
5 SHA-256 $5$9ks3nNEqv31FX.F$gdEoLFsCRsn/WRN3wxUnzfeZLoooVlzeF4WjLomTRFD
6 SHA-512 $6$qoE2letU$wWPRl.PVczjzeMVgjiA8LLy2nOyZbf7Amj3qLIL978o18gbMySdKZ7uepq9tmMQXxyTIrS12Pln.2Q/6Xscao0
7 scrypt $7$DU..../....2Q9obwLhin8qvQl6sisAO/$sHayJj/JBdcuD4lJ1AxiwCo9e5XSi8TcINcmyID12i8
8 (Cisco) PBKDF2 with SHA256 $8$mTj4RZG8N9ZDOk$elY/asfm8kD3iDmkBe3hD2r4xcA/0oWS5V3os.O91u.
8 (JunOS) PBKDF2 $8$crypt-algo$hash-algo$iterations$salt$iv$tag$encrypted

$8$aes256-gcm$hmac-sha2-256$100$y/4YMC4YDLU$fzYDI4jjN6YCyQsYLsaf8A$Ilu4jLcZarD9YnyD /Hejww$okhBlc0cGakSqYxKww

gy gost-yescrypt $gy$jCT$HM87v.7RwpQLba8fDjNSk1$VgqS7k2OZWhFbAJVBye2vaA7ex/1VtU3a5fmL8Wv/26
md5 Solaris MD5 $md5,rounds=5000$GUBv0xjJ$$mSwgIswdjlTY0YxV7HBVm0
sha1 PBKDF1 with SHA-1 $sha1$40000$jtNX3nZ2$hBNaIXkt4wBI2o5rsi8KejSjNqIq
y yescrypt $y$j9T$F5Jx5fExrKuPp53xLKQ..1$X3DX6M94c7o.9agCG9G317fhZg9SqC.5i5rd.RhAtQ7

PHC सबसेट में अधिकांश MCF हैश शामिल हैं। कई अतिरिक्त एप्लिकेशन-परिभाषित विधियां मौजूद हैं।[3]


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

पारंपरिक डीईएस-आधारित योजना

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

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

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

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

पारंपरिक योजना की कमजोरियां

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

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

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

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

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

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

MD5-आधारित योजना

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

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

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

निश्चित पुनरावृति गणना के कारण इस योजना ने कम्प्यूटेशनल व्यय को खो दिया है जो एक बार आनंद लिया था और अब चक्रों की परिवर्तनीय संख्या का समर्थन किया जाता है। जून 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]


SHA2-आधारित योजना

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

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

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


अन्य हैश

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

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


पुरातन यूनिक्स योजनाएं

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


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

Scheme id Scheme Linux (glibc) FreeBSD NetBSD OpenBSD Solaris MacOS
DES Yes[30] Yes Yes Yes Yes Yes
_ BSDi Yes[30] Yes Yes Yes No Yes
1 MD5 Yes[30] Yes Yes Yes Yes No
2, 2a, 2b, 2x, 2y bcrypt Yes[30] Yes Yes Yes Yes No
3 NTHASH Yes[30] Yes No No No No
5 SHA-256 2.7+[30] 8.3+ No No Yes No
6 SHA-512 2.7+[30] 8.3+ No No Yes No
7 scrypt Yes[30] Yes No No Yes No
md5 Solaris MD5 Yes[30] No No No Yes No
sha1 PBKDF1 with SHA1 Yes[30] No Yes No No No
gy gost-yescrypt Yes[30] No No No No No
y yescrypt Yes[30] No No No No No


लिनक्स

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

musl C लाइब्रेरी स्कीम 1, 2, 5 और 6 के साथ-साथ परंपरा DES स्कीम का समर्थन करती है। पारंपरिक डीईएस कोड बीएसडी फ्रीसेक पर आधारित है, जिसमें ग्लिबक यूएफसी-क्रिप्ट के साथ संगत होने के लिए संशोधन किया गया है।[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. 11.0 11.1 Morris, Robert; Thompson, Ken (1978-04-03). "Password Security: A Case History". Bell Laboratories. Retrieved 2013-12-17.
  12. "crypt – password encoding". UNIX Third Edition Programmers' Manual. 1973-01-15.
  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.


बाहरी संबंध