استخراج بیت کوین با کاغذ و قلم: روزانه معادل ۰.۶۷ هش
به نظر شما استخراج بیت کوین با کاغذ و قلم تا چه حد عملی است؟ به نظر میرسد که الگوریتم SHA-256 که برای استخراج بیت کوین مورد استفاده قرار میگیرد، بسیار ساده است و در واقع میتواند به صورت دستی انجام شود.
شکی نیست که استخراج بیت کوین به صورت دستی در مقایسه با استخراج سختافزاری بسیار کُند و کاملاً غیرعملی است. اما انجام دستی الگوریتم، روش خوبی برای درک دقیق عملکرد آن است.
نمونه ای از محاسبات دستی SHA-256 با قلم و کاغذ
فرآیند استخراج بیت کوین
فرآیند استخراج بیت کوین نقشی کلیدی در امنیت سیستم بیت کوین دارد. به این صورت که استخراجکنندگان یا ماینرهای بیت کوین، گروهی از تراکنشهای بیت کوین را در یک بلاک قرار میدهند، سپس عملیات رمزنگاری به نام هش کردن را هزاران بار انجام میدهند تا اینکه بالاخره یک ماینر مقدار هش که بسیار سخت یافت میشود را پیدا کند. در این مرحله، بلاک استخراج شده و به بخشی از بلاکچین بیت کوین تبدیل میشود. با عمل هش کردن به خودی خود هیچ کار مفیدی انجام نمیشود، اما از آنجا که یافتن یک بلاک موفق بسیار دشوار است، این جریان ثابت میکند که هیچ فردی این دادهها را در اختیار ندارد که سیستم بیت کوین را تصاحب کند.
در عمل رمزنگاری هش، دادههای ورودی یک بلاک گرفته شده و یک خروجی کوچکتر و غیرقابل پیش بینی ایجاد میکند. عملکرد هش طوری طراحی شده است که «هیچ میانبر» یا راه کوتاهتری برای گرفتن خروجی مورد نظر وجود ندارد، فقط باید همینطور به هش کردن بلاکها ادامه دهید تا اینکه بالاخره جواب آن را بیابید. در مورد بیت کوین، نحوه عملکرد هش، بر اساس تابعی به نام SHA-256 است. برای ایجاد امنیت بیشتر، بیت کوین تابع SHA-256 را دو بار تکرار میکند. این فرآیند با عنوان double-SHA-256 شناخته میشود.
در مورد بیت کوین، هش موفقیتآمیز، هشی است که با تعداد کافی عدد «صفر» شروع میشود. در واقع باید گفت که تعداد دقیق صفرهای اول هش مهم نیست. اگر بخواهیم این موضوع را دقیقتر بررسی کنیم، هش باید کمتر از یک مقدار خاص باشد که آن مقدار نیز به سطح سختی شبکه فعلی بیت کوین بستگی دارد. همانطور که به ندرت میتوان یک شماره تلفن یا پلاک ماشینی را پیدا کرد که به چندین صفر ختم شود، به ندرت نیز میتوان هشی را پیدا کرد که با چند صفر شروع شود. اما این موضوع در خصوص بیت کوین بسیار سختتر میباشد. در حال حاضر، یک هش موفقیتآمیز باید تقریباً با 17 صفر شروع شود. بنابراین، از تعداد 1020× 4/1 هش، تنها یکی از آنها موفقیتآمیز خواهد بود. به عبارت دیگر، یافتن یک هش موفق دشوارتر از یافتن یک دانه شن خاص، در میان تمام دانههای شن و ماسه روی زمین است.
در عکس زیر بلاکی از بلاکچین بیت کوین به همراه هش آن نمایش داده شده است. بر روی بایتهای زرد رنگ عملیات هش انجام میشود تا هش بلاک تولید شود. در مثال زیر، هش حاصل شده با تعداد صفر کافی شروع شده است، بنابراین استخراج موفقیتآمیز بوده است. با این حال، هش تقریباً همیشه به راحتی بدست نمیآید. در این مواقع، ماینر یا استخراجکننده مقدار یا عدد نانس (nonce) یا سایر اطلاعات بلاک را تغییر داده و دوباره امتحان میکند.
ساختار یک بلاک بیت کوین
بیت کوین از الگوریتم هش SHA-256 استفاده میکند
الگوریتم هش SHA-256 بلاکهای ورودی 512 بیتی (یعنی 64 بایت) را دریافت کرده، دادهها را به صورت رمزنگاری شده ترکیب کرده و یک خروجی 256 بیتی (32 بایت) ایجاد میکند. الگوریتم SHA-256 شامل یک دور یا چرخه نسبتاً ساده است که 64 بار تکرار شده است. نمودار زیر یک دور را نشان میدهد، که هشت ورودی 4 بایتی را از A تا H را میگیرد، چند عملیات روی آن انجام داده و مقادیر جدید A تا H را تولید میکند.
در دور اول الگوریتم SHA-256 هشت بلاک ورودی از A تا H آمده است. در مراحل بعدی پردازش انجام میشود و در نهایت بلاکهای جدید آمده است.
کادرهای آبی مقادیر را به روشهای غیرخطی با هم ترکیب میکنند که از لحاظ رمزنگاری، آنالیز آن دشوار است. از آنجا که این الگوریتم از چندین تابع مختلف استفاده میکند، کشف یک حمله به آن، بسیار دشوار است. (اگر بتوانید برای ایجاد هشهای موفق یک راه ریاضی کوتاهتر کشف کنید، میتوانید قلمرو استخراج بیت کوین را تحت سلطه خود در آورید.)
کادر اکثریت یا Ma، بر روی بیتهای B ،A و C اعمال میشود. برای هر جایگاه، اگر اکثریت بیتها صفر باشد، خروجی را صفر و در غیر این صورت خروجی 1 در نظر گرفته میشود. یعنی برای هر جایگاه در B ،A و C، به تعداد بیتهایی که 1 هستند نگاه میکنیم. اگر تعداد آنها صفر یا یک باشد، خروجی را صفر، و اگر تعداد آنها دو یا سه باشد، خروجی 1 قرار داده میشود.
کادر Σ0، بیتهای A را دوران میدهد تا سه نسخه دوران یافته تشکیل شوند و سپس آنها را با هم جمع میکند و آن را بر مبنای 2 میسنجد تا ببیند که آن عدد زوج است یا فرد. به عبارت دیگر، اگر تعداد بیتهای 1، فرد باشد، مجموع آن 1، و در غیر اینصورت، مجموع آن 0 است. بنابراین، آن سه مقدار دوران یافته A هستند که به هر کدام به ترتیب به میزان 2 بیت، 13 بیت و 22 بیت به سمت راست دوران داده میشوند.
کادر انتخاب یا Ch بیتهای خروجی را بر اساس مقدار ورودی E در نظر میگیرد. اگر بیت E عدد 1 باشد، بیت خروجی متناظر با بیت F خواهد بود. اگر بیت E، عدد 0 باشد، بیت خروجی متناظر با بیت G خواهد بود. به این ترتیب، بیتهای F و G بر اساس مقادیر E با هم ترکیب میشوند.
کادر بعدی Σ1 بیتهای E را دوران میدهد و با هم جمع میکند، مشابه همان کاری که Σ0 انجام میدهد. اما با این تفاوت که جابهجایی آنها روی 6، 11 و 25 بیت هستند.
کادرهای قرمز 32 بیت اضافه را انجام میدهند، و مقادیر جدیدی برای A و E تولید میکنند. ورودی Wt بر اساس دادههای ورودی است که پیش از این کمی پردازش شدهاند. (این دقیقا همان جایی است که الگوریتم از بلاک ورودی، تغذیه میکند.) ورودی Kt، برای هر دور ثابت است. لازم به ذکر است که منبع مقادیر ثابت استفاده شده در الگوریتم SHA-256 نیز جالب توجه است. آژانس امنیت جهانی (NSA) الگوریتم SHA-256 را طراحی کرده و آنها این مقادیر ثابت را انتخاب کردهاند، بنابراین از کجا میدانید که آنها مقادیر خاصی را انتخاب نکرده نباشند که بتوانند هش را بشکنند؟ برای جلوگیری از ایجاد سوءظن، مقادیر اولیه هش از ریشهی مربع 8 عدد نخست و مقادیر Kt از ریشهی مکعب 64 عدد نخست بدست میآید. از آنجا که این مقادیر ثابت از یک فرمول ساده حاصل میشوند، بنابراین میتوانید مطمئن باشید که NSA هیچ کار مشکوکی (حداقل با مقادیر ثابت) انجام نداده است.
همانطور که از نمودار بالا مشخص است، تنها A و E در یک دور تغییر میکنند و از سایر مقادیر بدون تغییر عبور میکنیم، فقط این که مقدار A قبلی به مقدار B جدید تبدیل میشود و مقدار B قدیمی به مقدار C جدید تبدیل میشود و همین طور ادامه دارد. با اینکه در هر دور SHA-256 تغییرات زیادی در دادهها ایجاد نمیشود، اما پس از 64 دور، دادههای ورودی کاملاً به حالت رمزنگاری شده در میآیند.
متأسفانه هش SHA-256 روی یک بلاک 512 بیتی کار میکند، اما ورودی اصلی بلاک بیت کوین از 512 بیت بیشتر است. بنابراین، برای رسیدن به نتیجه مورد نظر یک ست 64 دوری هش SHA-256 لازم است. سپس، بیت کوین از هش مجدد SHA-256 استفاده کرده و دومین عملیات SHA-256 انجام میشود. در کل، باید بگوییم که هش کردن یک بلاک بیت کوین دلخواه، مجموعاً به 192 دور میرسد. با این وجود یک راه میانبر وجود دارد. استخراج شامل هش کردن چندین باره یک بلاک است، که هربار فقط نانس تغییر میکند. بنابراین، در عملیات استخراج میتوان از نتیجه هش 512 بیت اول، مجدداً استفاده کرد و هش کردن بلاک بیت کوین معمولاً فقط به 128 دور نیاز دارد.
استخراج دستی
در ویدئو زیر مراحل هش کردن با استفاده از تابع SHA-256 طبقا توضیحات بالا، بر روی کاغذ نشان داده شده است. در دور اول هش کردن برای استخراج یک بلاک انجام شده است که تکمیل این دور حدودا 16 دقیقه و 45 ثانیه زمان برده است.
اگر بخواهیم ویدئو بالا را توضیح دهیم: این فرآیند بر روی یک کاغذ شطرنجی انجام شده است. بلاکها از A تا H در یک ردیف جداگانه نوشته شدهاند و مقادیر باینری (0 و 1) در زیر آنها قرار گرفته است. عمل اکثریتیابی (maj) در زیر ردیف C انجام شده است و جابهجاییها و Σ0 در بالای ردیف A نوشته شدهاند. به همین ترتیب، عملیات «انتخاب» (ch) در زیر G آمده است و جابهجاییها و Σ1 در بالای E قرار گرفته است. در سمت راست پایین صفحه، یک سری از اصطلاحات با توجه به مقادیر سه کادر اول قرمز با هم جمع شدهاند. در سمت راست بالای صفحه، از این مجموع برای بدست آوردن مقدار A جدید و در سمت راست وسط صفحه، از این جمع برای بدست آوردن مقدار E جدید استفاده شده است. تمامی این مراحل با نمودار و مباحثی که در بالا ارائه کردیم مطابقت دارد.
همچنین، یک دور از این محاسبات به صورت دستی برای یک هش دیگر آورده شده است، که این آخرین دور برای پایان دادن به هش کردن بلاک بیت کوین میباشد. در تصویر زیر، جواب هش با رنگ زرد مشخص شده است. صفرهای موجود در این هش نشان میدهد که آن هش موفقیتآمیز بوده است. توجه داشته باشید که صفرها در انتهای هش قرار دارند. دلیل این امر آن است که بیت کوین به طور نامناسبی تمام بایتهای تولید شده توسط SHA-256 را معکوس میکند.
آخرین دور دستی SHA-256 که روی کاغذ انجام شده است، نشان میدهد یک بلاک بیت کوین با موفقیت استخراج شده است.
این فرآیند برای سخت افزار استخراج به چه صورت است؟
اجرای هر مرحله از SHA-256 در منطق دیجیتال بسیار ساده است. (اگر در زمینه الکترونیک تحصیل کردهاید، احتمالاً میتوانید مدارها را از قبل تجسم کنید). به همین دلیل، تراشههای بهینه شده دستگاهای ASIC میتوانند الگوریتم SHA-256 را به صورت بسیار کارآمد روی سختافزار پیادهسازی کنند و صدها دور را به صورت موازی و همزمان بر روی تراشه قرار دهند. تصویر زیر یک تراشه استخراج را نشان میدهد که با سرعت 2-3 میلیارد هش در ثانیه کار میکند.
تراشه سیلیکونی که روی دستگاه ASIC شرکت Bitfury نصب شده است. این تراشه، بیت کوین را با سرعت 2-3 GH/s استخراج میکند.
در عوض، لایت کوین، دوج کوین و سایر آلت کوینها از اسکریپت الگوریتم هش استفاده میکنند که عمداً به گونهای طراحی شدهاند که اجرای آن روی سختافزار دشوار باشد. این سختافزار 1024 مقادیر هش مختلف را در حافظه خود ذخیره میکند و سپس آنها را به روشهای غیرقابل پیش بینی ترکیب میکند تا نتیجه نهایی را بدست آورد. در نتیجه، برای اسکریپت کردن و مداربندی، حافظه بیشتری نسبت به هشهای SHA-256 نیاز دارد. اسکریپت کردن (لایت کوین و غیره) هزاران برابر کندتر از الگوریتم SHA-256 بیت کوین عمل میکند. و تأثیر آن را میتوان با مشاهده سختافزار استخراج متوجه شد.
نتیجهگیری: استخراج بیت کوین به روش دستی
الگوریتم SHA-256 به شکل شگفتآوری ساده است، آنقدر ساده که میتوان آن را به صورت دستی نیز انجام داد. (الگوریتم منحنی بیضوی برای امضای تراکنشهای بیت کوین به صورت دستی بسیار سخت و طاقت فرسا است، زیرا عملیات ضرب عددهای صحیح 32 بایت بسیار زیاد است.) انجام یک دور محاسبات SHA-256 با دست، 16 دقیقه و 45 ثانیه طول میکشید. با این نرخ هش، یعنی 0.67 هش در روز، برای هش کردن یک بلاک کامل بیت کوین (128 دور)، 1.49 روز زمان لازم است، (هرچند که احتمالاً با تمرین بیشتر میتوان این فرآیند را سریعتر انجام داد). در مقایسه با سختافزارهای فعلی استخراج بیت کوین که محاسبات را با سرعت چندین تراهش بر ثانیه انجام میدهند، و این تقریباً یک کویینتیلیون برابر (یعنی یک با سی عدد صفر) سریعتر از هش کردن دستی است. بنابراین نتیجه میگیریم که استخراج دستی بیت کوین به هیچ وجه عملی نیست. همچنین، یکی دیگر از مشکلات استخراج دستی این است که فرآیند استخراج بلاکهای جدید تقریباً هر 10 دقیقه انجام میشود. بنابراین، حتی اگر به صورت دستی موفق به استخراج یک بلاک شویم، آن بلاک دیگر معتبر نخواهد بود و زمان زیادی از استخراج شدن آن بلاک گذشته است.
در نهایت موضوعی که ممکن است مطرح شود در مورد مصرف انرژی است. در جواب باید بگویم که در این روش فعالیت بدنی چندانی وجود ندارد، بنابراین، اگر متابولیسم بدن را در حالت استراحت 1500 کیلوکالری در روز فرض کنیم، مصرف انرژی هش کردن دستی، تقریباً به 10 مگاژول در هش میرسد. مصرف انرژی معمول برای سختافزار استخراج 1000 مگاهرتز در ژول است. بنابراین مصرف بهینه انرژی به روش دستی با ضریب 16^10 یا 10 کوادریلیون، کمتر از دستگاه است. سوال بعدی در مورد هزینه انرژی است. به عنوان مثال، دونات یک منبع غذایی ارزان است که قیمت آن 0.23 دلار و دارای 200 کیلو کالری انرژی دارد. از طرف دیگر، هزینه برق برای هر کیلووات ساعت 0.15 دلار است، که با 6.7 برابر ارزانتر است. بنابراین، هزینه انرژی در روش استخراج دستی برای هر هش حدود 67 کوادریلیون برابر سخت افزار استخراج است. واضح است که استخراج دستی امکانپذیر نیست و تنها برای درک بهتر این روش است.
ترجمه و جمعآوری: تیم معاملات بیت کوین صرافی ارز دیجیتال همتاپی
همنیکه با ویدئو توضیح داد مچکرم از شما.ولی خود استخراج یعنی چی؟