الگوریتم Scrypt

اسکریپت یک الگوریتم هشینگ است که در برخی از بلاک چین‌های مبتنی بر مکانیزم استخراج اثبات کار استفاده می‌شود. Scrypt در واقع جایگزینی برای الگوریتم رمزنگاری SHA-256 است که در بلاک چین‌هایی مانند بیت کوین به‌کار می‌رود. امروزه شبکه‌های زیادی از این الگوریتم برای استخراج و حفاظت از شبکه خود بهره می‌برند. در این مطلب ضمن بررسی نحوه کار الگوی هشینگ Scrypt، به معرفی مزایا و ویژگی‌ها، مقایسه با SHA-256، نحوه مقاومت در برابر دستگاه‌های اسیک، تجهیزات مورد نیاز برای استخراج توسط اسکریپت ماینینگ، کدنویسی‌ها و موارد بسیار دیگر می‌پردازیم.

دنیای رمز ارزها طی سال‌های اخیر محبوبیت فراوانی یافته است و خرید ارز دیجیتال در ابتدا یکی از راه‌های ورود به دنیای کریپتوکارنسی‌ها بود، اما با گذر زمان و آشنایی بیشتر با این صنعت، افراد زیادی به استخراج آن‌ها روی آورند.

در صنعت ماینینگ، رمز ارزهای زیادی بلاک چین اختصاصی خود را معرفی کرده و هر کدام از این بلاک چین‌های جدید با هدف استفاده از تجهیزات خاص نظیر اسیک ماینر (ASIC Miner)، کارت گرافیک (GPU)، پردازنده کامپیوتری (CPU) و FPGAها، الگوریتم منحصربه‌فرد خود را توسعه داده‌اند. مثلا بیت کوین از تابع هش SHA-256 استفاده می‌کند و اتریوم نیز پیش از مهاجرت به مکانیزم اثبات سهام، از الگوریتم هشینگ Ethash بهره می‌برد؛ البته فورک EthereumPoW این شبکه همچنان از این الگوریتم استفاده می‌کند. Scrypt نیز یکی از همین الگوریتم‌هاست.

الگوریتم Scrypt چیست؟

اسکریپت یک الگوریتم هشینگ در مکانیزم اجماع اثبات کار (Proof of Work) است و جایگزینی برای الگوی هشینگ SHA-256 استفاده‌شده در فرآیند استخراج بیت کوین محسوب می‌شود. عبارت «اسکریپت ماینینگ» نیز برای تجهیزات سخت افزاری ویژه که در فرآیند استخراج کوین‌های مبتنی بر رمزنگاری این مکانیزم به‌کار می‌روند، استفاده می‌شود.

همانند دیگر روش‌های استخراج، اسکریپت ماینینگ شامل حل کردن مسائل ریاضی پیچیده و کدهای رمزنگاری در بلاک چین‌های پشتیبان این الگو جهت افزودن بلاک‌های جدید به شبکه و کسب پاداش آن است.

تاریخچه توسعه الگوریتم Scrypt

اسکریپت به‌عنوان یک الگوریتم مموری هارد (Memory Hard) برای بهبود امنیت شبکه در برابر حملاتی که از سخت افزارهای سفارشی استفاده می‌کنند، توسعه داده شد. مموری هارد تابعی است که برای محاسبه به مقدار حافظه بالایی نیاز دارد و عموما برای مقاومت در برابر دستگاه‌های اسیک ماینر استفاده می‌شود.

برخلاف دیگر الگوریتم‌های هشینگ نظیر Equihash و CryptoNight که منحصرا برای بلاک چین‌های اثبات کاری نظیر زی کش و مونرو طراحی شدند، Scrypt در ابتدا با هدف متفاوتی توسعه داده شد و بعدا به شبکه‌های بلاک چینی راه یافت.

مشتق کلید قوی‌تر از طریق توابع مموری هارد متوالی

در می 2009 (اردیبهشت 88)، کالین پرسیوال (Colin Percival) مقاله‌ای را تحت عنوان “Stronger Key Derivation Via Sequential Memory-Hard Functions” منتشر کرد. در این مقاله، آقای پرسیوال الگوریتم اسکریپت را برای سرویس پشتیبانی آنلاین تارسنپ (Tarsnap) معرفی کرده بود. از آنجایی که در این مقاله کدنویسی‌های این الگوریتم نیز آورده شده بود، هر کسی می‌توانست به بهبود این تابع هش بپردازد.

در آن زمان بیت کوین هنوز در مراحل اولیه عمرخود به‌سر می‌برد، بنابراین در این مقاله به نحوه استفاده از این الگو در شبکه‌های بلاک چینی پشتیبان رمز ارزها هیچ اشاره‌ای نشده بود. با این حال، مفاهیم پایه‌ای این الگوریتم کاملا تعریف‌شده بودند.

معرفی اسکریپت در شبکه رمز ارز تنبریکس (Tenebrix)

در سال 2011، شبکه ارز دیجیتال تنبریکس با نماد TBX توسط برنامه‌نویس ناشناسی به‌نام Artfortz توسعه داده شد. این بلاک چین اولین پروژه‌ای بود که از Scrypt به‌عنوان یک الگوریتم هشینگ استفاده کرد. با اینکه این پروژه در آخر شکست خورد، اما با ارائه یک گزینه دوستدار CPU برای ماینرهای ارزهای دیجیتال، مسیر جدیدی را ایجاد کرد.

با وجودی که امروزه دیگر اسمی از تنبریکس شنیده نمی‌شود، اما این پروژه نقش حیاتی را در آینده رمز ارزهای مبتنی بر اسکریپت و همچنین کوین‌های استفاده‌کننده از الگوریتم‌های هشینگ مقاوم در برابر اسیک ماینرها بازی کرد.

