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

From Vigyanwiki
No edit summary
Line 31: Line 31:


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


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


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


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


इस संकेतन का उपयोग RFC 7914 द्वारा PBKDF2 के c = 1 के उपयोग को निर्दिष्ट करने के लिए किया जाता है।
इस संकेतन का उपयोग RFC 7914 द्वारा पीबीकेडीएफ2 के c = 1 के उपयोग को निर्दिष्ट करने के लिए किया जाता है।
  'फंक्शन' रोमिक्स (ब्लॉक, इटरेशन)
  '''Function''' ROMix(Block, Iterations)
   
   
     <अवधि शैली = रंग: हरा; > 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}}आर्गन2 - 2015 में पासवर्ड हैशिंग प्रतियोगिता का विजेता
* [[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>
* बीक्रिप्ट - 2002 में विकसित ब्लोफिश-आधारित क्रॉस-प्लेटफ़ॉर्म फ़ाइल एन्क्रिप्शन उपयोगिता[11][12][13][14]
* [[ तहखाना (सी) ]] - यूनिक्स सी लाइब्रेरी फ़ंक्शन
* क्रिप्ट - यूनिक्स सी लाइब्रेरी फ़ंक्शन
* [[[[ ccrypt ]] (यूनिक्स)]] - यूनिक्स उपयोगिता
* क्रिप्ट - यूनिक्स उपयोगिता
* सीक्रिप्ट - उपयोगिता
* की डेरिवेटिव फंक्शन
* की स्ट्रेचिंग
* मैक्रिप्ट - उपयोगिता
* पीबीकेडीएफ2 - एक व्यापक रूप से इस्तेमाल किया जाने वाला मानक पासवर्ड-आधारित पासवर्ड-आधारित डेरिवेटिव फंक्शन 2
* पफरफिश - बेहतर बीक्रिप्ट डिजाइन पर आधारित एक कैश-हार्ड पासवर्ड हैशिंग फंक्शन
* स्पेस-टाइम ट्रेडऑफ़
*
 
* [[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>
* [[ तहखाना (सी) |क्रिप्ट]] - यूनिक्स सी लाइब्रेरी फ़ंक्शन
* सीक्रिप्ट - उपयोगिता
* सीक्रिप्ट - उपयोगिता
* कुंजी व्युत्पत्ति समारोह
* कुंजी व्युत्पत्ति समारोह
Line 126: Line 140:
* PBKDF2 - एक व्यापक रूप से इस्तेमाल किया जाने वाला मानक पासवर्ड-आधारित कुंजी व्युत्पत्ति फ़ंक्शन 2
* PBKDF2 - एक व्यापक रूप से इस्तेमाल किया जाने वाला मानक पासवर्ड-आधारित कुंजी व्युत्पत्ति फ़ंक्शन 2
* [https://github.com/epixoip/pufferfish PufferFish] - एक कैश-हार्ड पासवर्ड हैशिंग फ़ंक्शन जो बेहतर bcrypt डिज़ाइन पर आधारित है
* [https://github.com/epixoip/pufferfish PufferFish] - एक कैश-हार्ड पासवर्ड हैशिंग फ़ंक्शन जो बेहतर bcrypt डिज़ाइन पर आधारित है
* स्पेस-टाइम ट्रेडऑफ़


== संदर्भ ==
== संदर्भ ==

Revision as of 09:38, 30 May 2023

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

scrypt
General
DesignersColin Percival
First published2009
Cipher detail
Digest sizesvariable
Block sizesvariable
Roundsvariable

परिचय

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

पिछले पासवर्ड-आधारित केडीएफ (जैसे कि आरएसए प्रयोगशालाओं से लोकप्रिय पीबीकेडीएफ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
  • पफरफिश - बेहतर बीक्रिप्ट डिजाइन पर आधारित एक कैश-हार्ड पासवर्ड हैशिंग फंक्शन
  • स्पेस-टाइम ट्रेडऑफ़
  • आर्गन2 - 2015 में पासवर्ड हैशिंग प्रतियोगिता का विजेता
  • बीक्रिप्ट - ब्लोफिश-आधारित पासवर्ड-हैशिंग फ़ंक्शन
  • बीक्रिप्ट - ब्लोफिश-आधारित क्रॉस-प्लेटफ़ॉर्म फ़ाइल एन्क्रिप्शन उपयोगिता 2002 में विकसित हुई[11][12][13][14]
  • क्रिप्ट - यूनिक्स सी लाइब्रेरी फ़ंक्शन
  • सीक्रिप्ट - उपयोगिता
  • कुंजी व्युत्पत्ति समारोह
  • चाबी खींचना
  • mcrypt - उपयोगिता
  • PBKDF2 - एक व्यापक रूप से इस्तेमाल किया जाने वाला मानक पासवर्ड-आधारित कुंजी व्युत्पत्ति फ़ंक्शन 2
  • PufferFish - एक कैश-हार्ड पासवर्ड हैशिंग फ़ंक्शन जो बेहतर bcrypt डिज़ाइन पर आधारित है

संदर्भ

  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.
  11. http://bcrypt.sourceforge.net bcrypt file encryption program homepage
  12. "bcrypt APK for Android – free download on Droid Informer". droidinformer.org.
  13. "T2 package – trunk – bcrypt – A utility to encrypt files". t2sde.org.
  14. "Oracle GoldenGateのライセンス". docs.oracle.com.


बाहरी संबंध