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

هش، بلاک و زنجیر در تکنولوژی بلاکچین دقیقا چی هستن؟ ماینرها دقیقا چه چیز رو پیدا می‌کنن؟

هش (Hash یا درهم‌سازی) چیه؟

تابع هش کریپتوگرافیک (cryptographic hash function) در واقع نوعی تبدیل یک طرفه هستش که یک رشته یا رشته های طولانی رو به عنوان ورودی دریافت می‌کنه و یک رشته‌ای با طول ثابت (ترکیبی از اعداد هگزادسیمال) به عنوان خروجی میده. مقدار هش نهایی، نمایشی از کل محتوای متن یا رشته (های) ورودی هستش و میشه اونو نوعی «اثر انگشت دیجیتالی» به حساب آورد. از توابع کریپتوگرافیک برای بررسی صحت پیام‌ها، امضای دیجیتال متون در طیف گسترده‌ای از کاربردها، مثل تصدیق اصالت و تصدیق صحت پیام استفاده میشه. یک تابع کرپتوگرافیک، یک رشته (یا پیام) رو دریافت می‌کنه و رشته‌ای با طول ثابت موسوم به خلاصه پیام (message digest) یا اثر انگشت دیجیتال (digital fingerprint) یا هش تولید می‌کنه.

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

  1. جواب قطعی داشته باشه. یعنی ورودی یکسان همیشه خروجی یکسانی داشته باشه.
  2. به سرعت برای هر پیام ورودی قابل محاسبه باشه
  3. پیدا کردن ورودی از طریق خروجی یا همون هش تقریبا نشدنی باشه (به جز این که تمامی ورودی های ممکن تست بشه)
  4. یه تغییر کوچیک توی ورودی منجر به تغییر زیاد در خروجی (هش) بشه
  5. پیدا کردن دو ورودی که هش یکسان تولید کنن تقریبا نشدنی باشه (تصادم هش)

حمله‌کننده‌ای (Attacker) که بتونه دو ورودی با هش یکسان پیدا بکنه قادر هستش از اون برای جایگزینی یک ورودی غیر اصیل به جای متن اصیل استفاده کنه. این در مورد بلاکچین یعنی هک شدن شبکه.

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

توابع هشینگ انواع و اقسام داره که معروفترینشون رو میتونم بگم MD5 و SHA هستن. منظور از انواع اینه که الگوریتم های مختلف این توابع، پیاده سازی های مختلفی دارن. برای مثال کلمه “سلام” در الگوریتم MD5 یک تابع 32 حرفی هستش به شکل زیر:

78903c575b0dda53c4a7644a2dd36d0e

اگر همین کلمه سلام رو به الگوریتم SHA-256 (که سکه بیت‌کوین هم بر پایه همین الگوریتم هست) بدیم یک خروجی 64 حرفی به مانند زیر تولید میکنه:

BDA1FA48345336618741FD2C4BC02809EB099C49A9B02FB5056401AB6D4DC3E6

هر بار که شما کلمه سلام رو به این توابع بدید خروجی دقیقا همین خواهد بود ولی اگر دقت کنید با داشتن این خروجی نمیشه فهمید که ورودی (سلام) چی بوده. همونطور که بالا هم گفتم طول خروجی برای ورودی های متفاوت ثابت هستش یعنی اگر به جای سلام یه صفحه متن یا کل متون کتاب‌های یک کتابخونه رو هم به الگوریتم بدیم خروجی باز هم 32 حرفی (یا 64 حرفی) خواهد بود. یه نکته دیگه این که شما در ورودی حتی یک کارکتر مثل یک نقطه رو تغییر بدید خروجی جدید کاملا متفاوت خواهد بود برای مثال “سلام.” به شکل زیر میشه که کاملا متفاوت با هش “سلام” در MD5 هستش:

90b7ac63558a529eb6c07acbbca3b1b1

بلاک چی هستش؟

برای انجام تراکنش توی بلاکچین (زنجیره بلاک‌ها) یه سری پارامتر ها کنار هم قرار میگیرن و ورودی های این الگوریتم هشینگ رو میسازن. این پارامتر ها مثل آدرس مبدا، آدرس مقصد، کلیدخ خصوصی، مبلغ، زمان و … هستش. وقتی هش یک تراکنش توسط ارسال کننده تراکنش محاسبه شد توی شبکه منتشر (broadcast) میشه و ماینر ها هر کدوم از این هش‌های تراکنش که دوست داشته باشن (تراکنش های با کارمزد بالاتر رو بیشتر دوست دارن) برمیدارن و توی بلاک قرار میدن. پس در اصل بلاک هم یک رشته هش هستش که ورودی‌هاش همونایی هستش که اشاره کردم.

بیشتر بخوانید: بلاکهای جنسیس، اورفان، آنکل در بلاکچین به چه معناست؟

یه بلاک ممکنه مقدار زیادی هش تراکنش توی خودش داشته باشه. ماینرها همه این هش تراکنش‌ها رو در کنار هم قرار میدن به علاوه هش بلاک قبلی به علاوه یک پارامتر تصادفی که بهش میگن نانس (nonce). و همه این پارامتر ها رو وارد الگوریتم هشینگ میکنن تا به جواب برسن و جوابی که بهش میرسن باید کمتر از یک عددی باشه که بهش سختی شبکه (Network Difficulty) میگن.