ادامه راه توسط فربریکس (Fairbrix) و لایت کوین

پروژه فربریکس با نماد FBX توسط چارلی لی (Charlie Lee) به‌عنوان همزاد تنبریکس توسعه داده شد. اما این پروژه دو مشکل بزرگ داشت: یکی وجود یک باگ در کلاینت این رمز ارز بود که ساخت کوین‌های جدید را غیرممکن می‌کرد و دیگری، حمله 51 درصدی بود که به سرقت تقریبا 1,600 واحد بلاک منجر شد. نتیجه این اتفاق نیز شکست فربریکس بود.

اما چارلی لی از ایده ساخت یک شبکه مبتنی بر اسکریپت دست نکشید. وی با بررسی تمام کارهای انجام‌شده روی فربریکس و کدهای بیت کوین، فورکی از این ارز دیجیتال به‌نام لایت کوین (LTC) را در سال 2011 طراحی کرد که امروزه یکی از رمز ارزها بزرگ استفاده‌کننده از الگوی Scrypt به‌شمار می‌رود.

نهایتا فعالیت‌های آقای پرسیوال به پذیرش گسترده این الگوریتم ختم شد و در سال 2016، کارگروه مهندسی اینترنت (IETF) که استانداردهای جهانی این حوزه را تعیین می‌کند، با توسعه «استاندارد RFC 7914» الگوریتم هشینگ Scrypt را به‌عنوان یک استاندارد تابع هش جهانی پذیرفت.

الگوریتم هش Scrypt چه ویژگی دارد؟

اسکرپیت دارای ویژگی‌های منحصربه‌فردی است از جمله:

  • الگویی کارا: تابع اسکریپت در مقایسه با پیچیدگی کاری که انجام می‌دهد، بار کاری کمی دارد. استفاده از یک کلید و موازی‌سازی فرآیندها، تولید اعداد تصادفی و همچنین توانایی تعدیل مقادیر تابع، بدون به‌خطر انداختن امنیت باعث افزایش کارایی اسکریپت می‌شود.
  • امنیت نسبتا بالا: اسکریپت الگوریتمی با سطح امنیت بالا و قابل تعدیل است. این مکانیزم به‌گونه‌ای طراحی شده است تا برنامه‌نویسان قابلیت افزایش یا کاهش متغیرهای تاثیرگذار بر میزان امنیت را داشته باشند. علاوه بر این، Scrypt در برابر حملات بروت فورس (Brute-force) یا «حمله جستجوی فراگیر» مقاومت بالایی دارد که آن را برای سیستم‌های توزیع‌شده مناسب می‌سازد.
  • مقاومت در برابر اسیک و FPGA: در ابتدا، یکی از دلایلی که رمز ارزهایی نظیر لایت کوین از اسکریپت استفاده می‌کردند، توانایی آن در جلوگیری از کاربرد اسیک ماینرها و FPGA بود. این یعنی الگوی اسکریپت، ماینینگ از طریق اینگونه تجهیزات را نه تنها بسیار دشوار می‌سازخت، بلکه به‌خاطر مصرف برق بالا نیز باعث کاهش مقرون‌به‌صرفگی آن‌ها می‌شد. در نتیجه، رمز ارزهای استفاده‌کننده از الگوی Scrypt از تمرکززدایی بیشتری بهره‌مند می‌شدند. با این حال، در سال 2014 اولین اسیک ماینر سازگار با این الگوریتم به بازار عرضه شد و همه محاسبات را به‌هم زد.

مزیت الگوریتم Scrypt چیست؟

از جمله مزایای مکانیزم هشینگ اسکریپت می‌توان موارد زیر را نام برد:

  • پیچیدگی کمتر در برابر دیگر الگوریتم‌های استخراج رمز ارز
  • مصرف انرژی کمتر در مقایسه با SHA-256
  • کارمزد کمتر تراکنش‌ها در ارزهای مبتنی بر اسکریپت
  • سرعت 4 برابری اسکریپت ماینینگ نسبت به استخراج BTC
  • راه‌حلی عالی برای رمزگذاری والت‌ها، فایل‌ها و پسوردها
  • کاربرپسندی بیشتر به‌دلیل استفاده از RAM یا حافظه ذخیره‌سازی
  • سرعت بالاتر تراکنش‌ها به‌دلیل استفاده از ذخیره‌سازی حافظه

امنیت در الگوریتم اسکریپت

از نظر تئوری، الگوی Scrypt امنیت بالاتری «در هر واحد زمان محاسبه» نسبت به دیگر الگوریتم‌های شناخته‌شده دارد. همچنین با استفاده از این الگوریتم می‌توان سرعت حافظه مورد نیاز برای محاسبه نتیجه را تعیین کرد که باعث افزایش هزینه مهاجمان بروت فروس (از نظر منابع مموری، پردازنده و GPU) می‌شود.

از نظر تئوری و الگوریتمی، اسکریپت در حوزه خود نیز بسیار کارآمد است و حملات سخت افزاری شخصی‌سازی‌شده را به‌خاطر الگوریتم مموری هارد خود بسیار پرهزینه می‌کند.

با وجود همه این تفاسیر، با اینکه اسکریپت خود را مانعی برای GPU ماینینگ بیت کوین معرفی کرده بود، اما ماینرهایی که از کارت گرافیک برای استخراج استفاده می‌کردند همچنان توانایی ورود به شبکه را داشتند. اما از نظر طراحی، مهاجمان برای افزایش سرعت حمله خود (بروت فورس) همچنان ملزم به استفاده از حافظه بالا بودند (نه لزوما برق بیشتر)، چراکه مموری پایین‌تر باعث کاهش سرعت می‌شد. با این حال، با ورود اسیک ماینرها به این حوزه نیز ورق برگشت و امروزه ماینینگ از طریق CPU و GPU را ناکارآمد کرده است.

