رمزگذاری

از ویکیپدیا، دانشنامه آزاد
پرش به ناوبری پرش به جستجو
رمزگذاری
عمومی
طراحانکالین پرسیوال
اولین بار منتشر شد2009
جزئیات رمز
اندازه های هضممتغیر
اندازه های بلوکمتغیر
دورمتغیر

در رمزنگاری ، scrypt (تلفظ "ess crypt" [1] ) یک تابع مشتق کلید مبتنی بر رمز عبور است که توسط کالین پرسیوال ، در اصل برای سرویس پشتیبان آنلاین Tarsnap ایجاد شده است . [2] این الگوریتم به طور خاص طراحی شده بود تا انجام حملات سخت افزاری سفارشی در مقیاس بزرگ را با نیاز به مقدار زیادی حافظه پرهزینه کند . در سال 2016، الگوریتم scrypt توسط IETF با نام RFC 7914 منتشر شد . یک نسخه ساده شده از scrypt به عنوان یک طرح اثبات کار توسط تعدادی از ارزهای دیجیتال استفاده می شود.، ابتدا توسط یک برنامه نویس ناشناس به نام ArtForz در Tenebrix پیاده سازی شد و بلافاصله پس از آن Fairbrix و Litecoin اجرا شد. [3]

مقدمه [ ویرایش ]

یک تابع مشتق کلید مبتنی بر رمز عبور (KDF مبتنی بر رمز عبور) عموماً به گونه‌ای طراحی شده است که محاسباتی فشرده باشد، به طوری که محاسبه آن زمان نسبتاً طولانی (مثلاً در حد چند صد میلی ثانیه) طول می‌کشد. کاربران قانونی فقط باید یک بار در هر عملیات عملکرد را انجام دهند (به عنوان مثال، احراز هویت)، و بنابراین زمان مورد نیاز ناچیز است. با این حال، یک حمله brute-force احتمالاً باید عملیات را میلیاردها بار انجام دهد، در این مرحله زمان مورد نیاز قابل توجه و در حالت ایده آل، بازدارنده می شود.

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

تابع scrypt طراحی شده است تا با افزایش تقاضای منابع الگوریتم مانع از چنین تلاش‌هایی شود. به طور خاص، این الگوریتم برای استفاده از مقدار زیادی حافظه در مقایسه با سایر KDF های مبتنی بر رمز عبور طراحی شده است، [4] ، اندازه و هزینه اجرای سخت افزار را بسیار گران تر می کند، و بنابراین مقدار موازی بودن مهاجم را محدود می کند. برای مقدار معینی از منابع مالی

نمای کلی [ ویرایش ]

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

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

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

الگوریتم [ ویرایش ]

ورودی های  رمزگذاری
    تابع : این الگوریتم شامل پارامترهای زیر است: 
      عبارت عبور: رشته
       بایت     از کاراکترهایی که باید هش شوند Salt :     رشته 
      بایتی از کاراکترهای تصادفی که هش را برای محافظت در برابر حملات جدول رنگین کمان تغییر می دهد CostFactor (N): پارامتر هزینه CPU/حافظه عدد صحیح   - باید توان 2 باشد (مثلاً 1024) 
      BlockSizeFactor (r): پارامتر اندازه بلوک صحیح   ، که اندازه و عملکرد خواندن حافظه متوالی را به خوبی تنظیم می کند. (8 معمولا استفاده می شود) 
      ParallelizationFactor (p): پارامتر موازی سازی عدد صحیح   . (1 .. 2 32-1 * hLen / MFlen) 
      DesiredKeyLen (dkLen): صحیح   مورد نظر طول کلید در بایت (طول خروجی در نظر گرفته شده در بایت از کلید مشتق شده؛ یک عدد صحیح مثبت و رضایت dkLen ≤ (2 32 - 1). * hLen) 
      hLen: صحیح   طول در اکتت تابع هش (32 برای SHA256). 
      MFlen: عدد صحیح طول بر
    حسب   هشت عدد خروجی تابع اختلاط ( SMix زیر). به صورت r*128 در RFC7914 تعریف شده است. خروجی: 
      DerivedKey:     آرایه بایت بایت، DesiredKeyLen طولانی

   مرحله 1. تولید نمک گران قیمت 
   blockSize ← 128*BlockSizeFactor   // طول (بر حسب بایت) خروجی تابع اختلاط SMix (به عنوان مثال 128*8 = 1024 بایت)

   استفاده از PBKDF2 برای تولید اولیه بایت 128 * BlockSizeFactor * ص داده ها (مانند 128 * 8 * 3 = 3072 بایت) 
   درمان در نتیجه به عنوان یک آرایه از ص عناصر، هر ورودی بودن blocksize بایت (به عنوان مثال 3 عناصر، هر 1024 بایت) 
   [B 0 ...B p−1 ] ← PBKDF2 HMAC-SHA256 ( عبارت عبور , Salt , 1, blockSize*ParallelizationFactor)

   هر بلوک را در زمان B Costfactor با استفاده از تابع ROMix مخلوط کنید (هر بلوک را می توان به صورت موازی مخلوط کرد) 
   برای i ← 0 تا p-1 do 
      B i ← ROMix(B i , CostFactor)

   همه عناصر B نمک "گران قیمت" جدید ما گران است نمک 
   ← B 0 ∥B 1 ∥B 2 ∥ ... ∥B p-1   // که ∥ الحاق
 
   مرحله 2. از PBKDF2 برای تولید تعداد دلخواه بایت استفاده کنید، اما با استفاده از نمک گران قیمت،
    PBKDF2 HMAC-SHA256 بازگشتی را تولید کردیم (Passphrase, costSalt, 1, DesiredKeyLen).

