स्क्रीप्ट: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{short description|Password-based key derivation function created in 2009}}
{{short description|Password-based key derivation function created in 2009}}
{{distinguish|स्क्रिप्ट (बहुविकल्पी)}}
{{distinguish|स्क्रिप्ट (बहुविकल्पी)}}
[[क्रिप्टोग्राफी]] में, '''स्क्रीप्ट''' (उच्चारण "एस्स क्रिप्ट"<ref>{{cite web|title=कॉलिन पर्सिवल|website=Twitter|url=https://twitter.com/cperciva/status/734613598383841281 |archive-url=https://web.archive.org/web/20190217215034/https://twitter.com/cperciva/status/734613598383841281 |archive-date=17 February 2019 |url-status=live}}</ref>) [[कॉलिन पर्सिवल]] द्वारा मार्च 2009 में बनाया गया एक पासवर्ड-आधारित कुंजी व्युत्पत्ति कार्य है, जो मूल रूप से टार्सनैप ऑनलाइन बैकअप सेवा के लिए है।<ref name="tarsnap">{{cite web|title=स्क्रीप्ट कुंजी व्युत्पत्ति समारोह|website=Tarsnap |url=http://www.tarsnap.com/scrypt.html|access-date=21 January 2014}}</ref><ref name="manpages">{{cite web|title=स्क्रिप्ट (1) जनरल कमांड मैनुअल|website=Debian Manpages |url=https://manpages.debian.org/testing/scrypt/scrypt.1.en.html |access-date=2 March 2022}}</ref> एल्गोरिथ्म को विशेष रूप से बड़ी मात्रा में मेमोरी की आवश्यकता के कारण बड़े पैमाने पर कस्टम हार्डवेयर हमलों को महंगा बनाने के लिए डिज़ाइन किया गया था। 2016 में, आईईटीएफ द्वारा स्क्रीप्ट एल्गोरिदम को आरएफसी 7914 के रूप में प्रकाशित किया गया था।<ref>{{cite web |last1=Percival |first1=Colin |last2=Josefsson |first2=Simon |title=स्क्रीप्ट पासवर्ड आधारित कुंजी व्युत्पत्ति फंक्शन|url=https://datatracker.ietf.org/doc/html/rfc7914 |publisher=RFC Editor |access-date=13 December 2021 |ref=RFC 7914}}</ref> स्क्रीप्ट के एक सरलीकृत संस्करण का उपयोग कई क्रिप्टोकरंसीज द्वारा प्रूफ-ऑफ-वर्क स्कीम के रूप में किया जाता है, जिसे पहले टेनेब्रिक्स में आर्टफ़ोर्ज नामक एक गुमनाम प्रोग्रामर द्वारा लागू किया गया था और उसके तुरंत बाद फेयरब्रिक्स और लिटकॉइन द्वारा लागू किया गया था।<ref>{{cite web|url=https://motherboard.vice.com/en_us/article/4x3ywn/beyond-bitcoin-a-guide-to-the-most-promising-cryptocurrencies|title=Beyond Bitcoin: A Guide to the Most Promising Cryptocurrencies|author=Alec Liu}}</ref>
[[क्रिप्टोग्राफी]] में, '''स्क्रीप्ट''' (उच्चारण "एस्स क्रिप्ट"<ref>{{cite web|title=कॉलिन पर्सिवल|website=Twitter|url=https://twitter.com/cperciva/status/734613598383841281 |archive-url=https://web.archive.org/web/20190217215034/https://twitter.com/cperciva/status/734613598383841281 |archive-date=17 February 2019 |url-status=live}}</ref>) [[कॉलिन पर्सिवल]] द्वारा मार्च 2009 में बनाया गया पासवर्ड-आधारित कुंजी व्युत्पत्ति कार्य है, जो मूल रूप से टार्सनैप ऑनलाइन बैकअप सेवा के लिए है।<ref name="tarsnap">{{cite web|title=स्क्रीप्ट कुंजी व्युत्पत्ति समारोह|website=Tarsnap |url=http://www.tarsnap.com/scrypt.html|access-date=21 January 2014}}</ref><ref name="manpages">{{cite web|title=स्क्रिप्ट (1) जनरल कमांड मैनुअल|website=Debian Manpages |url=https://manpages.debian.org/testing/scrypt/scrypt.1.en.html |access-date=2 March 2022}}</ref> एल्गोरिथ्म को विशेष रूप से बड़ी मात्रा में मेमोरी की आवश्यकता के कारण बड़े पैमाने पर कस्टम हार्डवेयर हमलों को महंगा बनाने के लिए डिज़ाइन किया गया था। 2016 में, आईईटीएफ द्वारा स्क्रीप्ट एल्गोरिदम को आरएफसी 7914 के रूप में प्रकाशित किया गया था।<ref>{{cite web |last1=Percival |first1=Colin |last2=Josefsson |first2=Simon |title=स्क्रीप्ट पासवर्ड आधारित कुंजी व्युत्पत्ति फंक्शन|url=https://datatracker.ietf.org/doc/html/rfc7914 |publisher=RFC Editor |access-date=13 December 2021 |ref=RFC 7914}}</ref> स्क्रीप्ट के एक सरलीकृत संस्करण का उपयोग कई क्रिप्टोकरंसीज द्वारा प्रूफ-ऑफ-वर्क स्कीम के रूप में किया जाता है, जिसे पहले टेनेब्रिक्स में आर्टफ़ोर्ज नामक एक गुमनाम प्रोग्रामर द्वारा लागू किया गया था और उसके तुरंत बाद फेयरब्रिक्स और लिटकॉइन द्वारा लागू किया गया था।<ref>{{cite web|url=https://motherboard.vice.com/en_us/article/4x3ywn/beyond-bitcoin-a-guide-to-the-most-promising-cryptocurrencies|title=Beyond Bitcoin: A Guide to the Most Promising Cryptocurrencies|author=Alec Liu}}</ref>
{{Infobox cryptographic hash function
{{Infobox cryptographic hash function
| name = scrypt
| name = स्क्रीप्ट
| image =
| image =
| caption =
| caption =
<!-- General -->
<!-- General -->
| designers = [[Colin Percival]]
| designers = [[कॉलिन पर्सिवल]]
| publish date = 2009
| publish date = 2009
| series =
| series =
Line 16: Line 15:
| certification =
| certification =
<!-- Detail -->
<!-- Detail -->
| digest size = variable
| digest size = चर
| block size = variable
| block size = चर
| structure =
| structure =
| rounds = variable
| rounds = चर
| cryptanalysis =
| cryptanalysis =
}}
}}
== परिचय ==
== परिचय ==


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


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


एल्गोरिथम की संसाधन मांगों को बढ़ाकर ऐसे प्रयासों में बाधा डालने के लिए स्क्रीप्ट फ़ंक्शन को डिज़ाइन किया गया है। विशेष रूप से, एल्गोरिदम को अन्य पासवर्ड-आधारित केडीएफ की तुलना में बड़ी मात्रा में मेमोरी का उपयोग करने के लिए डिज़ाइन किया गया है,<ref>{{Cite web |url=http://www.tarsnap.com/scrypt/scrypt.pdf |title=अनुक्रमिक मेमोरी-हार्ड फ़ंक्शंस के माध्यम से मजबूत कुंजी व्युत्पत्ति|access-date=2022-11-11 |last=Percival |first=Colin}}</ref> एक हार्डवेयर कार्यान्वयन के आकार और लागत को और अधिक महंगा बनाना, और इसलिए वित्तीय संसाधनों की दी गई राशि के लिए एक हमलावर द्वारा उपयोग की जा सकने वाली समानता को सीमित करना है।
एल्गोरिथम की संसाधन मांगों को बढ़ाकर ऐसे प्रयासों में बाधा डालने के लिए स्क्रीप्ट फ़ंक्शन को डिज़ाइन किया गया है। विशेष रूप से, एल्गोरिदम को अन्य पासवर्ड-आधारित केडीएफ की तुलना में बड़ी मात्रा में मेमोरी का उपयोग करने के लिए डिज़ाइन किया गया है,<ref>{{Cite web |url=http://www.tarsnap.com/scrypt/scrypt.pdf |title=अनुक्रमिक मेमोरी-हार्ड फ़ंक्शंस के माध्यम से मजबूत कुंजी व्युत्पत्ति|access-date=2022-11-11 |last=Percival |first=Colin}}</ref> एक हार्डवेयर कार्यान्वयन के आकार और लागत को और अधिक महंगा बनाना, और इसलिए वित्तीय संसाधनों की दी गई राशि के लिए हमलावर द्वारा उपयोग की जा सकने वाली समानता को सीमित करना है।


== सिंहावलोकन ==
== सिंहावलोकन ==
स्क्रीप्ट की बड़ी मेमोरी आवश्यकताएं छद्म यादृच्छिक बिट स्ट्रिंग्स के एक बड़े वेक्टर से आती हैं जो एल्गोरिथम के भाग के रूप में उत्पन्न होती हैं। एक बार वेक्टर उत्पन्न हो जाने के बाद, इसके तत्वों को छद्म-यादृच्छिक क्रम में एक्सेस किया जाता है और व्युत्पन्न कुंजी उत्पन्न करने के लिए संयुक्त किया जाता है। एक सीधे कार्यान्वयन के लिए पूरे वेक्टर को रैम में रखने की आवश्यकता होगी ताकि इसे आवश्यकतानुसार एक्सेस किया जा सके।
स्क्रीप्ट की बड़ी मेमोरी आवश्यकताएं एल्गोरिदम के हिस्से के रूप में उत्पन्न छद्म यादृच्छिक बिट स्ट्रिंग्स के बड़े वेक्टर से आती हैं। एक बार वेक्टर उत्पन्न हो जाने के बाद, इसके तत्वों को छद्म-यादृच्छिक क्रम में एक्सेस किया जाता है और व्युत्पन्न कुंजी उत्पन्न करने के लिए संयुक्त किया जाता है। एक सीधे कार्यान्वयन के लिए पूरे वेक्टर को रैम में रखने की आवश्यकता होगी ताकि आवश्यकतानुसार इसे एक्सेस किया जा सके।
 
क्योंकि वेक्टर के तत्व एल्गोरिथम से उत्पन्न होते हैं, प्रत्येक तत्व को आवश्यकतानुसार मक्खी पर उत्पन्न किया जा सकता है, मेमोरी में एक समय में केवल एक तत्व को स्टोर किया जा सकता है और इसलिए मेमोरी आवश्यकताओं को काफी कम किया जा सकता है। हालांकि, प्रत्येक तत्व की पीढ़ी का उद्देश्य कम्प्यूटेशनल रूप से महंगा होना है, और फ़ंक्शन के निष्पादन के दौरान तत्वों को कई बार एक्सेस किए जाने की उम्मीद है। इस प्रकार बड़ी मेमोरी आवश्यकताओं से छुटकारा पाने के लिए गति में एक महत्वपूर्ण व्यापार-बंद है।
 
इस प्रकार का टाइम-मेमोरी ट्रेड-ऑफ प्रायः कंप्यूटर एल्गोरिदम में मौजूद होता है: अधिक मेमोरी का उपयोग करने की कीमत पर गति को बढ़ाया जा सकता है, या अधिक ऑपरेशन करने और अधिक समय लेने की लागत पर मेमोरी की आवश्यकताओं को कम किया जा सकता है। स्क्रीप्ट के पीछे का विचार जानबूझ कर किसी भी दिशा में इस व्यापार-बंद को महंगा बनाना है। इस प्रकार हमलावर एक कार्यान्वयन का उपयोग कर सकता है जिसके लिए कई संसाधनों की आवश्यकता नहीं होती है (और इसलिए सीमित खर्च के साथ बड़े पैमाने पर समानांतर हो सकता है) लेकिन बहुत धीमी गति से चलता है, या एक ऐसे कार्यान्वयन का उपयोग करता है जो अधिक तेज़ी से चलता है लेकिन इसमें बहुत अधिक मेमोरी की आवश्यकता होती है और इसलिए, समानांतर करने के लिए अधिक महंगा है।
== एल्गोरिथम ==
<syntaxhighlight lang="cl">
Function scrypt
  Inputs: This algorithm includes the following parameters:
      Passphrase:                Bytes    string of characters to be hashed
      Salt:                      Bytes    string of random characters that modifies the hash to protect against Rainbow table attacks
      CostFactor (N):            Integer  CPU/memory cost parameter – Must be a power of 2 (e.g. 1024)
      BlockSizeFactor (r):      Integer  blocksize parameter, which fine-tunes sequential memory read size and performance. (8 is commonly used)
      ParallelizationFactor (p): Integer  Parallelization parameter. (1 .. 232-1 * hLen/MFlen)
      DesiredKeyLen (dkLen):    Integer  Desired key length in bytes (Intended output length in octets of the derived key; a positive integer satisfying dkLen ≤ (232− 1) * hLen.)
      hLen:                      Integer  The length in octets of the hash function (32 for SHA256).
      MFlen:                    Integer  The length in octets of the output of the mixing function (SMix below). Defined as r * 128 in RFC7914.
  Output:
      DerivedKey:                Bytes    array of bytes, DesiredKeyLen long


क्योंकि वेक्टर के तत्व एल्गोरिथम से उत्पन्न होते हैं, प्रत्येक तत्व को आवश्यकतानुसार मक्खी पर उत्पन्न किया जा सकता है, एक समय में केवल एक तत्व को स्मृति में संग्रहित किया जाता है और इसलिए स्मृति आवश्यकताओं में काफी कमी आती है। हालांकि, प्रत्येक तत्व की पीढ़ी कम्प्यूटेशनल रूप से महंगी होने का इरादा है, और फ़ंक्शन के निष्पादन के दौरान तत्वों को कई बार एक्सेस करने की उम्मीद है। इस प्रकार बड़ी मेमोरी आवश्यकताओं से छुटकारा पाने के लिए गति में एक महत्वपूर्ण समझौता है।
  Step 1. Generate expensive salt
  blockSize ← 128*BlockSizeFactor  // Length (in bytes) of the SMix mixing function output (e.g. 128*8 = 1024 bytes)


इस प्रकार का स्पेस-टाइम ट्रेडऑफ़|टाइम-मेमोरी ट्रेड-ऑफ़ अक्सर कंप्यूटर एल्गोरिदम में मौजूद होता है: अधिक मेमोरी का उपयोग करने की कीमत पर गति बढ़ाई जा सकती है, या अधिक संचालन करने और अधिक समय लेने की लागत पर मेमोरी आवश्यकताओं को कम किया जा सकता है। स्क्रीप्ट के पीछे का विचार जानबूझकर इस व्यापार-बंद को किसी भी दिशा में महंगा बनाना है। इस प्रकार एक हमलावर एक कार्यान्वयन का उपयोग कर सकता है जिसके लिए कई संसाधनों की आवश्यकता नहीं होती है (और इसलिए सीमित व्यय के साथ बड़े पैमाने पर समानांतर हो सकता है) लेकिन बहुत धीमी गति से चलता है, या एक ऐसे कार्यान्वयन का उपयोग करता है जो अधिक तेज़ी से चलता है लेकिन बहुत बड़ी मेमोरी आवश्यकताएं होती हैं और इसलिए अधिक महंगी होती हैं समानांतर।
  Use PBKDF2 to generate initial 128*BlockSizeFactor*p bytes of data (e.g. 128*8*3 = 3072 bytes)
  Treat the result as an array of p elements, each entry being blocksize bytes (e.g. 3 elements, each 1024 bytes)
  [B0...Bp−1] ← PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor)


== एल्गोरिथम ==
  Mix each block in B Costfactor times using ROMix function (each block can be mixed in parallel)
  for i ← 0 to p-1 do
      Bi ← ROMix(Bi, CostFactor)


<अवधि शैली = रंग: नीला; >फंक्शन स्क्रीप्ट
  All the elements of B is our new "expensive" salt
    <अवधि शैली = रंग: नीला; > इनपुट्स: <span style= color:green; >''इस एल्गोरिदम में निम्नलिखित पैरामीटर शामिल हैं:''</span>
  expensiveSalt ← B0∥B1∥B2∥ ... ∥Bp-1  // where ∥ is concatenation
      पासफ़्रेज़: बाइट्स <अवधि शैली = रंग: हरा; > हैश किए जाने वाले वर्णों की स्ट्रिंग
      [[नमक (क्रिप्टोग्राफी)]]: बाइट्स <अवधि शैली = रंग: हरा; >रैंडम वर्णों की स्ट्रिंग जो [[ इंद्रधनुष तालिका ]] हमलों से बचाने के लिए हैश को संशोधित करती है
      कॉस्टफैक्टर (एन): पूर्णांक <अवधि शैली = रंग: हरा; >सीपीयू/मेमोरी लागत पैरामीटर - 2 की शक्ति होनी चाहिए (उदा. 1024)
      BlockSizeFactor (आर): पूर्णांक <अवधि शैली = रंग: हरा; >ब्लॉकसाइज पैरामीटर, जो अनुक्रमिक मेमोरी रीड साइज और परफॉर्मेंस को फाइन-ट्यून करता है। (8 आमतौर पर प्रयोग किया जाता है)
      समांतरता कारक (पी): पूर्णांक <अवधि शैली = रंग: हरा; >''समानांतरीकरण पैरामीटर''। (1.2<sup>32</sup>-1 * hLen/MFlen)
      वांछित केलेन (डीकेलेन): पूर्णांक <अवधि शैली = रंग: हरा; > बाइट्स में वांछित कुंजी लंबाई (व्युत्पन्न कुंजी के ऑक्टेट में इच्छित आउटपुट लंबाई; एक सकारात्मक पूर्णांक संतोषजनक dkLen ≤ (2)<sup>32</sup>− 1) * hLen.)
      hLen: पूर्णांक <अवधि शैली = रंग: हरा; >हैश फ़ंक्शन के ऑक्टेट में लंबाई (SHA256 के लिए 32).
      MFlen: पूर्णांक <अवधि शैली = रंग: हरा; > मिक्सिंग फंक्शन के आउटपुट के ऑक्टेट में लंबाई (नीचे SMix)। RFC7914 में r * 128 के रूप में परिभाषित।
    <अवधि शैली = रंग: नीला; >'आउटपुट:'
      DerivedKey: बाइट्स <अवधि शैली = रंग: हरा; > बाइट्स की सरणी, DesiredKeyLen long
    <अवधि शैली = रंग: हरा; >चरण 1. महंगा नमक उत्पन्न करें
    ब्लॉकसाइज़ ← 128*ब्लॉकसाइज़फ़ैक्टर <स्पैन स्टाइल= रंग:हरा; >// SMix मिक्सिंग फ़ंक्शन आउटपुट की लंबाई (बाइट्स में) (उदा. 128*8 = 1024 बाइट्स)
   
    <अवधि शैली = रंग: हरा; > प्रारंभिक 128*BlockSizeFactor*p बाइट डेटा उत्पन्न करने के लिए PBKDF2 का उपयोग करें (जैसे 128*8*3 = 3072 बाइट्स)
    <अवधि शैली = रंग: हरा; >परिणाम को p तत्वों की एक सरणी के रूप में मानें, प्रत्येक प्रविष्टि बाइट्स को अवरुद्ध कर रही है (उदाहरण के लिए 3 तत्व, प्रत्येक 1024 बाइट्स)
    [बी<sub>0</sub>...बी<sub>p−1</sub>] → पीबीकेडीएफ2<sub>HMAC-SHA256</sub>(पासफ़्रेज़, नमक, 1, ब्लॉक आकार*समानता फ़ैक्टर)
   
   
    <अवधि शैली = रंग: हरा; > 'रोमिक्स' फ़ंक्शन का उपयोग करके प्रत्येक ब्लॉक को 'बी' कॉस्टफैक्टर समय में मिलाएं (प्रत्येक ब्लॉक को समानांतर में मिश्रित किया जा सकता है)
  Step 2. Use PBKDF2 to generate the desired number of bytes, but using the expensive salt we just generated
    <अवधि शैली = रंग: नीला; >'for' i ← 0 <span style= color:blue; >'to'</span> p-1 <span style= color:blue; >'करें'</span>
  return PBKDF2HMAC-SHA256(Passphrase, expensiveSalt, 1, DesiredKeyLen);
      बी<sub>i</sub> ← रोमिक्स (बी<sub>i</sub>, लागत कारक)
</syntaxhighlight>जहाँ PBKDF2(P, S, c, dkLen) अंकन को RFC 2898 में परिभाषित किया गया है, जहाँ c एक पुनरावृति संख्या है।
    <अवधि शैली = रंग: हरा; >बी के सभी तत्व हमारा नया महंगा नमक है
    महंगा नमक ← बी<sub>0</sub>∥B<sub>1</sub>∥B<sub>2</sub>∥ ... ∥B<sub>p-1</sub> <अवधि शैली = रंग: हरा; >// जहां ∥ संयोजन है
 
    <अवधि शैली = रंग: हरा; >चरण 2. बाइट्स की वांछित संख्या उत्पन्न करने के लिए PBKDF2 का उपयोग करें, लेकिन महंगे नमक का उपयोग करके हमने अभी उत्पन्न किया
    <अवधि शैली = रंग: नीला; >'वापसी' PBKDF2<sub>HMAC-SHA256</sub>(पासफ़्रेज़, महंगा साल्ट, 1, डेसर्डकेलेन);


जहाँ PBKDF2(P, S, c, dkLen) अंकन को RFC 2898 में परिभाषित किया गया है, जहाँ c एक पुनरावृति संख्या है।
इस संकेतन का उपयोग RFC 7914 द्वारा पीबीकेडीएफ2 के c = 1 के उपयोग को निर्दिष्ट करने के लिए किया जाता है।
 
  '''Function''' ROMix(Block, Iterations)
इस संकेतन का उपयोग RFC 7914 द्वारा PBKDF2 के c = 1 के उपयोग को निर्दिष्ट करने के लिए किया जाता है।
  'फंक्शन' रोमिक्स (ब्लॉक, इटरेशन)
   
   
     <अवधि शैली = रंग: हरा; > X की पुनरावृति प्रतियाँ बनाएँ
     Create ''Iterations'' copies of ''X''
     एक्स ब्लॉक
     X Block
     'के लिए' i ← 0 'से' पुनरावृत्तियों-1 'करो'
     '''for''' i ← 0 '''to''' Iterations−1 '''do'''
       वी<sub>i</sub> ← एक्स
       V<sub>i</sub> ← X
       एक्स ब्लॉकमिक्स(एक्स)
       X BlockMix(X)
   
   
     for i ← 0 to Iterations−1 do
     '''for''' i ← 0 '''to''' Iterations−1 '''do'''
       जे इंटीग्रिफ़ाई (एक्स) मॉड इटरेशन
       j Integerify(X) mod Iterations
       एक्स ब्लॉकमिक्स (एक्स एक्स या वी<sub>j</sub>)
       X BlockMix(X '''xor''' V<sub>j</sub>)
   
   
     वापसी एक्स
     '''return''' X


जहाँ RFC 7914 परिभाषित करता है {{code|Integerify(X)}} एक्स के अंतिम 64 बाइट्स को छोटे-अंत पूर्णांक ए के रूप में व्याख्या करने के परिणामस्वरूप<sub>1</sub>.
जहाँ RFC 7914 परिभाषित करता है {{code|Integerify(X)}} X के अंतिम 64 बाइट्स को छोटे-अंत पूर्णांक A<sub>1</sub> के रूप में व्याख्या करने के परिणामस्वरूप.


चूँकि पुनरावृत्तियाँ N की शक्ति के 2 के बराबर होती हैं, X के अंतिम 64 बाइट्स में से केवल पहला सीलिंग (N / 8) बाइट्स, जिसे एक छोटे-अंत पूर्णांक A के रूप में व्याख्या किया गया है<sub>2</sub>, वास्तव में गणना करने के लिए आवश्यक हैं <code>Integerify(X) mod Iterations = A<sub>1</sub> mod Iterations = A<sub>2</sub> mod Iterations</code>.
चूँकि पुनरावृत्तियाँ N की पावर के 2 के बराबर होती हैं, X के अंतिम 64 बाइट्स में से केवल पहला सीलिंग (N / 8) बाइट्स, जिसे एक छोटे-अंत पूर्णांक A<sub>2</sub> के रूप में व्याख्या किया गया है, वास्तव में गणना करने के लिए आवश्यक हैं <code>Integerify(X) mod Iterations = A<sub>1</sub> mod Iterations = A<sub>2</sub> mod Iterations</code>.


  फंक्शन ब्लॉकमिक्स (बी):
  '''Function''' BlockMix(B):
   
   
     <अवधि शैली = रंग: हरा; >''ब्लॉक बी r 128-बाइट चंक्स है (जो 2r 64-बाइट चंक्स के बराबर है)''</span>
     ''The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks)''
     आर लंबाई(बी) / 128;
     r Length(B) / 128;
   
   
     <अवधि शैली = रंग: हरा; >''B को 2r 64-बाइट चंक्स की एक सरणी के रूप में मानें''</span>
     ''Treat B as an array of 2r 64-byte chunks''
     [बी<sub>0</sub>...बी<sub>2r-1</sub>] ← बी
     [B<sub>0</sub>...B<sub>2r-1</sub>] ← B
   
   
     एक्स बी<sub>2r−1</sub>
     X B<sub>2r−1</sub>
i ← 0 से 2r−1 के लिए
    '''for''' i ← 0 '''to''' 2r−1 '''do'''
         एक्स सालसा20/8(एक्स एक्सोर बी<sub>i</sub>) <विस्तार शैली = रंग: हरा; >// सालसा20/8 हैश 64-बाइट्स से 64-बाइट्स तक
         X Salsa20/8(X xor B<sub>i</sub>) '''// Salsa20/8 hashes from 64-bytes to 64-bytes'''
         वाई<sub>i</sub> ← एक्स
         Y<sub>i</sub> ← X
   
   
     वापसी वाई<sub>0</sub>∥Y<sub>2</sub>∥...∥Y<sub>2r−2</sub> ∥ और<sub>1</sub>∥Y<sub>3</sub>∥...∥Y<sub>2r−1</sub>
     '''return''' Y<sub>0</sub>∥Y<sub>2</sub>∥...∥Y<sub>2r−2</sub> ∥ Y<sub>1</sub>∥Y<sub>3</sub>∥...∥Y<sub>2r−1</sub>
जहां साल्सा20/8 साल्सा20 का 8-राउंड संस्करण है।
जहां साल्सा 20/8 साल्सा 20 का 8-राउंड संस्करण है।
 
== क्रिप्टोकरंसी उपयोग ==
स्क्रीप्ट का उपयोग कई क्रिप्टोकरंसीज में प्रूफ-ऑफ-वर्क एल्गोरिथम के रूप में किया जाता है (अधिक सटीक रूप से, हैशकैश प्रूफ-ऑफ-वर्क एल्गोरिथम में हैश फ़ंक्शन)। यह पहली बार टेनेब्रिक्स (सितंबर 2011 में जारी) के लिए लागू किया गया था और लाइटकोइन और डॉगकोइन के आधार के रूप में कार्य किया, जिसने इसके स्क्रीप्ट एल्गोरिदम को भी अपनाया।<ref>{{cite book |url=https://books.google.com/books?id=IXmrBQAAQBAJ&pg=PA221 |title=Mastering Bitcoin: Unlocking Digital Cryptocurrencies |pages=221, 223 |author=Andreas M. Antonopoulos |date=3 December 2014 |publisher=O'Reilly Media |isbn=9781491902646 }}</ref><ref>{{cite web | url=https://litecoin.info/History_of_cryptocurrency | title=क्रिप्टोक्यूरेंसी का इतिहास| access-date=27 June 2014 | archive-url=https://web.archive.org/web/20160611133738/https://litecoin.info/History_of_cryptocurrency | archive-date=11 June 2016 | url-status=dead }}</ref> क्रिप्ट का उपयोग करने वाली [[क्रिप्टोकरेंसी]] का खनन प्रायः ग्राफिक्स प्रोसेसिंग यूनिट ([[जीपीयू]]) पर किया जाता है क्योंकि सीपीयू की तुलना में जीपीयू में काफी अधिक प्रोसेसिंग पावर (कुछ एल्गोरिदम के लिए) होती है।<ref>{{cite book|url=https://www.amazon.com/Litecoin-Scrypt-Mining-Configurations-Radeon-ebook/dp/B00E2RT1I4|title=Litecoin Scrypt Mining Configurations for Radeon 7950|author=Roman Guelfi-Gibbs|publisher=Amazon Digital Services}}</ref> इसके कारण नवंबर और दिसंबर 2013 के महीनों में इन मुद्राओं की बढ़ती कीमतों के कारण उच्च अंत जीपीयू की कमी हो गई।<ref>{{cite web|url=http://www.extremetech.com/computing/172381-massive-surge-in-litecoin-mining-leads-to-radeon-shortage|author=Joel Hruska|title=लिटकोइन खनन में भारी उछाल से ग्राफिक्स कार्ड की कमी हो जाती है|date=10 December 2013|publisher=ExtremeTech}}</ref>


== क्रिप्टोक्यूरेंसी == का उपयोग करता है
मई 2014 तक, विशेष एएसआईसी माइनिंग हार्डवेयर स्क्रिप्ट-आधारित क्रिप्टोकरेंसी के लिए उपलब्ध है।
स्क्रीप्ट का उपयोग कई क्रिप्टोकरंसीज में प्रूफ-ऑफ-वर्क एल्गोरिथम के रूप में किया जाता है (अधिक सटीक रूप से, [[ हशकाश ]] प्रूफ-ऑफ-वर्क एल्गोरिथम में हैश फ़ंक्शन के रूप में)। यह पहली बार टेनेब्रिक्स (सितंबर 2011 में जारी) के लिए लागू किया गया था और लिटकोइन और [[कुत्ता सिक्का]] के आधार के रूप में कार्य किया, जिसने इसके स्क्रीप्ट एल्गोरिथम को भी अपनाया।<ref>{{cite book |url=https://books.google.com/books?id=IXmrBQAAQBAJ&pg=PA221 |title=Mastering Bitcoin: Unlocking Digital Cryptocurrencies |pages=221, 223 |author=Andreas M. Antonopoulos |date=3 December 2014 |publisher=O'Reilly Media |isbn=9781491902646 }}</ref><ref>{{cite web | url=https://litecoin.info/History_of_cryptocurrency | title=क्रिप्टोक्यूरेंसी का इतिहास| access-date=27 June 2014 | archive-url=https://web.archive.org/web/20160611133738/https://litecoin.info/History_of_cryptocurrency | archive-date=11 June 2016 | url-status=dead }}</ref> क्रिप्ट का उपयोग करने वाली [[क्रिप्टोकरेंसी]] का खनन अक्सर ग्राफिक्स प्रोसेसिंग यूनिट ([[जीपीयू]]) पर किया जाता है क्योंकि सीपीयू की तुलना में जीपीयू में काफी अधिक प्रोसेसिंग पावर (कुछ एल्गोरिदम के लिए) होती है।<ref>{{cite book|url=https://www.amazon.com/Litecoin-Scrypt-Mining-Configurations-Radeon-ebook/dp/B00E2RT1I4|title=Litecoin Scrypt Mining Configurations for Radeon 7950|author=Roman Guelfi-Gibbs|publisher=Amazon Digital Services}}</ref> इससे नवंबर और दिसंबर 2013 के महीनों में इन मुद्राओं की बढ़ती कीमतों के कारण उच्च अंत जीपीयू की कमी हो गई।<ref>{{cite web|url=http://www.extremetech.com/computing/172381-massive-surge-in-litecoin-mining-leads-to-radeon-shortage|author=Joel Hruska|title=लिटकोइन खनन में भारी उछाल से ग्राफिक्स कार्ड की कमी हो जाती है|date=10 December 2013|publisher=ExtremeTech}}</ref>
मई 2014 तक, विशेष अनुप्रयोग-विशिष्ट एकीकृत सर्किट माइनिंग हार्डवेयर स्क्रीप्ट-आधारित क्रिप्टोकरेंसी के लिए उपलब्ध है।{{cn|date=May 2019}}


== उपयोगिता ==
== उपयोगिता ==
स्क्रीप्ट उपयोगिता मई 2009 में कॉलिन पर्सिवल द्वारा स्क्रीप्ट कुंजी व्युत्पत्ति समारोह के प्रदर्शन के रूप में लिखी गई थी।<ref name="tarsnap"/><ref name="manpages"/>यह अधिकांश [[Linux]] और [[BSD]] वितरणों में उपलब्ध है।
स्क्रीप्ट उपयोगिता मई 2009 में कॉलिन पर्सिवल द्वारा स्क्रीप्ट कुंजी व्युत्पत्ति समारोह के एक प्रदर्शन के रूप में लिखी गई थी।<ref name="tarsnap"/><ref name="manpages"/> यह अधिकांश लिनक्स और बीएसडी वितरण में उपलब्ध है।


== यह भी देखें ==
== यह भी देखें ==
{{Portal|Free and open-source software}}
 
* [[Argon2]] - 2015 में [[पासवर्ड हैशिंग प्रतियोगिता]] का विजेता
* {{Portal|Free and open-source software}}[[Argon2|आर्गन2]] - 2015 में पासवर्ड हैशिंग प्रतियोगिता का विजेता
* [[bcrypt]] - ब्लोफिश-आधारित पासवर्ड-हैशिंग फ़ंक्शन
* [[bcrypt|बीक्रिप्ट]] - ब्लोफिश-आधारित पासवर्ड-हैशिंग फंक्शन
* क्रिप्ट (सी) # ब्लोफिश-आधारित योजना - ब्लोफिश-आधारित क्रॉस-प्लेटफ़ॉर्म फ़ाइल एन्क्रिप्शन उपयोगिता 2002 में विकसित हुई<ref>http://bcrypt.sourceforge.net bcrypt file encryption program homepage</ref><ref>{{Cite web|url=https://droidinformer.org/tools/bcrypt/|title=bcrypt APK for Android – free download on Droid Informer|website=droidinformer.org}}</ref><ref>{{Cite web|url=http://t2sde.org/packages/bcrypt.html|title=T2 package – trunk – bcrypt – A utility to encrypt files.|website=t2sde.org}}</ref><ref>{{Cite web|url=https://docs.oracle.com/cd/E51849_01/gg-winux/OGGLC/ogglc_licenses.htm|title=Oracle GoldenGateのライセンス|website=docs.oracle.com}}</ref>
* [[bcrypt|बीक्रिप्ट]] - 2002 में विकसित ब्लोफिश-आधारित क्रॉस-प्लेटफ़ॉर्म फ़ाइल एन्क्रिप्शन उपयोगिता[11][12][13][14]
* [[ तहखाना (सी) ]] - यूनिक्स सी लाइब्रेरी फ़ंक्शन
* [[ तहखाना (सी) |क्रिप्ट]] - यूनिक्स सी लाइब्रेरी फ़ंक्शन
* [[[[ ccrypt ]] (यूनिक्स)]] - यूनिक्स उपयोगिता
* क्रिप्ट - यूनिक्स उपयोगिता
* सीक्रिप्ट - उपयोगिता
* सीक्रिप्ट - उपयोगिता
* कुंजी व्युत्पत्ति समारोह
* की डेरिवेटिव फंक्शन
* [[चाबी खींचना]]
* की स्ट्रेचिंग
* [[mcrypt]] - उपयोगिता
* मैक्रिप्ट - उपयोगिता
* PBKDF2 - एक व्यापक रूप से इस्तेमाल किया जाने वाला मानक पासवर्ड-आधारित कुंजी व्युत्पत्ति फ़ंक्शन 2
* पीबीकेडीएफ2 - एक व्यापक रूप से उपयोग किया जाने वाला मानक पासवर्ड-आधारित पासवर्ड-आधारित डेरिवेटिव फंक्शन 2
* [https://github.com/epixoip/pufferfish PufferFish] - एक कैश-हार्ड पासवर्ड हैशिंग फ़ंक्शन जो बेहतर bcrypt डिज़ाइन पर आधारित है
* पफरफिश - बेहतर बीक्रिप्ट डिजाइन पर आधारित एक कैश-हार्ड पासवर्ड हैशिंग फंक्शन
* स्पेस-टाइम ट्रेडऑफ़
* स्पेस-टाइम ट्रेडऑफ़
*


== संदर्भ ==
== संदर्भ ==
{{reflist}}
{{reflist}}
== बाहरी संबंध ==
== बाहरी संबंध ==
* [https://www.tarsnap.com/scrypt.html The scrypt page on the Tarsnap website.]
* [https://www.tarsnap.com/scrypt.html The scrypt page on the Tarsnap website.]
Line 140: Line 137:


{{Cryptocurrencies}}
{{Cryptocurrencies}}
[[Category: क्रिप्टोग्राफिक एल्गोरिदम]] [[Category: प्रमुख व्युत्पत्ति कार्य]] [[Category: स्यूडोकोड के उदाहरण वाले लेख]]


[[Category: Machine Translated Page]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:Collapse templates]]
[[Category:Created On 11/05/2023]]
[[Category:Created On 11/05/2023]]
[[Category:Cryptographic hash functions]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with empty portal template]]
[[Category:Pages with script errors]]
[[Category:Portal templates with redlinked portals]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia metatemplates]]
[[Category:क्रिप्टोग्राफिक एल्गोरिदम]]
[[Category:प्रमुख व्युत्पत्ति कार्य]]
[[Category:स्यूडोकोड के उदाहरण वाले लेख]]

Latest revision as of 18:33, 15 June 2023

क्रिप्टोग्राफी में, स्क्रीप्ट (उच्चारण "एस्स क्रिप्ट"[1]) कॉलिन पर्सिवल द्वारा मार्च 2009 में बनाया गया पासवर्ड-आधारित कुंजी व्युत्पत्ति कार्य है, जो मूल रूप से टार्सनैप ऑनलाइन बैकअप सेवा के लिए है।[2][3] एल्गोरिथ्म को विशेष रूप से बड़ी मात्रा में मेमोरी की आवश्यकता के कारण बड़े पैमाने पर कस्टम हार्डवेयर हमलों को महंगा बनाने के लिए डिज़ाइन किया गया था। 2016 में, आईईटीएफ द्वारा स्क्रीप्ट एल्गोरिदम को आरएफसी 7914 के रूप में प्रकाशित किया गया था।[4] स्क्रीप्ट के एक सरलीकृत संस्करण का उपयोग कई क्रिप्टोकरंसीज द्वारा प्रूफ-ऑफ-वर्क स्कीम के रूप में किया जाता है, जिसे पहले टेनेब्रिक्स में आर्टफ़ोर्ज नामक एक गुमनाम प्रोग्रामर द्वारा लागू किया गया था और उसके तुरंत बाद फेयरब्रिक्स और लिटकॉइन द्वारा लागू किया गया था।[5]

स्क्रीप्ट
General
Designersकॉलिन पर्सिवल
First published2009
Cipher detail
Digest sizesचर
Block sizesचर
Roundsचर

परिचय

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

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

एल्गोरिथम की संसाधन मांगों को बढ़ाकर ऐसे प्रयासों में बाधा डालने के लिए स्क्रीप्ट फ़ंक्शन को डिज़ाइन किया गया है। विशेष रूप से, एल्गोरिदम को अन्य पासवर्ड-आधारित केडीएफ की तुलना में बड़ी मात्रा में मेमोरी का उपयोग करने के लिए डिज़ाइन किया गया है,[6] एक हार्डवेयर कार्यान्वयन के आकार और लागत को और अधिक महंगा बनाना, और इसलिए वित्तीय संसाधनों की दी गई राशि के लिए हमलावर द्वारा उपयोग की जा सकने वाली समानता को सीमित करना है।

सिंहावलोकन

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

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

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

एल्गोरिथम

Function scrypt
   Inputs: This algorithm includes the following parameters:
      Passphrase:                Bytes    string of characters to be hashed
      Salt:                      Bytes    string of random characters that modifies the hash to protect against Rainbow table attacks
      CostFactor (N):            Integer  CPU/memory cost parameter  Must be a power of 2 (e.g. 1024)
      BlockSizeFactor (r):       Integer  blocksize parameter, which fine-tunes sequential memory read size and performance. (8 is commonly used)
      ParallelizationFactor (p): Integer  Parallelization parameter. (1 .. 232-1 * hLen/MFlen)
      DesiredKeyLen (dkLen):     Integer  Desired key length in bytes (Intended output length in octets of the derived key; a positive integer satisfying dkLen ≤ (232− 1) * hLen.)
      hLen:                      Integer  The length in octets of the hash function (32 for SHA256).
      MFlen:                     Integer  The length in octets of the output of the mixing function (SMix below). Defined as r * 128 in RFC7914.
   Output:
      DerivedKey:                Bytes    array of bytes, DesiredKeyLen long

   Step 1. Generate expensive salt
   blockSize  128*BlockSizeFactor  // Length (in bytes) of the SMix mixing function output (e.g. 128*8 = 1024 bytes)

   Use PBKDF2 to generate initial 128*BlockSizeFactor*p bytes of data (e.g. 128*8*3 = 3072 bytes)
   Treat the result as an array of p elements, each entry being blocksize bytes (e.g. 3 elements, each 1024 bytes)
   [B0...Bp1]  PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor)

   Mix each block in B Costfactor times using ROMix function (each block can be mixed in parallel)
   for i  0 to p-1 do
      Bi  ROMix(Bi, CostFactor)

   All the elements of B is our new "expensive" salt
   expensiveSalt  B0B1B2 ... Bp-1  // where  is concatenation
 
   Step 2. Use PBKDF2 to generate the desired number of bytes, but using the expensive salt we just generated
   return PBKDF2HMAC-SHA256(Passphrase, expensiveSalt, 1, DesiredKeyLen);

जहाँ PBKDF2(P, S, c, dkLen) अंकन को RFC 2898 में परिभाषित किया गया है, जहाँ c एक पुनरावृति संख्या है।

इस संकेतन का उपयोग RFC 7914 द्वारा पीबीकेडीएफ2 के c = 1 के उपयोग को निर्दिष्ट करने के लिए किया जाता है।

Function ROMix(Block, Iterations)

   Create Iterations copies of X
   X ← Block
   for i ← 0 to Iterations−1 do
      Vi ← X
      X ← BlockMix(X)

   for i ← 0 to Iterations−1 do
      j ← Integerify(X) mod Iterations 
      X ← BlockMix(X xor Vj)

   return X

जहाँ RFC 7914 परिभाषित करता है Integerify(X) X के अंतिम 64 बाइट्स को छोटे-अंत पूर्णांक A1 के रूप में व्याख्या करने के परिणामस्वरूप.

चूँकि पुनरावृत्तियाँ N की पावर के 2 के बराबर होती हैं, X के अंतिम 64 बाइट्स में से केवल पहला सीलिंग (N / 8) बाइट्स, जिसे एक छोटे-अंत पूर्णांक A2 के रूप में व्याख्या किया गया है, वास्तव में गणना करने के लिए आवश्यक हैं Integerify(X) mod Iterations = A1 mod Iterations = A2 mod Iterations.

Function BlockMix(B):

    The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks)
    r ← Length(B) / 128;

    Treat B as an array of 2r 64-byte chunks
    [B0...B2r-1] ← B

    X ← B2r−1
    for i ← 0 to 2r−1 do
        X ← Salsa20/8(X xor Bi)  // Salsa20/8 hashes from 64-bytes to 64-bytes
        Yi ← X

    return ← Y0∥Y2∥...∥Y2r−2 ∥ Y1∥Y3∥...∥Y2r−1

जहां साल्सा 20/8 साल्सा 20 का 8-राउंड संस्करण है।

क्रिप्टोकरंसी उपयोग

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

मई 2014 तक, विशेष एएसआईसी माइनिंग हार्डवेयर स्क्रिप्ट-आधारित क्रिप्टोकरेंसी के लिए उपलब्ध है।

उपयोगिता

स्क्रीप्ट उपयोगिता मई 2009 में कॉलिन पर्सिवल द्वारा स्क्रीप्ट कुंजी व्युत्पत्ति समारोह के एक प्रदर्शन के रूप में लिखी गई थी।[2][3] यह अधिकांश लिनक्स और बीएसडी वितरण में उपलब्ध है।

यह भी देखें

  • आर्गन2 - 2015 में पासवर्ड हैशिंग प्रतियोगिता का विजेता
  • बीक्रिप्ट - ब्लोफिश-आधारित पासवर्ड-हैशिंग फंक्शन
  • बीक्रिप्ट - 2002 में विकसित ब्लोफिश-आधारित क्रॉस-प्लेटफ़ॉर्म फ़ाइल एन्क्रिप्शन उपयोगिता[11][12][13][14]
  • क्रिप्ट - यूनिक्स सी लाइब्रेरी फ़ंक्शन
  • क्रिप्ट - यूनिक्स उपयोगिता
  • सीक्रिप्ट - उपयोगिता
  • की डेरिवेटिव फंक्शन
  • की स्ट्रेचिंग
  • मैक्रिप्ट - उपयोगिता
  • पीबीकेडीएफ2 - एक व्यापक रूप से उपयोग किया जाने वाला मानक पासवर्ड-आधारित पासवर्ड-आधारित डेरिवेटिव फंक्शन 2
  • पफरफिश - बेहतर बीक्रिप्ट डिजाइन पर आधारित एक कैश-हार्ड पासवर्ड हैशिंग फंक्शन
  • स्पेस-टाइम ट्रेडऑफ़

संदर्भ

  1. "कॉलिन पर्सिवल". Twitter. Archived from the original on 17 February 2019.
  2. 2.0 2.1 "स्क्रीप्ट कुंजी व्युत्पत्ति समारोह". Tarsnap. Retrieved 21 January 2014.
  3. 3.0 3.1 "स्क्रिप्ट (1) जनरल कमांड मैनुअल". Debian Manpages. Retrieved 2 March 2022.
  4. Percival, Colin; Josefsson, Simon. "स्क्रीप्ट पासवर्ड आधारित कुंजी व्युत्पत्ति फंक्शन". RFC Editor. Retrieved 13 December 2021.
  5. Alec Liu. "Beyond Bitcoin: A Guide to the Most Promising Cryptocurrencies".
  6. Percival, Colin. "अनुक्रमिक मेमोरी-हार्ड फ़ंक्शंस के माध्यम से मजबूत कुंजी व्युत्पत्ति" (PDF). Retrieved 2022-11-11.
  7. Andreas M. Antonopoulos (3 December 2014). Mastering Bitcoin: Unlocking Digital Cryptocurrencies. O'Reilly Media. pp. 221, 223. ISBN 9781491902646.
  8. "क्रिप्टोक्यूरेंसी का इतिहास". Archived from the original on 11 June 2016. Retrieved 27 June 2014.
  9. Roman Guelfi-Gibbs. Litecoin Scrypt Mining Configurations for Radeon 7950. Amazon Digital Services.
  10. Joel Hruska (10 December 2013). "लिटकोइन खनन में भारी उछाल से ग्राफिक्स कार्ड की कमी हो जाती है". ExtremeTech.

बाहरी संबंध