در هر حال، اسکریپت به‌دلیل افزایش هزینه مهاجمان برای حمله به شبکه و شکستن رمز پسوردها، جزو یکی از امن‌ترین الگوریتم‌ها شناخته می‌شود.

الگوریتم Scrypt چگونه کار می کند؟

همانطور که گفتیم، اسکرپیت یک الگوریتم هشینگ و جایگزینی برای الگوی SHA-256 است که در بلاک چین‌هایی نظیر بیت کوین به‌کار می‌رود. در این قسمت، به‌نحوه کار این الگوریتم و کدنویسی‌های آن می‌پردازیم.

تابع هش

پیش از پرداختن به نحوه کار الگوی Scrypt، باید با بلاک چین، نانس، درخت مرکل (Merkle Tree)، و در کل هش فانکشن (Hash Function) به‌عنوان پیش‌نیاز درک نحوه استخراج رمز ارزها آشنا شویم.

تابع هش چیزی است که از مهمترین کاربردهای محاسباتی آن می‌توان به ذخیره‌سازی امن پسوردها، یافتن سوابق تکرای و ذخیره و بازیابی سریع داده اشاره کرد. در حوزه رمز ارزها، توابع هش دارای ویژگی‌های خاصی هستند از جمله:

  • توابع هش داده‌ها را به‌طور قطعی به‌هم می‌ریزند.
  • صرف‌نظر از ورودی، خروجی تابع هش همیشه یک اندازه است.
  • امکان تشخیص داده اصلی اولیه از داده‌های به‌هم‌ریخته وجود ندارد و در واقع یک تابع یک‌طرفه است.

تابع مشتق کلید مبتنی بر رمز عبور

اسکریپت یک تابع مشتق کلید مبتنی بر رمزعبور (Password-based Key Derivation Function) یا به‌طور خلاصه KDF مبتنی بر پسورد با سرعت بسیار پایین در طراحی خود است. در حوزه رمزنگاری، KDF یک تابع هش است که با استفاده از یک تابع شبه‌تصادفی، یک یا چند کلید مخفی را از یک مقدار مخفی نظیر مستر کی (Master key)، رمز عبور یا عبارت عبور (Passphrase) مشتق می‌کند.

به زبان ساده‌تر، هدف هش الگوی Scrypt ساخت یک اثر انگشت برای داده‌های ورودی خود است، اما این کار را «بسیار آهسته» انجام می‌دهد. یکی از کاربردهای این ویژگی، ساخت یک کلید خصوصی قوی از یک پسورد است، به‌طوری که این کلید خصوصی جدید بلندتر و امن‌تر باشد.

مثال: برای درک بهتر، فرض کنید رمزعبور شما “password1234” باشد. با استفاده از الگوریتم اسکریپت، می‌توانیم این پسورد را به یک کلید 256 بیتی تبدیل کنیم:

AwEEDA4HCwQFAA8DAwwHDQwPDwUOBwoOCQACAgUJBQ0JAAYNBAMCDQ4JCQgLDwcGDQMDDgMKAQsNBAkLAwsACA==

اکنون می‌توانیم از این کلید 256 بیتی به‌عنوان یک کلید خصوصی برای رمزگذاری و رمزگشایی داده‌ها استفاده کنیم. مثلا این عبارت می‌تواند یک کلید در رمز AES-246 باشد.

اما سوال اینجاست که «چرا نمی‌توان مستقیما از خود پسورد برای رمزنگاری استفاده کرد؟» پاسخ این است که الگوریتم‌های رمزنگاری از جمله AES-256 به یک کلید با طول کافی نیاز دارند. بنابراین با هش کردن رمزعبور می‌توانیم یک کلید امن‌تر، بلندتر و با اندازه ثابت و مشخص داشته باشیم.

اکثر اوقات در حملات بروت فورس، مهاجمان با حدس زدن چندین و چند باره پسورد درصدد دستیابی به آن هستند. به دلیل سرعت بالای AES-256 و SHA-256، یک مهاجم می‌تواند پسوردهای زیادی را در ثانیه حدس بزند. اما با استفاده از یک تابع هش کند نظیر Scrypt برای استخراج یک کلید، منابع بیشتری برای نفوذ از سوی مهاجم به‌هدر می‌رود.

پیش از توسعه اسکریپت، KDFهایی نظیر تابع مشتق کلید مبتنی بر رمزعبور شماره 2 (Password-Based Key Derivation Function 2) یا به‌طور خلاصه PBKDF2، برای مقاومت در برابر FPGA و اسیک‌ها محدودیت داشتند. با وجود ظرفیت محاسباتی بالای PBKDF2 و دیگر KDFهای مبتنی بر پسورد، اما حافظه ذخیره‌سازی‌شان پایین بود. به همین خاطر، الگوریتم Scrypt برای داشتن هر دوی طرفیت بالای محاسبه و مموری طراحی شد.

تابع مشتق کلید مبتنی بر پسورد شماره دو

تابع مشتق کلید مبتنی بر پسورد شماره دو

نویز و تولید اعداد تصادفی

به‌طور خلاصه، هدف اسکریپت پیچیده‌سازی فرآیند ماینینگ از طریق اضافه کردن مشتقات بیشتر از کلیدها به مسائل ریاضی است. در این فرایند، «نویز (Noise)» مورد استفاده قرار می‌گیرد که به «مجموعه اعداد تصادفی ساخته‌شده توسط الگوریتم هش و ذخیره‌سازی در حافظه» اطلاق می‌شود. هدف این کار، مخفی کردن داده کلید واقعی از چشم الگوریتم است که پیدا کردن راه‌حل‌های رمزنگاری مسئله ریاضی مربوطه را برای ماینرها دشوارتر می‌کند. در نتیجه، محاسبه و حل مسائل بیشتر طول خواهد کشید.