که این مقدار دیفیکالتی توسط شبکه همیشه به طور خودکار تنظیم میشه تا همیشه یک بلاک در مدت زمان مشخصی اتفاق بیوفته (جوابش پیدا بشه). مثلا وقتی ماینرها و بالطبع قدرت محاسباتی شبکه دو برابر بشه، دیفیکالتی شبکه هم دو برابر میشه که زمان بلاک ثابت باقی بمونه و نصف نشه. برای مثال زمان بلاک در مورد ارز بیت‌کوین همیشه حدود 10 دقیقه هستش یا در مورد ارز اتریوم حدودا 15 ثانیه.

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

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

برای مثال وقتی میگن یک کارت گرافیک 30 مگاهش در ثانیه در الگوریتم سکه اتریوم (تابع دگرهشیموتو) قدرت داره یعنی میتونه در یک ثانیه 30 میلیون بار! این ورودی‌ها رو با مقادیر نانس مختلف محاسبه کنه. و وقتی میگن یک انتماینر اس9، 14تراهش قدرت داره یعنی این ایسیک می‌تونه 14 تریلیون بار! در ثانیه ورودیهای مختلف (در اصل نانس‌های مختلف + ورودی های دیگه که اشاره شد) به الگوریتم SHA-256 بده و خروجی بگیره. در زمان انتشار این پست کل شبکه اتریوم چیزی حدود 220 تریلیون هش در ثانیه داره محاسبات انجام میده و شبکه بیت کوین چیزی نزدیک به 31 کوادریلیون هش در ثانیه (31 ExaHash/S) محاسبات انجام میده! (هر کوادریلیون مساوی با 1000 تریلیون است!)

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

حالا میون این حجم از هش فقط یک هش صحیح هستش! و فقط یک ماینر زودتر به جواب صحیح میرسه. اولین ماینری که به جواب صحیح رسید به بقیه ماینر ها اطلاع میده و مقدار نانس رو اعلام میکنه. بقیه ماینر ها هم این مقدار نانس رو توی همون تابع هشینگ قرار میدن و چک میکنن که آیا این ماینر داره درست میگه یا خیر. چون ورودی مشخص هستش برای چک کردن یک بار بیشتر این الگوریتم توسط ماینرهای دیگه اجرا نمیشه. و اگر تعدادی از ماینرها تایید کنن که جواب درست هست اون بلاک به اسم اون ماینر که به جواب رسیده ثبت میشه و جایزه اون بلاک (block reward) و کارمزدهای تراکنش‌های اون بلاک به اون ماینر میرسه. منظور از جایزه بلاک میزان سکه ای هستش که هر ارز برای تشویق کاربران به پیدا کردن بلاک لحاظ کردن. برای مثلا در شبکه بیت کوین در حال حاضر جایزه بلاک 12.5 بیت کوین هستش. (در ابتدا 50 بیت کوین بود و هر 4 سال یکبار این میزان نصف میشه). بعد از پیدا شدن هش بلاک تمامی فول نود های داخل شبکه لجر های خودشون رو آپدیت میکنن. اینجوری کل شبکه با هم همسان‌سازی (sync) میشه.

بیشتر بخوانید: ماینینگ چیه و دقیقا چیکار میکنه؟

 

مفهوم زنجیر در بلاکچین به چه معناست؟

همونطور که گفته شد یکی از ورودی های تابع هشینگ این ارزها، هش بلاک قبلی هستش. این قرار دادن هش بلاک قبلی در الگوریتم مفهوم زنجیر (chain) در بلاکچین هستش. یعنی بلاک جدید ما به بلاک قبلی ما به صورت زنجیروار متصل هستش، با دخیل کردن هش بلاک قبلی در محاسبات بلاک جدید.

 

نکته پایانی: در شرایط کنونی میشه گفت تقریبا ماینر مستقل نداریم. در واقع استخرهای استخراج (Mining Pools) ماینر به حساب میان. استخرها جواب بلاک رو پیدا می‌کنن و شما به عنوان بخش کوچکی از یک ابرکامپیوتر به نام استخر استخراج دارید فعالیت می‌کنید نه به عنوان ماینر واقعی. در واقعا استخر محاسباتی داده های نانس احتمالی رو بین ماینرهای متصل به خودش به عنوان Job پخش میکنه. و هر ماینر متصل به استخر بخش کوچکی از این داده های احتمالی رو در الگوریتم قرار میدن و محاسبه میکنن و به صورت share به استخر میفرستن. از میون این همه ماینر متصل به استخر در اصل در نهایت یک ماینر به جواب صحیح میرسه و باقی جواب ها، جواب صحیح بلاک نیستن. ولی چون همه ماینرهای متصل به استخر در رسیدن به این جواب و رد کردن جواب‌های اشتباه سهیم بودن به میزان سهمشون در این اشتراک جایزه اون بلاک رو دریافت می‌کنن.

برای مطالعه بیشتر در دلیل به وجود اومدن استخرهای استخراج “تاریخچه‌ای در مورد استخراج رمزارزها” رو مطالعه کنید.

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

ETH, ETC, UBQ:
0x2E32cC6301BFD64359484C4D015BE9f66Ed58ec2

XMR:
48dw6v23itw5ACYkv4PZ1pKvEuLVnYNEvQxga5uQgyuEdbzBxy6Xb2WX1mTvD1mECzGCo9vFvA7iCN72iYatuXuuCoxM1Ci

همچنین ببینید

آموزش ماینینگ با نرم‌افزار نایس‌هش، قسمت اول

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *