اسکریپت (رمزنگاری)

در رمزنگاری، اسکریپت (به انگلیسی: scrypt) یک تابع مشتق کلید (Key derivation function) مبتنی بر رمز عبور است که در اصل توسط کالین پرسیوال (Colin Percival)، برای سرویس پشتیبان آنلاین Tarsnap ایجاد شده‌است. این الگوریتم به‌طور خاص برای هزینه بر ساختن انجام حملات سخت‌افزاری سفارشی در مقیاس بزرگ، با منوط کردن آن به نیاز به مقدار زیادی حافظه طراحی شده‌است. در سال ۲۰۱۶، الگوریتم پنهان توسط کارگروه مهندسی اینترنت (IETF) به عنوان RFC 7914 منتشر شد. یک نسخه ساده از اسکریپت که به عنوان یک طرح اثبات کار توسط تعدادی از رمزارز‌ها استفاده شده بود، ابتدا توسط یک برنامه‌نویس ناشناس به نام ArtForz در Tenebrix و پس از آن توسط Fairbrix و لایت‌کوین (Litecoin) پیاده‌سازی شد.

معرفی

یک تابع مشتق کلید (KDF) مبتنی بر رمز عبور به‌طور کلی برای محاسبات فشرده طراحی شده‌است، به طوری که محاسبه برای مدت زمان نسبتاً طولانی به طول می‌انجامد (تقریباً چند صد میلی ثانیه). کاربران مجاز فقط باید یک بار در هر عملیات، تابع را اجرا کنند (به عنوان مثال، احراز هویت)، و بنابراین زمان مورد نیاز ناچیز است. با این حال، یک حمله جستجوی فراگیر (Brute-force attack) احتمالاً نیاز به میلیاردها بار انجام عملیات دارد، در این صورت زمان مهم و قابل توجه می‌شود.
KDFهای مبتنی بر رمز عبور قدیمی (مانند PBKDF2 متعلق به RSA Laboratories) منابع نسبتاً کمی نیاز دارند، به این معنی که آنها سخت‌افزار دقیق یا حافظه بسیار زیادی برای انجام کار نیاز ندارند؛ بنابراین، آنها به راحتی می‌توانند در سخت‌افزار (به عنوان مثال در یک ASIC یا حتی یک FPGA) اجرا شوند. این به مهاجم اجازه می‌دهد تا با منابع کافی و در مقیاس بزرگ، یک حمله موازی بزرگ را با پیاده‌سازی صدها یا حتی هزاران الگوریتم در سخت‌افزار و جستجو در زیر مجموعه‌های مختلف از فضای کلیدی راه اندازی کند. این، زمان لازم برای تکمیل حمله جستجوی فراگیر را بر اساس تعدادی از پیاده‌سازی‌های موجود تقسیم می‌کند و احتمالاً آن را به یک فریم زمان معقول تبدیل می‌کند.
تابع اسکریپت طراحی شده‌است تا از چنین تلاش‌هایی با افزایش درخواست منابع از الگوریتم جلوگیری کند. به‌طور خاص، این الگوریتم طراحی شده‌است که از مقدار زیادی حافظه در مقایسه با KDFهای مبتنی بر رمز عبور دیگر استفاده کند، که اندازه و هزینه اجرای سخت‌افزاری را بسیار گران‌تر می‌کند و بنابراین مقدار موازی را که مهاجم می‌تواند برای یک داده استفاده کند محدود می‌کند.

بررسی اجمالی

الزامات حافظه بزرگ scrypt از یک بردار بزرگ رشته‌های باینری شبه تصادفی حاصل می‌شود که به عنوان بخشی از الگوریتم تولید می‌شوند. هنگامی که بردار تولید می‌شود، عناصر آن در یک دستور شبه تصادفی دیده می‌شوند و برای تولید کلید مشتق شده ترکیب می‌شوند. یک پیاده‌سازی ساده نیاز به نگه داشتن کل بردار در حافظه را دارد تا بتوان آن را در صورت نیاز مشاهده کرد.
از آنجا که عناصر بردار به صورت الگوریتمی تولید می‌شوند، هر عنصر می‌تواند حین اجرا در صورت نیاز تولید شود، فقط یک عنصر در یک زمان در حافظه ذخیره می‌شود و در نتیجه نیازهای حافظه به‌طور قابل توجهی قطع می‌شود. با این حال به نظر می‌آید تولید هر عنصر به صورت محاسباتی گران باشد، و انتظار می‌رود که عناصر بارها در طول اجرای تابع قابل دسترسی شوند. به این ترتیب برای خلاص شدن از نیاز زیاد به حافظه، سرعت به میزان قابل توجهی کاهش می‌یابد.
این نوع تقارن زمان حافظه اغلب در الگوریتم‌های کامپیوتری وجود دارد: سرعت می‌تواند در ازای استفاده از حافظه بیشتر افزایش یابد، یا نیازهای حافظه در ازای اجرای عملیات‌های بیشتر و طولانی‌تر شدن انجام عملیات کاهش یابد. ایده پشت اسکریپت این است که عمداً این هزینه را در هر دو جهت کاهش می‌دهد؛ بنابراین مهاجم می‌تواند از یک پیاده‌سازی استفاده کند که به منابع زیادی نیاز ندارد (و بنابراین می‌تواند با هزینه محدود، به‌طور گسترده‌ای موازی باشد) اما بسیار آهسته اجرا شود یا از یک پیاده‌سازی سریع تر که به حافظه بسیار زیادی نیاز دارد استفاده کند و بنابراین موازی سازی با هزینه بیشتری انجام می‌شود.

کاربردهای رمزارز

Scrypt در بسیاری از رمزگشایی‌ها به عنوان یک الگوریتم اثبات کار استفاده می‌شود. این اولین بار برای Tenebrix پیاده‌سازی شد (منتشر شده در سپتامبر ۲۰۱۱) و به عنوان پایه برای لایت‌کوین (Litecoin) و دوژکوین (Dogecoin) به خدمت گرفته شد، که همچنین از الگوریتم اسکریپتش اقتباس شد. استخراج رمزارزهایی که از اسکریپت استفاده می‌کنند اغلب بر روی واحد پردازش گرافیکی (GPU) انجام می‌شود، زیرا واحدهای پردازش گرافیکی نسبت به پردازنده (CPU) توانایی پردازش قابل توجهی دارند (برای برخی از الگوریتم‌ها). افزایش قیمت این ارزها در ماه‌های نوامبر و دسامبر ۲۰۱۳ منجر به کمبود GPUهای قدرتمند شد. از ماه مه سال ۲۰۱۴، سخت‌افزار ماینینگ تخصصی مدارهای مجتمع با کاربرد خاص (ASIC) برای رمزارزهای مبتنی بر اسکریپت موجود شد. از سال ۲۰۱۶، InnoSilicon ادعا کرد که فناوری ۱۴ نانومتری با کارایی ۱٫۵ میکروژول بر هش (µJ/hash) دارد.