از آنجایی که چنین سیستمی مزایای بیشتری را برای ماینرهای دارای منابع محاسباتی بزرگتر فراهم و تمرکزگرایی را تشویق می‌کند، انتقادهای منفی را از سوی بسیاری از توسعه‌دهندگان حوزه رمز ارزها به‌همراه داشته است. با این حال، اسکریپت ماینینگ به‌خاطر ایجاد نوعی مکانیزم دفاعی در برابر هکرها و متقلبانی که به‌دنبال ورود به بلاک چین هستند، محبوب بسیاری از توسعه‌دهندگان این حوزه است. بنابراین، در الگوریتم اسکریپت ماینرها ملزم به تولید اعداد تصادفی هستند. این اعداد نیز باید در حافظه RAM پردازنده ذخیره شوند که پیش از ثبت یک نتیجه، دسترسی دائم به آن‌ها باید فراهم باشد.

معماری اسکریپت و جایگاه آن در تولید هش بلاک

معماری اسکریپت و جایگاه آن در تولید هش بلاک

کدهای الگوریتم اسکریپت

همانطور که گفتیم، علاوه بر استخراج و هشینگ در بلاک چین، شما می‌توانید از اسکریپت برای رمزنگاری والت، برنامه و فایل‌های خود نیز استفاده کنید که در ادامه با مثالی این کدنویسی‌ها را بررسی می‌کنیم.

شبه‌کدها

شبه‌کدهای Scrypt به‌صورت زیر است:

func Scrypt(
passphrase, // string of characters to be hashed
salt, // random salt
costFactor, // CPU/Memory cost, must be power of 2
blockSizeFactor,
parallelizationFactor, // (1..232-1 * hLen/MFlen)
desiredKeyLen // Desired key length in bytes
) derivedKey {
const blockSize = 128 * blockSizeFactor
const initialSalt = PBKDF2(HMAC-SHA256, passphrase, salt, 1, blockSize * parallelizationFactor)
splitSalt := [][1024]byte(initialSalt)
for i, block := range splitSalt {
newBlock := roMix(block, costFactor)
splitSalt[i] = newBlock
}
expensiveSalt := append([], splitSalt...)
return PBKDF2(HMAC-SHA256, passphrase, expensiveSalt, 1, desiredKeyLen)
}

این کدها را می‌توانید در ویکی‌پدیا نیز از طریق لینک en.wikipedia.org/wiki/Scrypt مشاهده نمایید.

پارامترهای الگوریتم Scrypt

این الگوریتم چندین پارامتر ورودی را گرفته و کلید مشتق را به‌عنوان خروجی تولید می‌کند. این کلید به‌صورت زیر تعریف می‌شود:

key = Scrypt(password, salt, N, r, p, derived-key-len)

پارامترهای ورودی اسکریپت به‌صورت زیر هستند:

  • N – تعداد تکرار (تاثیرگذار روی مصرف CPU و مموری). مثلا: 16384 یا 2048
  • r – اندازه بلاک (تاثیرگذار روی مصرف CPU و مموری). مثلا: 8
  • p – عامل موازی‌سازی (رشته‌های اجرا به‌صورت موازی – تاثیرگذاری روی مصرف CPU و مموری). معمولا 1
  • password – رمزعبور ورودی (طول حداقل 8 تا 10 کاراکتری توصیه می‌شود)
  • salt – بایت‌های تولیدشده امن تصادفی (حداقل 64 بیت، 128 بیت توصیه شده است)
  • derived-key-len – تعداد بایت‌ها برای تولید خروجی. مثلا: 32 بایت (256 بیت)
نحوه تولید کلید با الگوریتم Scrypt به‌صورت شماتیک

نحوه تولید کلید 256 بیتی با اسکریپت به‌صورت شماتیک

مموری در الگوریتم اسکریپت در هر مرحله کاملا به‌صورت ترتیبی قابل دسترسی است، بنابراین سرعت دسترسی به حافظه گلوگاه این الگو محسوب می‌شود. حافظه لازم برای محاسبه مشتق کلید Scrypt به صورت زیر محاسبه می‌شود:

Memory required = 128 * N * r * p bytes

مثال:

128 * N * r * p = 128 * 16284 * 8 * 1 = 16 MB

یا

128 * N * r * p = 128 * 2048 * 8 * 1 = 2 MB

انتخاب مقدار این پارامترها به مدت زمان مورد نظر شما برای انتظار و میزان سطح امنیت (مقاومت در برابر شکست پسورد) بستگی دارد:

  • پارامترهای نمونه برای ورود تعاملی: N=16384, r=8, p=1 (RAM = 16 MB) برای ورود تعاملی زمان انتظار معمولا نباید بیشتر از 0.5 ثانیه باشد، بنابراین محاسبات نباید خیلی آهسته باشند. در طرف سرور نیز عموما کاربران بسیاری به‌صورت همزمان وارد وب سایت می‌شوند، بنابراین محاسبات آهسته اسکریپت باعث کندی کل سیستم می‌شود.
  • پارامترهای نمونه برای رمزگذاری فایل: N=1048576, r=8, p=1 (RAM = 1 GB). هنگام رمزگذاری هارد درایو، احتمالا بیشتر از 2 یا 3 بار در روز اینگونه فایل‌ها را باز نمی‌کنید، بنابراین برای افزایش امنیت زمان انتظار را می‌توانید به 2 تا 3 ثانیه افزایش دهید.

هنگام توسعه سیستم یا اپ خود بهتر است پارامترهای مختلف را آزمایش کرده و همیشه از سریع‌ترین پیاده‌سازی اسکریپت استفاده نمایید. برخی از پیاده‌سازی‌های این الگوریتم در پایتون ممکن است حتی تا 100 برابر آهسته‌تر باشند.

