تقابل دو الگوریتم در گواه اثبات کار؛ نگاهی کلی به SHA-256 و Scrypt !
در مقالات قبلی نگاه کاملی داشتیم به تعریف و نحوه کار گواه اثبات کار (PoW) که در واقع یک نوع روش اجماع است. بسیاری از ارزهای رمزنگاری شده مانند بیتکوین، لایتکوین، بیتکوین کش و … از این روش برای اجماع استفاده میکنند. اما موضوعی که امروز قصد توضیح آن در این مقاله را داریم مربوط به دو مورد از الگوریتمهای قرار گرفته شده در این سیستم است. SHA-256 و Scrypt
SHA-256 و Scrypt دو الگوریتم اجماع هستند که همیشه در تمام بحث های ارزهای مزنگاری شده گنجانده شده اند و توسط ماینرهای این ارزها برای تایید بلاکهای شامل تراکنش استفاده میشود.
SHA-256؛ پر زحمت اما ایمن!
SHA-256 جزئی از خانواده SHA-2 است که در تمام مقالات به عنوان امنترین روش برای محافظت از اطلاعات از آن یاد شده. عملکرد کلی این تابع اینگونه است که یک رشته از کاراکتر که همان پیام ما برای انتقال است را دریافت میکند، روی آن محاسبات ریاضی انجام میدهد و در انتها یک رشته کاراکتر ۲۵۶ بیتی متشکل از عدد و حرف، که به آن هش (Hash) میگویند به عنوان خروجی ثبت میکند. نکته جالب این تابع این است که بدون درنظر گرفتن طول رشتهی ورودی، طول رشتهی خروجی همیشه مقدار ثابت 256 بیت است و نکتهی دوم این که این تابع به صورت یکطرفه کار میکند. به این معنی که اگر هش را به عنوان ورودی تابع بدهیم، نباید انتظار داشته باشیم رشتهی اصلی ورودی را دریافت کنیم.
به عنوان مثال
ورودی تابع: Hello
خروجی تابع یا همان هش: 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
اگر حرف H را به h تغییر دهیم هش حاصل متفاوت از حالت قبل خواهد بود
ورودی تابع: hello
خروجی تابع یا همان هش: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
این ویژگی باعث شده تا خرابکارنی که قصد تغییر در پیام ما را داردند نتوانند به هدف خود بررسند. چرا که با اعمال کوچکترین تغییر در پیام اصلی هش آن تغییر میکند و گیرندهی پیام از آنجا که دو هش متفاوت از هم دارد، متوجه چنین خرابکاریایی میشود.
وظیفهی ماینرها برای ماین کردن کوینهایی که از این الگوریتم استفاده میکنند این است که عددی را حدس بزنند (نانس nonce) که با قرار دادن آن در هش بلاک، به شرط تایید آن برسند. برای مثال “عدد حدس زده شده باید ۵ صفر داشته باشد.” هر ماینری که زودتر این عدد را پیدا کند، پاداش دریافت میکند و بلاک به بلاکچین اضافه میشود.
Scrypt؛ کارکرد همزمان cpu و حافظه!
Scrypt تابعی دیگر از سیستم اجماع PoW ابرای رمزنگاری است که اساس کار آن “تولید کلید بر اساس رمز عبور است!!”
بگذارید نحوهی کار Scrypt را اینگونه توضیح دهیم: وقتی کاربری برای خود رمزعبور (password) انتخاب میکند، رمز او از طریق یکی از توابع رمزنگاری تولید کنندهی هش مانند SHA-256 هش میشود و آن هش در پایگاه داده ذخیره میشود. مزیت این کار این است که چون هش غیر قابل بازگشت است، امکان تشخص رمز توسط خرابکاران وجود ندارد.
حال اگر شما قصد ورود به وبسایت داشته باشید؛ رمزی که وارد کیکنید هش میشود و با هشی که در پایگاه داده ذخیره شده مقایسه میشود. اگر مطابق یکدیگر بودند شما میتوانید با موفقیت وارد سایت شوید.
اما این روش نمیتواند مانع از لو رفتن رمز شما شود. چرا که اگر شخص خرابکار رمزهای زیادی را امتحان کند، احتمال اینکه در نهایت موفق به پیدا کردن رمز شما خواهد شد. به این نوع از حمله Brute Force Attack گویند. حملهی دیگری به نام Rainbow Table Attack وجود در که در آن یک جدول آماده وجود دارد از رمزها و هش هریک.
برای جلوگیری از رخ دادن Brute Force Attack ، از Salt استفاده میکنیم. Salt رشتهایی از کاراکترها است که رمز ترکیب شده و وارد تابع هش میشود. با این حال همچنان Rainbow Table Attack ما را تهدید میکند.
روشی دیگر این ست که تابع، رمز به همراه Salt و تعداد تکرار را دریافت میکند، به تعداد تکرار الگوریتم را اجرا میکند و یک کلید تولید میکند. این فرآیند برای کاربر زمان بر نیست اما برای تولید Rainbow Table که شامل چندین رمز است بسیار زمانبر است. با این حال با استفاده از سیستم های قوی و همین طور به کار گیری روش پردازش موازی میتواند تهدیدی محسوب شود.
بنابراین نوع دیگری از رمزنگاری معرفی میشود که به Scrypt شهرت یافته و توسط لایتکوین استفاده میشود. به نام (Password Based Key Derivation Function(PBKDF. این تابع، رمز به همراه Salt ، پارامتر هزینهی CPU ، پارامتر هزینه حافظه، پارامتر شخصی سازی کردن و طول خروجی پیشبینی شده را دریافت میکند و یک کلید تولید میکند. تفاوت این روش با روش قبل این است که امکان استفاده از این روش برای هر CPU و حافظه وجود دارد.
ماین کردن کوینهایی که از این الگوریتم برای اجماع استفاده میکنند مانند الگوریتم SHA-256 است و ماینرها باید عدد مناسب را حدس بزنند.
نتیجه گیری
برای اجرای SHA-256 فقط به قدرت محاسباتی احتیاج دارید. از طرف دیگر Scrypt نه تنها از قدرت محاسباتی بلکه از حافظه نیز استفاده می کند. جدول زیر مقایسه ای در رابطه با این دو الگوریتم است:
الگوریتم : | SHA-256 | Scrypt |
ارز استفاده کننده | بیتکوین | لایتکوین |
میانگین زمان تولید یک بلاک | ۱۰ دقیقه | ۲.۵ دقیقه |
واحد نرخ هش | GH/s | MH/s |
امکانات لازم | CPU و GPU قوی | CPU معمولی |
مصرف برق | بسیار زیاد | معمولی |