स्क्रीप्ट

From Vigyanwiki

क्रिप्टोग्राफी में, स्क्रीप्ट (उच्चारण "एस्स क्रिप्ट"[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.

बाहरी संबंध