در کیف پول مای اتر والت (MEW)، پارامترهای پیش‌فرض اسکریپت به صورت N=8192, r=8, p=1 (RAM= 8 MB) هستند. این تنظیمات به‌اندازه کافی برای والت‌های رمز ارزی امن محسوب نمی‌شوند، اما نحوه کار برای افزایش سرعت به این صورت انتخاب شده است. راه‌حل مناسب برای رفع این مشکل، استفاده از یک رمزعبور پیچیده و طولانی جهت جلوگیری از حدس زدن آن توسط هکرهاست.

برای کار با این الگوریتم، با استفاده از وبسایت 8gwifi.org/scrypt.jsp می‌توانید رمزعبور دلخواه خود را وارد کرده و هش تولیدی را مشاهده نمایید.

پارامترهای الگوریتم اسکریپت

پارامترهای اسکریپت

نمونه الگوریتم اسکریپت در پایتون

برای مشتق کردن یک کلید از یک پسورد با استفاده از الگوریتم Scrypt، می‌توانیم این کدنویسی‌ها را در پایتون نیز انجام دهیم. برای این کار ابتدا باید پیکیج پایتون scrypt را با استفاده از کامند زیر نصب کنید:

pip install scrypt

دقت داشته باشید که پکیج اسکریپت به OpenSSl وابسته است، بنابراین ابتدا آن را در محل پیش‌فرض آن (مثلا در C:\OpenSSL-Win64 ویندوز) نصب کرده و سپس پکیج اسکریپت پایتون را نصب نمایید. حال می‌توانیم کدهای پایتون را برای محاسبه هش توسط این الگوریتم بنویسیم. در مثال زیر، تعداد تکرارهای کمتری (2048) را انتخاب کرده‌ایم تا سرعت اجرا بالا باشد. در موارد معمول، تکرارهای بیشتر مثلا بالای 16384 بار توصیه شده است.

import pyscrypt
salt = b'aa1f2d3f4d23ac44e9c5a6c3d8f9ee8c'
passwd = b'p@$Sw0rD~7'
key = pyscrypt.hash(passwd, salt, 2048, 8, 1, 32)
print("Derived key:", key.hex())

اکنون کد بالا را اجرا کنید. خروجی این کد به‌صورت زیر خواهد بود:

b’e813a6f6ccc4e9110193bf9efb7c0a489d76655f9e36629dccbeaf2a73bc0c6f’

اکنون تعداد تکرار و اندازه بلاک را تغییر داده و نحوه اثرگذاری آن بر زمان اجرا را بررسی کنید. دقت داشته باشید که پیاده‌سازی کد بالا در پایتون سرعت بالایی ندارد.

ذخیره تنظیمات الگوریتم به‌همراه Salt و Hash

در بسیاری از اپلیکیشن‌ها، چارچوب‌ها و ابزارها، پسوردهای رمزگذاری‌شده توسط Scrypt به‌همراه تنظیمات الگوریتم و Salt در یک رشته واحد (در قالب خاص) ذخیره می‌شوند که شامل چند بخش بوده و توسط کاراکتر $ از یکدیگر جدا می‌شوند. مثلا قالب استانداره ذخیره‌سازی پسورد “p@ass~123” می‌تواند به‌صورت زیر باشد:

16384$8$1$kytG1MHY1KU=$afc338d494dc89be40e317788e3cd9166d066709db0e6481f0801bd918710f46

مقایسه Scrypt و SHA-256

انتخاب SHA-256 یا اسکریپت به‌عنوان سیستم پایه استخراج رمز ارزها، به اهداف توسعه‌دهندگان بلاک چین مربوطه بستگی دارد. در ادمه، به بررسی ویژگی‌های SHA-245 و مقایسه با الگوی اسکریپت می‌پردازیم.

SHA-256

  • پیچیدگی بیشتری نبست به Scrypt دارد.
  • برای استخراج بیت کوین و بسیاری دیگر از رمز ارزها استفاده می‌شود.
  • زمان پردازش بلاک داده با SHA-256 کندتر است و به‌جای ثانیه بر حسب دقیقه اندازه‌گیری می‌شود.
  • پردازش‌های انجام‌شده توسط این مکانیزم تقریبا عاری از خطاست و بهترین گزینه برای حفاظت از داده به‌شمار می‌رود.
  • به هش ریت TH/s یا بالاتر نیاز دارد.
  • استفاده از آن برای تمام ماینرها آسان نیست.

اسکریپت

  • در مقایسه با SHA-256 سریع‌تر است.
  • رمز ارزهای جدیدتر بیشتر این الگو را انتخاب می‌کنند.
  • نسبت به SHA-256 انرژی کمتری نیاز دارد و در CPUها قابل استفاده است.
  • هش ریت آن نسبت به SHA-256 پایین‌تر و در حد MH/s و GH/s متغیر است که دسترسی به آن را برای تمام ماینرهای خرد بدون اسیک ماینر یا تجهیزات سخت افزاری پیشرفته آسان می‌سازد.

مثلا در زمان نگارش این مطلب، نرخ هش کل شبکه بیت کوین 267.143 اگزاهش بر ثانیه (EH/s)، اما هش ریت لایت کوین 646.91 تراهش بر ثانیه (TH/s) است.

ترتیب واحدهای هش به‌صورت زیر است:

