स्क्रीप्ट: Difference between revisions
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>{{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 = | | name = स्क्रीप्ट | ||
| image = | | image = | ||
| caption = | | caption = | ||
<!-- General --> | <!-- General --> | ||
| designers = [[ | | designers = [[कॉलिन पर्सिवल]] | ||
| publish date = 2009 | | publish date = 2009 | ||
| series = | | series = | ||
Line 16: | Line 15: | ||
| certification = | | certification = | ||
<!-- Detail --> | <!-- Detail --> | ||
| digest size = | | digest size = चर | ||
| block size = | | block size = चर | ||
| structure = | | structure = | ||
| rounds = | | 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 | |||
expensiveSalt ← B0∥B1∥B2∥ ... ∥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); | |||
</syntaxhighlight>जहाँ PBKDF2(P, S, c, dkLen) अंकन को RFC 2898 में परिभाषित किया गया है, जहाँ c एक पुनरावृति संख्या है। | |||
इस संकेतन का उपयोग RFC 7914 द्वारा पीबीकेडीएफ2 के c = 1 के उपयोग को निर्दिष्ट करने के लिए किया जाता है। | |||
'''Function''' ROMix(Block, Iterations) | |||
इस संकेतन का उपयोग RFC 7914 द्वारा | |||
' | |||
Create ''Iterations'' copies of ''X'' | |||
X ← Block | |||
' | '''for''' i ← 0 '''to''' Iterations−1 '''do''' | ||
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 | |||
X ← BlockMix(X '''xor''' V<sub>j</sub>) | |||
'''return''' X | |||
जहाँ RFC 7914 परिभाषित करता है {{code|Integerify(X)}} | जहाँ RFC 7914 परिभाषित करता है {{code|Integerify(X)}} X के अंतिम 64 बाइट्स को छोटे-अंत पूर्णांक A<sub>1</sub> के रूप में व्याख्या करने के परिणामस्वरूप. | ||
चूँकि पुनरावृत्तियाँ N की | चूँकि पुनरावृत्तियाँ 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): | |||
''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'' | |||
[ | [B<sub>0</sub>...B<sub>2r-1</sub>] ← B | ||
X ← B<sub>2r−1</sub> | |||
i ← 0 | '''for''' i ← 0 '''to''' 2r−1 '''do''' | ||
X ← Salsa20/8(X xor B<sub>i</sub>) '''// Salsa20/8 hashes from 64-bytes to 64-bytes''' | |||
Y<sub>i</sub> ← X | |||
'''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-राउंड संस्करण है। | ||
== क्रिप्टोकरंसी उपयोग == | |||
स्क्रीप्ट का उपयोग कई क्रिप्टोकरंसीज में प्रूफ-ऑफ-वर्क एल्गोरिथम के रूप में किया जाता है (अधिक सटीक रूप से, हैशकैश प्रूफ-ऑफ-वर्क एल्गोरिथम में हैश फ़ंक्शन)। यह पहली बार टेनेब्रिक्स (सितंबर 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 तक, विशेष एएसआईसी माइनिंग हार्डवेयर स्क्रिप्ट-आधारित क्रिप्टोकरेंसी के लिए उपलब्ध है। | |||
मई 2014 तक, विशेष | |||
== उपयोगिता == | == उपयोगिता == | ||
स्क्रीप्ट उपयोगिता मई 2009 में कॉलिन पर्सिवल द्वारा स्क्रीप्ट कुंजी व्युत्पत्ति समारोह के प्रदर्शन के रूप में लिखी गई थी।<ref name="tarsnap"/><ref name="manpages"/>यह अधिकांश | स्क्रीप्ट उपयोगिता मई 2009 में कॉलिन पर्सिवल द्वारा स्क्रीप्ट कुंजी व्युत्पत्ति समारोह के एक प्रदर्शन के रूप में लिखी गई थी।<ref name="tarsnap"/><ref name="manpages"/> यह अधिकांश लिनक्स और बीएसडी वितरण में उपलब्ध है। | ||
== यह भी देखें == | == यह भी देखें == | ||
{{Portal|Free and open-source software}} | |||
* {{Portal|Free and open-source software}}[[Argon2|आर्गन2]] - 2015 में पासवर्ड हैशिंग प्रतियोगिता का विजेता | |||
* [[bcrypt]] - ब्लोफिश-आधारित पासवर्ड-हैशिंग | * [[bcrypt|बीक्रिप्ट]] - ब्लोफिश-आधारित पासवर्ड-हैशिंग फंक्शन | ||
* | * [[bcrypt|बीक्रिप्ट]] - 2002 में विकसित ब्लोफिश-आधारित क्रॉस-प्लेटफ़ॉर्म फ़ाइल एन्क्रिप्शन उपयोगिता[11][12][13][14] | ||
* [[ तहखाना (सी) ]] - यूनिक्स सी लाइब्रेरी फ़ंक्शन | * [[ तहखाना (सी) |क्रिप्ट]] - यूनिक्स सी लाइब्रेरी फ़ंक्शन | ||
* | * क्रिप्ट - यूनिक्स उपयोगिता | ||
* सीक्रिप्ट - उपयोगिता | * सीक्रिप्ट - उपयोगिता | ||
* | * की डेरिवेटिव फंक्शन | ||
* | * की स्ट्रेचिंग | ||
* | * मैक्रिप्ट - उपयोगिता | ||
* | * पीबीकेडीएफ2 - एक व्यापक रूप से उपयोग किया जाने वाला मानक पासवर्ड-आधारित पासवर्ड-आधारित डेरिवेटिव फंक्शन 2 | ||
* | * पफरफिश - बेहतर बीक्रिप्ट डिजाइन पर आधारित एक कैश-हार्ड पासवर्ड हैशिंग फंक्शन | ||
* स्पेस-टाइम ट्रेडऑफ़ | * स्पेस-टाइम ट्रेडऑफ़ | ||
* | |||
== संदर्भ == | == संदर्भ == | ||
{{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: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 published | 2009 |
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...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
expensiveSalt ← B0∥B1∥B2∥ ... ∥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
- पफरफिश - बेहतर बीक्रिप्ट डिजाइन पर आधारित एक कैश-हार्ड पासवर्ड हैशिंग फंक्शन
- स्पेस-टाइम ट्रेडऑफ़
संदर्भ
- ↑ "कॉलिन पर्सिवल". Twitter. Archived from the original on 17 February 2019.
- ↑ 2.0 2.1 "स्क्रीप्ट कुंजी व्युत्पत्ति समारोह". Tarsnap. Retrieved 21 January 2014.
- ↑ 3.0 3.1 "स्क्रिप्ट (1) जनरल कमांड मैनुअल". Debian Manpages. Retrieved 2 March 2022.
- ↑ Percival, Colin; Josefsson, Simon. "स्क्रीप्ट पासवर्ड आधारित कुंजी व्युत्पत्ति फंक्शन". RFC Editor. Retrieved 13 December 2021.
- ↑ Alec Liu. "Beyond Bitcoin: A Guide to the Most Promising Cryptocurrencies".
- ↑ Percival, Colin. "अनुक्रमिक मेमोरी-हार्ड फ़ंक्शंस के माध्यम से मजबूत कुंजी व्युत्पत्ति" (PDF). Retrieved 2022-11-11.
- ↑ Andreas M. Antonopoulos (3 December 2014). Mastering Bitcoin: Unlocking Digital Cryptocurrencies. O'Reilly Media. pp. 221, 223. ISBN 9781491902646.
- ↑ "क्रिप्टोक्यूरेंसी का इतिहास". Archived from the original on 11 June 2016. Retrieved 27 June 2014.
- ↑ Roman Guelfi-Gibbs. Litecoin Scrypt Mining Configurations for Radeon 7950. Amazon Digital Services.
- ↑ Joel Hruska (10 December 2013). "लिटकोइन खनन में भारी उछाल से ग्राफिक्स कार्ड की कमी हो जाती है". ExtremeTech.