جایی که نماد PBKDF2 (P، S، c، dkLen) در RFC 2898 تعریف شده است، جایی که c یک تعداد تکرار است.

این نماد توسط RFC 7914 برای تعیین استفاده از PBKDF2 با c = 1 استفاده می شود.

تابع ROMix (بلاک، تکرار)

   درست تکرارها نسخه از X
   X ← بلوک
   برای i ← 0 تا تکرار-1 انجام 
      V i ← X
      X ← BlockMix (X)

   برای i ← 0 تا Iterations−1 do
      j ← Integerify(X) mod Iterations 
      X ← BlockMix (X xor V j )

   X را
 برگردان

جایی که RFC 7914 Integerify(X)نتیجه تفسیر 64 بایت آخر X را به عنوان یک عدد صحیح اندکی A 1 تعریف می کند .

از آنجا که تکرارها برابر 2 به توان n، تنها برای اولین بار سقف (N / 8) بایت در میان آخرین 64 بایت X، تفسیر به عنوان یک مدل Little Endian عدد صحیح 2 ، در واقع به محاسبه مورد نیاز . Integerify(X) mod Iterations = A1 mod Iterations = A2 mod Iterations

تابع BlockMix (B):

    بلوک B r تکه های 128 بایتی است (که معادل 2r تکه های 64 بایتی است)
    r ← طول (B) / 128;

    B را به‌عنوان آرایه‌ای از 2r تکه‌های 64 بایتی در نظر بگیرید 
    [B 0 ...B 2r-1 ] ← B

    X ← B 2r−1 
    برای i ← 0 تا 2r−1 انجام 
        X ← Salsa20/8 (X xor B i )   // هش Salsa20/8 از 64 بایت تا 64 بایت 
        Y i ← X

    بازگشت ← Y 0 ∥Y 2 ∥...∥Y 2r−2 ∥ Y 1 ∥Y 3 ∥...∥Y 2r−1

جایی که Salsa20/8 نسخه 8 دوری Salsa20 است .

استفاده از ارزهای دیجیتال [ ویرایش ]

Scrypt در بسیاری از ارزهای دیجیتال به عنوان یک الگوریتم اثبات کار استفاده می شود. اولین بار برای Tenebrix (منتشر شد در سپتامبر 2011) پیاده سازی شد و به عنوان پایه ای برای Litecoin و Dogecoin عمل کرد که الگوریتم رمزگذاری آن را نیز به کار گرفتند. [5] [6] استخراج ارزهای رمزنگاری شده که از scrypt استفاده می‌کنند، اغلب بر روی واحدهای پردازش گرافیکی ( GPU ) انجام می‌شود، زیرا GPUها تمایل دارند به طور قابل‌توجهی قدرت پردازش بیشتری (برای برخی الگوریتم‌ها) در مقایسه با CPU داشته باشند. [7] این به دلیل افزایش قیمت این ارزها در ماه های نوامبر و دسامبر 2013 به کمبود پردازنده های گرافیکی پیشرفته منجر شد. [8]

از ماه مه 2014، سخت افزار تخصصی استخراج ASIC برای ارزهای رمزنگاری شده مبتنی بر رمزگذاری در دسترس است. [ نیازمند منبع ]

همچنین ببینید [ ویرایش ]

منابع [ ویرایش ]

  1. «کالین پرسیوال» . توییتر .
  2. ^ "صفحه رمزگذاری در وب سایت تارسنپ" . بازبینی شده در 21 ژانویه 2014 .
  3. ^ الک لیو. فراتر از بیت کوین: راهنمای امیدوارکننده ترین ارزهای دیجیتال .
  4. ^ اشتقاق کلید قویتر از طریق توابع متوالی حافظه سخت ، کالین پرسیوال
  5. آندریاس ام آنتونوپولوس (3 دسامبر 2014). تسلط بر بیت کوین: باز کردن قفل ارزهای دیجیتال دیجیتال . رسانه اوریلی ص 221، 223. شابک 9781491902646.
  6. «تاریخچه ارز دیجیتال» . بایگانی شده از نسخه اصلی در 11 ژوئن 2016 . بازبینی شده در 27 ژوئن 2014 .
  7. رومن گوئلفی-گیبز. پیکربندی های استخراج رمزگذاری لایت کوین برای Radeon 7950 . خدمات دیجیتال آمازون
  8. جوئل هروسکا (10 دسامبر 2013). افزایش شدید استخراج لایت کوین منجر به کمبود کارت گرافیک می شود . ExtremeTech.

پیوندهای خارجی [ ویرایش ]