واحد هش ریتهشهش بر ثانیه
H/s – هش بر ثانیه1یک
KH/s – کیلو هش بر ثانیه1,000هزار
MH/s – مگا هش بر ثانیه1,000,000یک میلیون
GH/s – گیگا هش بر ثانیه1,000,000,000یک میلیارد
TH/s – ترا هش بر ثانیه1,000,000,000,000یک تریلیون
PH/s – پتا هس بر ثانیه1,000,000,000,000,000یک کوادریلیون
EH/s – اگزا هش بر اثنیه1,000,000,000,000,000,000یک کوینتیلیون
ZH/s – زتا هش بر ثانیه1,000,000,000,000,000,000,000یک سکستیلیون
Yh/s – یوتا هش بر ثانیه1,000,000,000,000,000,000,000,000یک سپتیلیون

مقاومت الگوریتم Scrypt در برابر ASIC تا چه میزان مؤثر بوده است؟

درک اثرگذاری الگوریتم Scrypt علیه اسیک ماینرها نیازمند ارزیابی نحوه ظهور اسیک‌های سازگار با این الگو طی سال‌های گذشته (مشابه آنچه برای الگوریتم Ethash اتریوم شاهد بودیم) و وضعیت فعلی سودآوری ماینینگ با این واحدهاست.

حذف CPU و GPU از گردونه رقابت

در ابتدای امر، الگوریتم اسکریپت با هدف کاهش خیزش و تسلط ریگ‌های اسیک ماینینگ و تمرکزگرایی متعاقب آن بر صنعت استخراج ارز دیجیتال توسعه داده شد و در برابر اسیک ماینر و FPGA مقاوم بود، به این معنا که هیج دستگاه سخت افزاری سفارشی در شبکه لایت کوین حضور نداشت.

اما با عرضه رسمی اولین ریگ استخراج اسیک به بازار در می 2014، CPUها به‌سرعت توانایی خود در ماین کردن کوین‌های مبتنی بر الگوی اسکریپت را از دست دادند. نیازمندی حافظه و مموری در لایت کوین نیز به‌اندازه کافی بالا نبود. بنابراین دقیق نمی‌توان گفت که در صورت انتخاب پارامترهای سخت‌گیرانه‌تر در ابتدای امر (در ادامه این مطلب بیشتر به این مورد خواهیم پرداخت)، دسترسی به اسیک ماینرها چقدر طول می‌کشید. از آن زمان تا کنون، دیگر از CPUها و GPUها برای استخراج رمز ارزهای مبتنی بر این الگوریتم استفاده نمی‌شود.

Scrypt-ChaCha، Scrypt-N و Scrypt² همگی از دیگر نسخه‌های مشابه اسکریپت هستند که مموری هاردنس را به الگوریتم اصلی افزودند. با این حال، این طراحی‌ها هنوز در مرحله پذیرش و استقبال عمومی قرار دارند. پروژه‌های بلاک چینی که از زمان ظهور اسیک‌های سازگار با اسکریپت راه‌اندازی شده‌اند، دیگر الگوریتم‌های هشینگ اثبات کار نظیر کریپتونایت یا ایکوئی‌هش را انتخاب کرده‌اند.

سودآوری ریگ‌های اسیک ماینینگ سازگار با الگوریتم اسکریپت

امروزه اسیک‌های مختلفی به بازار عرضه شده‌اند که توانایی استخراج رمز ارزهای مبتنی بر الگوریتم Scrypt را دارند، اما تنها برخی از آن‌ها در حال حاضر سودآور هستند. در این میان، Innosilicon A6+ LTCMaster و Bitmain Antminer L3 از جمله محبوب‌ترین سخت افزارها به‌شمار می‌روند.

بر اساس قیمت دستگاه، هزینه برق مصرفی، هش ریت شبکه، هش پاور دستگاه و موارد دیگر، شخصا باید به محاسبه سودآوری ماینینگ بپردازید. در تصویر زیر، دیگر دستگاه‌های اسیک ماینر سودآور برای استخراج کوین‌های مبتنی بر الگوی اسکریپت را مشاهده می‌کنید:

اسیک ماینرهای اسکریپت

با این وجود، در آینده و تولید دستگاه‌های پیشرفته‌تر، احتمالا شاهد جایگزینی این ریگ‌ها نیز خواهیم بود.

چه ارزهای دیجیتالی از الگوریتم Scrypt استفاده می‌کنند؟

لایت کوین و دوج کوین شناخته‌شده‌ترین و محبوب‌ترین پروژه‌های رمز ارزی استفاده‌کننده از الگوریتم اسکریپت هستند. در این بخش علاوه بر بررسی اجمالی نحوه کار این سیستم در این شبکه‌ها، به معرفی دیگر ارزهای دیجیتال با مارکت کپ پایین، کوین‌های هیبرید و کوین‌های چند الگوریتمی مبتنی بر Scrypt می‌پردازیم.

لایت کوین

لایت کوین رمز ارزی است که در سال 2011 راه‌اندازی شد و خود را یک شبکه مقاوم در برابر اسیک ماینرها معرفی کرد. پارامترهای انتخابی الگوریتم اسکریپت لایت کوین به‌صورت N=1024 ،r=1 و p=1 هستند. کالین پرسیوال، خالق اسکریپت، اظهار داشته بود که لایت کوین این الگو را خیلی بد پیاده‌سازی کرده است. در مقاله اسکریپت آقای پرسیوال r=8 پیشنهاد شده بود که به‌معنای لزوم ماینرها به استفاده از RAM بالاتر است. این مقدار از نظر تئوری باعث جلوگیری از تسلط اسیک ماینرها بر شبکه این رمز ارز می‌شود.

به استناد چارلی لی، خالق لایت کوین، پارامترهای سختگیرانه‌تر حافظه باعث کاهش سرعت کلاینت شبکه می‌شود. آقای لی هنگام آزمایش این پارامترها دریافته بود که در هر بار تولید بلاک، کلاینت شبکه از کار می‌ایستد. بنابراین لایت کوین پارامترهای سهل‌گیرانه‌تری را انتخاب کرده است که تجربه کاربری بهتری را برای کاربر نهایی ایجاد می‌کند. علاوه بر این، در آن زمان هیچ GPU، اسیک یا FPGA قادر به استخراج مبتنی بر الگوریتم اسکریپت در دسترس نبود، بنابراین این شبکه در ابتدای راه‌اندازی تنها با CPUها سازگاری داشت.

همانطور که گفتیم، در می 2014 اولین اسیک ماینر سازگار با اسکریپت به بازار عرضه شد. امروزه بسیاری از ماینرهای لایت کوین از این ریگ‌ها حمایت کرده و وجود آن‌‌ها را برای کمک به حفظ امنیت شبکه مناسب می‌دانند.

پس از رویداد هاوینگ لایت کوین در اوت 2019 (مرداد 98)، به‌خاطر کاهش هش ریت اسکریپت این شبکه از 500 تراهش در ثانیه به 150 تراهش در ثانیه، نگرانی‌ها درباره حمله 51 درصدی به این بلاک چین افزایش یافت. به استناد Crypto51.app، در حال حاضر با فرض هش ریت 646.91 تراهش بر ثانیه (TH/s) واحدی کل لایت کوین، هزینه 1 ساعت حمله 51 درصد به این شبکه برابر 81,047 دلار است.

وبسایت en.cryptonomist.ch در سال 2019 تحلیلی از امکان اتک 51 درصد به لایت کوین را منتشر و این رقم را بر اساس هش ریت 153 TH/s این شبکه در آن زمان، معادل 700 میلیون دلار تخمین زده بود. با توجه به افزایش میزان نرخ هش کل شبکه به حدود 646 تراهش بر ثانیه، طبیعی است که این هزینه در سال 2023 بیش از 1 میلیارد دلار باشد. در این تحلیل هزینه خرید اسیک ماینرهای اسکریپت، مصرف برق و همچنین قیمت رمز ارز LTC نیز در نظر گرفته شده بود. به دلیل محاسبه قیمت خرید دستگاه‌های اسیک در این تحلیل، احتمالا اعداد و ارقام تخمین‌زده‌شده دقت بیشتری نسبت به تحلیل سایت Crypto51 دارند.

دوج کوین

رمز ارز دوج در سال 2013 به‌عنوان فورکی از شبکه لایت کوین متولد شد. با اینکه قصد توسعه این کوین در ابتدا فقط شوخی بود، اما این ارز دیجیتال در سال‌های اخیر محبوبیت فراونی یافته و حمایت‌های ایلان ماسک، مدیرعامل تسلا، باعث افزایش قیمت دوج کوین شده است.

پارامترهای استخراج دوج کوین با لایت کوین متفاوت است. مثلا زمان بلاک این رمز ارز 1 دقیقه است، در حالی که این مدت برای لایت کوین 2.5 دقیقه در نظر گرفته شده است.

وجود تهدید بالقوه اتک 51 درصدی به شبکه دوج کوین، خالق لایت کوین را به معرفی استخراج مشترک و یکپارچه بین این دو بلاک چین در سال 2014 واداشت. این مدل در ژوئیه 2014 در بلاک شماره 317,337 دوج کوین اجرایی شد که اجازه استخراج همزمان DOGE و LTC را به ماینرها می‌داد. در نتیجه، هر دوی این شبکه‌ها از سپتامبر 2014 (شهریور 93) تا کنون دارای ضریب هبستگی بالا در سختی استخراج و نرخ هش بوده‌اند.

رمز ارزهایی که قبلا از الگوریتم اسکریپت استفاده می‌کردند

برخی از پروژه‌های کریپتویی نیز در قدیم از الگوریتم هشینگ Scrypt بهره می‌بردند، اما امروزه به دیگر الگوهای اثبات کار یا دیگر انواع الگوریتم اجماع مهاجرت کرده‌اند. از جمله این پروژه‌ها می‌توان موارد زیر را نام برد:

  • رد کوین – Reddcoin (RDD): در 6 ماهه اول تولد ردکوین، شبکه این رمز ارز برای توزیع توکن‌های RDD به‌شکلی قابل پیش‌بینی و گسترده، از الگوی اسکریپت استفاده می‌کرد. اما در بلاک شماره 260,800، این شبکه به اثبات سهام شتاب‌زده (Proof of Stake Velocity) مهاجرت کرد.
  • ورت کوین – Vertcoin (VTC): این شبکه زمانی از یکی از نسخه‎‌های اسکریپت به‌نام Scrypt-N استفاده می‌کرد، اما پس از مدتی به الگوی Lyra2RE و بعد از آن به Lyra2REv2 تغییر یافت. این شبکه اکنون از Lyra2REv3 به‌عنوان الگوریتم هشینگ اثبات کار خود استفاده می‌کند.
  • مونا کوین – Monacoin (MONA): مونا کوین برای جلوگیری از تمرکزگرایی شبکه که به‌خاطر اسیک‌های مبتنی بر اسکریپت ایجاد شده بود، به الگوریتم Lyra2REv2 مهاجرت کرده است.

ارزهای با مارکت کپ پایین

از جمله ارزهای دارای ارزش بازار پایین که از الگوریتم Scrypt در شبکه خود استفاده می‌کنند عبارتند از:

  • آریا کوین – (Aryacoin (AYA
  • گولدن – Gulden (BLG)
  • ویاکوین – Viacoin (VIA)
  • لایتنینگ بیت کوین – Lightning Bitcoin (LBTC)
  • گرید کوین – Gridcoin (GRC)
  • پات کوین – PotCoin (POT)
  • فلو – Flo (FLO)
  • کوسارکوین – Quasarcoin (QAC)
  • وری کوین – VeriCoin (VRC)
  • امنی – Omni (OMNI)
  • ماتریکس ای‌آی نتورک – Matrix AI Network (MAN)
  • گیم کردیتس – GameCredits (GAME)
  • ادونسد اینترنت بلاکس – Advanced Internet Blocks (AIB)
  • آینستاینیوم – Einsteinium (EMC2)

ارزهای هیبرید مبتنی بر الگوریتم اسکریپت

برخی از رمز ارزها نیز به‌صورت هیبرید و دوگانه از مکانیزم‌های اجماع اثبات سهام و اثبات کار در شبکه خود بهره می‌برند که الگوریتم هشینگ Scrypt بخشی از این فرآیند است:

  • وایت کوین – Whitcoin (XWC)
  • سالوس – Salus (SLS)

ارزهای چند الگوریتمی

برخی از رمز ارزها نیز از چندین الگوریتم هشینگ در استخراج خود پشتیبانی می‌کنند که در این میان، دو ارز زیر از اسکریپت برای هشینگ خود بهره می‌برند:

نحوه استخراج یک ارز مبتنی بر الگوریتم Scrypt

تا به اینجای مطلب با رمز ارزهای مبتنی بر اسکریپت و تجهزات لازم جهت ماینینگ با این الگوی هشینگ آشنا شدیم. در این قسمت، به نحوه استخراج لایت کوین که یکی از محبوب‌ترین رمز ارزهای مبتنی بر این الگوریتم است، می‌پردازیم. برای آشنایی با جزئیات بیشتر، به مطلب مربوطه مراجعه کنید.

مراحل کلی کار به صورت زیر است:

  1. خرید دستگاه مناسب: همانطور که گفتیم، امروزه به دلیل ظهور دستگاه‌های اسیک ماینر استفاده از CPU و GPU برای ماینینگ بسیاری از ارزهای دیجیتال سودآوری چندانی ندارد. با مراجعه به آدرس f2pool.com/miner و انتخاب LTC می‌توانید تجهیزات سودآور فعلی برای این رمز را مشاهده نمایید.
  2. دانلود نرم افزار: برای کانفیگ کردن دستگاه، باید نرم افزار متناسب با آن را نیز دانلود نمایید. مثلا با مراجعه به آدرس www.f2pool.com/tools و انتخاب دستگاه خود، می‌توانید نرم افزار مناسب را دانلود کنید.
  3. ثبت نام در استخر: همانطور که احتمالا می‌دانید، امروزه سولو ماینینگ یا همان استخراج انفرادی سودآوری زیادی ندارد. علت این امر، افزایش رقابت در این صنعت و ظهور مزارع ماینینگ است که کار را برای ماینرهای خرد دشوار کرده است. به همین دلیل باید قدرت دستگاه (های) اسیک خود را با دیگران در یک استخر استخراج به‌اشتراک گذاشته و به کمک دیگران به پیدا کردن بلاک‌های معتبر بپردازید. در این مطلب، استخر F2Pool را به‌عنوان نمونه انتخاب کرده‌ایم. وارد وبسایت آن به آدرس www.f2pool.com و شده و ثبت نام کنید.
  4. کانفیگ کردن دستگاه: پس از ساخت حساب در استخر مورد نظر، باید دستگاه را به یکی از سرورهای آن متصل نمایید تا هش ریت و درآمد شما قابل پیگیری باشد. در این مثال، اطلاعات زیر را در دستگاه خود وارد کنید:
    • URL: stratum+tcp://ltc.f2pool.com:8888. از پورت‌های 5200 و 3335 نیز می‌توانید به‌جای پورت 8888 استفاده نمایید.
    • Username: account_name.worker_name
    • Password: به انتخاب خودتان
    • account_name را همان نام اکانت خود در استخر F2Pool قرار دهید
    • Worker_name را هم به دلخواه خودتان می‌توانید انتخاب کنید، اما اگر چندین دستگاه دارید، بهتر است برای هر دستگاه یک نام مجزا انتخاب کنید تا کار پیگیری ماینینگ مربوط به هر کدام راحت‌تر باشد.
  5. وارد کردن آدرس کیف پول: برای واریز درآمد رمز ارزی، باید آدرس کیف پول لایت کوین خود را ارائه کنید. در قسمت “Account” استخر F2Pool یا هر استخر دیگری، آدرس کیف پول خود را در قسمت مربوطه وارد کنید. همانطور که گفتیم، اکنون با ماین کردن LTC می‌توانید رمز ارز DOGE را نیز به‌صورت رایگان دریافت کنید. برای این کار به وارد کردن آدرس دوج کوین خود نیز نیاز دارید.
  6. آغاز ماینینگ: اکنون دستگاه شما آماده استخراج LTC است. با مراجعه به صفحه داشبورد خود در F2Pool می‌توانید وضعیت دستگاه، درآمد، هش ریت و پرداختی‌های خود را بررسی نمایید.

سخن پایانی

اسکریپت یک الگوریتم هشینگ در مکانیزم اجماع اثبات کار است که در ابتدا با هدف غلبه بر تسلط اسیک ماینرها در صنعت ماینینگ و متمرکزسازی شبکه‌های رمز ارزی توسط این تجهیزات توسعه داده شد. الگوریتم Scrypt به‌جای قدرت محاسباتی بالا در مقایسه با SHA-246، به حافظه ذخیره‌سازی بالا نیاز دارد. علاوه بر این، محاسبات در این الگو کندتر است و مدت زمان بیشتری به طول می‌انجامد که به همین خاطر کار را برای اسیک ماینینگ در ابتدای امر دشوار می‌کرد. با این وجود، طی سال‌های اخیر اسیک ماینرهای سازگار با این الگوریتم توسعه داده شده‌ و استخراج از طریق CPU و GPU را ناکارآمد کرده‌اند.

تهیه شده در بیت 24