هش کردن یا هشینگ چیست؟ (Hashing) – راهنمای گام به گام

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

2 1,254

به چه کار هش کردن (هشینگ) می‌گویند؟

  1. تولید یک مقدار یا مقادیر از یک رشته نوشته با استفاده از توابع ریاضی را هشینگ یا هش کردن می‌گویند.
  2. هشینگ یکی از راهکارهای برقراری امنیت در پروسه پیام‌رسانی است، به ویژه هنگامی که قصد داشته باشیم پیام خود را فقط به یک شخصِ به خصوص ارسال کنیم. هش با استفاده از یک فرمول تولید می‌شود و به این وسیله امنیت عملیات انتقال در برابر خرابکاران و هکرها تضمین می‌شود.

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

هشینگ یا هش کردن چیست؟

 

به زبان ساده، هش کردن یا هشینگ (Hashing) به معنای دریافت یک رشته با یک طول دلخواه و تبدیل آن به یک خروجی با طول ثابت است. در زمینه رمز ارزهایی همچون بیت کوین، تراکنش‌ها به عنوان ورودی دریافت می‌شوند و از طریق یک الگوریتم هشینگ (بیت کوین از الگوریتم SHA-256 استفاده می‌کند.) به یک خروجی با طول ثابت تبدیل می‌شوند.

خب بیایید به نحوه کار پروسه هشینگ نگاهی بیندازیم. نحوه کار را با یک مثال توضیح می‌دهیم. در این مثال از الگوریتم SHA-256

(Secure Hashing Algorithm 256)  استفاده می‌کنیم.

هشینگ یا هش کردن چیست؟

همانطور که می‌بینید، در هنگام استفاده از SHA-256 ، بزرگی و کوچکی ورودی شما اهمیتی ندارد و در هر صورت خروجی شما یک طول ثابت ۲۵۶ بیتی خواهد داشت. این الگوریتم در هنگامی که شما با مقادیر عظیمی از داده‌ها و تراکنش‌ها سر و کار دارید بسیار مناسب خواهد بود، چرا که به جای به خاطر سپردن داده‌های ورودی که می‌توانند بسیار زیاد و طولانی باشند، فقط هش تولید شده از آن را به خاطر سپرده و آن را انتقال می‌دهید. قبل از آنکه بیشتر به موضوع هشینگ بپردازیم، ابتدا لازم است که با خصوصیات گوناگون توابع هشینگ و چگونگی کاربرد آن در بلاک چین آشنا شوید.

توابع هش مورد استفاده در رمزنگاری

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

ویژگی ۱: قطعی بودن (Deterministic)

این ویژگی به آن معناست که مهم نیست که شما چند بار یک ورودی دلخواه را وارد تابع هش می‌کنید، در هر بار شما باید یک نتیجه یکسان دریافت کنید. این موضوع بسیار حیاتی است، چرا که اگر در هر بار یک هش متفاوت دریافت کنید، ردگیری ورودی غیرممکن خواهد شد.

ویژگی ۲: محاسبه سریع

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

ویژگی ۳: نتوان هش به دست آمده را دوباره تبدیل به ورودی کرد (غیرقابل بازگشت بودن)

تابع هش ما باید به گونه‌ای باشد که اگر ما ورودی خود را A در نظر بگیریم و هش خروجی را (H(A در نظر بگیریم، رسیدن به A از روی (H(A غیرعملی باشد. در اینجا عمدا از کلمه غیرعملی به جای کلمه غیرممکن استفاده کرده‌ایم. همانطور که می‌دانید رسیدن به ورودی یک تابع هش از روی جواب آن غیرممکن نیست. بیاید با یک مثال این موضوع را بررسی کنیم.

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

اما این راهکار فقط هنگامی جواب می‌دهد که با حجم کمی از داده‌ها سر و کار داشته باشیم. هنگامی که حجم داده‌ها عظیم باشد، چه اتفاقی می‌افتد؟ فرض کنید که با یک هش ۱۲۸ بیتی سر و کار دارید. تنها روشی که شما به وسیله آن می‌توانید ورودی اولیه را پیدا کنید، استفاده از متد brute-force است. متد brute-force اساسا به این معناست که شما یک ورودی تصادفی برمی‌دارید و پس از هشینگ (هش کردن)، خروجی را با هش مورد نظر خود مقایسه می‌کنید و این کار را تا زمان رسیدن به یک تطابق ادامه می‌دهید.

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

  • بهترین سناریو: در اولین تلاش خود جوابتان را پیدا می‌کنید. احتمالا در این صورت خوش‌شانس‌ترین فرد روی زمین هستید، چرا که احتمال رخ دادن چنین اتفاقی بسیار ناچیز است.
  • بدترین سناریو: شما جواب خود را پس از ۱-۱۲۸^۲  دفعه تلاش به دسته می‌آورید. اساسا به این معناست که شما کل داده‌های موجود را تست کرده‌اید.
  • سناریوی میانه: در میانه احتمالات ممکن، یعنی پس از ۱۲۸/۲^۲ = ۱۲۷^۲ دفعه به جواب خود می‌رسید. این عدد برابر با  ۱.۷ * ۳۸^۱۰  است و به عبارت دیگر عدد بسیار بزرگی است.

پس در نتیجه شما با متد brute force قادر خواهید بود تا ورودی را از روی هش پیدا کنید، اما اینکار زمان بسیار زیادی لازم دارد و عملا انجام آن بی فایده است.

ویژگی ۴ : تغییر کوچکی در ورودی، هش را تغییر می‌دهد.

حتی اگر تغییر کوچکی در ورودی خود بدهید، تغییرات هش خروجی بسیار زیاد خواهد بود. بیاید این مساله را با استفاده از SHA-256 تست کنیم :

هشینگ یا هش کردن چیست؟

همانطور که می‌بینید، فقط حرف اول جمله را کوچک کرده‌ایم، اما تغییرات اعمال شده در هش نهایی بسیار زیاد است. این یک ویژگی حیاتی است، چرا که این ویژگی منتهی به یکی از مهم‌ترین ویژگی‌های بلاک چین، یعنی غیر قابل دستکاری بودن آن می‌شود.

ویژگی ۵ : مقاومت در برابر تطابق هش‌ها

دو ورودی متفاوت A و B ، با هش‌های (H(A و (H(B را در نظر بگیرید، (H(A و (H(B نمی‌توانند باهم برابر باشند. به عبارت کلی‌تر، در اکثر اوقات هر ورودی ، هش منحصر به فرد خود را دارد. چرا گفتیم اکثر اوقات؟ بیاید در مورد یک موضوع جالب به نام پارادوکس روز تولد (The Birthday Paradox) صحبت کنیم تا دلیل این موضوع را متوجه شوید.

پارادوکس روز تولد چیست؟

اگر شما در خیابان تصادفا با یک غریبه برخورد کنید، احتمال آنکه هر دوی شما در یک روز به دنیا آمده باشید، بسیار کم است. در حقیقت احتمال این اتفاق ۱/۳۶۵ یا ۰.۲۷% است. به عبارت دیگر احتمال واقعا پایینی است.

با این حال می‌توان گفت که اگر شما ۲۰ الی ۳۰ نفر را در یک اتاق دور هم جمع کنید، احتمال آنکه دو شخص تاریخ تولد خود را اعلام کنند و دقیقا در یک روز به دنیا آمده باشند، به صورت نجومی بالا می‌رود. در حقیقت احتمال این موضوع که ۲ شخص تاریخ تولد خود را اعلام کنند و هر دو در یک تاریخ به دنیا آمده باشند، پنجاه پنجاه می‌شود.

 

هشینگ (Hashing) یا هش کردن چیست؟ (راهنمای گام به گام)
هشینگ (Hashing) یا هش کردن چیست؟ (راهنمای گام به گام)

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

حال اگر این نظریه را برای روز تولد اعمال کنیم، شما ۳۶۵ احتمال گوناگون برای روزهای تولد دارید، خب حالا نیاز دارید که جذر ۳۶۵ را بگیرید که برابر با ۲۳ می‌شود، بنابراین اگر ۲۳ فرد را به صورت تصادفی انتخاب کنید، احتمال آنکه دو شخص در یک روز به دنیا آمده باشند، پنجاه پنجاه می‌شود.

استفاده این قضیه در هشینگ چیست؟

فرض کنید یک هش ۱۲۸ بیتی دارید که برای آن ۱۲۸^۲ احتمال وجود دارد. با در نظر گرفتن پارادوکس روز تولد، برای آنکه احتمال مساله ۵۰ درصد شود، باید به تعداد جذر این مقدار را حساب کنید که برابر با ۶۴^۲ می‌شود.

همانطور که مشاهده کردید، احتمال آنکه مقاومت در برابر تطابق شکسته شود، خیلی راحت‌تر از شکستن مقاومت preimage است. هیچ تابع هشی وجود ندارد که احتمال تطابق در آن وجود نداشته باشد، اما عموما پیدا کردن یک تطابق در آن‌ها بسیار به طول می‌انجامد. بنابراین اگر شما از یک تابع مانند SHA-256 استفاده کنید، می‌توانید فرض کنید که اگر (H(A) = H(B آنگاه A = B.

ویژگی ۶ : معمای خوبی باشد

این ویژگی بسیار جذاب است و کاربرد و اثر آن در رمز ارزها بسیار زیاد است ( این موضوع را بعدا در قسمت استخراج و معماهای رمزنگاری توضیح خواهیم داد.) ابتدا اجازه دهید کلیات این ویژگی را توضیح دهیم، بعد از آن هر یک از جزییات را به ترتیب توضیح خواهیم داد.

برای هر خروجی “Y” ، اگر k از یک توزیع با min-entropyبالا انتخاب شده باشد، پیدا کردن ورودی x در فرمول روبرو غیرعملی است:

H(k|x) = Y

به احتمال زیاد شما متوجه نوشته بالا نشدید، اما نگران نباشید، در ادامه بیشتر توضیح خواهیم داد.

معنای min-entropyبالا چیست؟

به معنای توزیعی است که در آن مقدار انتخابی در یک بازه بسیار بزرگ توزیع شده است و به همین دلیل احتمال انتخاب تصادفی این مقدار بسیار ناچیز است. اگر به شما بگویند که یک عدد بین ۱ تا ۵ انتخاب کنید، این توزیع min-entropy پایینی دارد. با این حال اگر به شما گفته شود که یک عدد میان ۱ تا یک گازیلیون انتخاب کنید، این توزیع min-entropy بالایی دارد.

 k|xبه چه معناست؟

علامت “|” نشان‌دهنده به هم پیوستن یا الحاق است. الحاق به معنای اضافه کردن دو رشته به یکدیگر است. به طور مثال من اگر بخواهم آسمان و آبی را به یکدیگر الحاق دهم، نتیجه آن آسمان آبی خواهد بود.

خب حالا بیاید تعریف قبلی را دوباره مرور کنیم.

فرض کنید شما یک خروجی مانند “Y” دارید. اگر شما یک مقدار تصادفی مانند k از یک دامنه توزیعی وسیع انتخاب کنید، پیدا کردن مقداری همچون x که از الحاقش با k مقدار خروجی هش شده Y را تولید کند، غیرعملی خواهد بود.

یکبار دیگر اشاره می‌کنیم که کلمه غیرعملی به معنای غیرممکن نیست، چرا که افرادی این کار را همیشه انجام می‌دهند. در حقیقت تمام فرآیند استخراج بر روی این موضوع استوار است. (بعدا بیشتر توضیح می‌دهیم).

مثال‌هایی از توابع هش رمزنگاری شده

  • MD 5 : یک هش ۱۲۸ بیتی تولید می‌کند. مقاومت آن در برابر انطباق پس از تقریبا ۲^۲۱ هش شکسته می‌شود.
  • SHA 1 : یک هش ۱۶۰ بیتی تولید می‌کند. مقاومت آن در برابر انطباق پس از تقریبا ۲^۶۱ هش شکسته می‌شود.
  • SHA 256: یک هش ۲۵۶ بیتی تولید می‌کند. این تابع توسط بیت کوین مورد استفاده قرار می‌گیرد.
  • Keccak-256: یک هش ۲۵۶ بیتی تولید می‌کند. این تابع توسط اتریوم مورد استفاده قرار می‌گیرد.

هشینگ و ساختارهای داده

یک ساختار داده، روشی منحصر به فرد برای ذخیره‌سازی داده است. دانستن دو ویژگی برای فهم ساختارهای داده و چگونگی کار بلاک چین ضروری است. این ویژگی‌ها:

  1. اشاره‌گرها (Pointers)
  2. لیست‌های متصل به هم (Linked Lists)

اشاره‌گرها

اشاره‌گرها متغیرهایی در برنامه نویسی هستند که آدرس سایر متغیرها را ذخیره می‌کنند. متغیرهای عادی در زبان‌های برنامه‌نویسی عموما داده را ذخیره می‌کنند.

به طور نمونه، int a=10 به این معناست که یک متغیر a وجود دارد که یک مقدار اینتجر (integer ) را در خود ذخیره کرده است. در اینجا این متغیر مقدار اینتجر ۱۰ را ذخیره کرده است. این یک متغیر عادی و نرمال است.

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

لیست‌های متصل به هم

یک لیست متصل به هم یکی از آیتم‌های مهم در ساختارهای داده است. لیست متصل به هم مانند شکل زیر است:

هشینگ (Hashing) یا هش کردن چیست؟ (راهنمای گام به گام)
هشینگ (Hashing) یا هش کردن چیست؟ (راهنمای گام به گام)

بلاک‌هایی پشت سر هم وجود دارد، هر کدام داده‌ای دارند که با یک اشاره‌گر به بلاک بعدی متصل شده است. در اینجا متغیر اشاره‌گر، آدرس نود بعدی را در خود ذخیره کرده است و بنابراین باعث ایجاد یک اتصال شده است. همانطور که می‌بینید آخرین نود یک اشاره‌گر null دارد و این یعنی که مقداری در خود ندارد.

یک نکته مهم که در اینجا باید به آن اشاره کنیم این است که اشاره‌گر درون هر بلاک آدرس بلاک بعدی را در خود دارد و این گونه می‌تواند به بلاک بعدی خود اشاره کند. حالا شاید برای شما سوال پیش بیاید که این قضیه برای بلاک اول چگونه است؟ اشاره‌گر بلاک اول کجاست؟

بلاک اول، بلاک پیدایش یا genesis block نامیده می‌شود و اشاره‌گر آن به خود سیستم بستگی دارد و چیزی شبیه به این است:

هشینگ (Hashing) یا هش کردن چیست؟ (راهنمای گام به گام)
هشینگ (Hashing) یا هش کردن چیست؟ (راهنمای گام به گام)

 

اگر معنای اشاره‌گر هش یا hash pointer را نمی‌دانید، کمی بعد آن را توضیح خواهیم داد.

همانطور که ممکن است تا حالا حدس زده باشید، این ساختاری است که بلاک چین بر روی آن بنا شده است، یک زنجیره بلاکی که اساس آن بر روی لیست متصل به هم است. ساختار بلاک چین چیزی شبیه شکل زیر است:

 

هشینگ (Hashing) یا هش کردن چیست؟
هشینگ (Hashing) یا هش کردن چیست؟

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

تصور کنید که یک هکر به بلاک شماره ۳ حمله می‌کند تا داده آن را عوض کند. به دلیل خصوصیات توابع هش، یک تغییر کوچک در داده، هش را به طور کامل عوض خواهد کرد. این به آن معناست که یک تغییر کوچک در بلاک ۳، هش ذخیره شده در بلاک ۲ را نیز عوض خواهد کرد، حالا باید هش بلاک ۲ نیز عوض شود، ولی تغییر در این هش، باعث تغییرات در بلاک ۱ می‌شود و این روند همین گونه ادامه می‌یابد. در نتیجه برای عوض کردن اطلاعات یک بلاک باید کل زنجیره را تغییر داد، که این کار غیرممکن است. دقیقا به همین دلیل است که بلاک چین غیرقابل دستکاری است.

سربرگ یا هدر (header) بلاک چیست؟

هشینگ (Hashing) یا هش کردن چیست؟
هشینگ (Hashing) یا هش کردن چیست؟

هدر بلاک شامل موارد زیر است:

  • نسخه: شماره نسخه بلاک
  • زمان: برچسب زمانی حال حاضر
  • تارگت سختی شبکه (بعدا بیشتر توضیح خواهیم داد)
  • هش بلاک قبلی
  • نانس (بعدا بیشتر توضیح خواهیم داد)
  • هش ریشه مرکل (Merkle)

فعلا بیاید بر روی هش ریشه مرکل تمرکز کنیم، اما قبل از آن نیاز است تا با مفهوم درخت مرکل (Merkle Tree) آشنا شوید.

درخت مرکل چیست؟

هشینگ (Hashing) یا هش کردن چیست؟
هشینگ (Hashing) یا هش کردن چیست؟

نمودار بالا یک درخت مرکل را نشان می‌دهد. در یک درخت مرکل هر نود غیربرگ (non-leaf node) شامل هش مقادیر زیرمجموعه‌ها یا نودهای فرزند خود است.

نود برگ‌ (Leaf Node) : نودهای برگ نودهایی هستند که در پایین‌ترین سطح درخت هستند. بنابراین بر اساس نمودار بالا، نودهای L1، L2، L3 و L4 نودهای برگ هستند.

هشینگ (Hashing) یا هش کردن چیست؟
هشینگ (Hashing) یا هش کردن چیست؟

نودهای فرزند: برای هر نود، نودهایی که در سطح پایین‌تری از آن قرار دارند، در حکم فرزند هستند. بر اساس نمودار بالا نودهایی که با “Hash 0-0” و “Hash 0-1” برچسب خورده‌اند؛ فرزندان نود “Hash 0” هستند.

نود ریشه : نود یگانه‌ای که در سطح بالاتر دیده می‌شود و با برچسب “Top Hash” مشخص شده است، نود ریشه یا Root Node نامیده می‌شود.

 

هشینگ (Hashing) یا هش کردن چیست؟
هشینگ (Hashing) یا هش کردن چیست؟

یک درخت مرکل چه کاری برای بلاک چین انجام می‌دهد؟

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

بیایید این مساله را با یک مثال توضیح دهیم. درخت مرکل زیر را در نظر بگیرید:

هشینگ (Hashing) یا هش کردن چیست؟
هشینگ (Hashing) یا هش کردن چیست؟

حال فرض کنید که من می‌خواهم بدانم که یک داده به خصوص در این بلاک وجود دارد یا خیر:

هشینگ (Hashing) یا هش کردن چیست؟
هشینگ (Hashing) یا هش کردن چیست؟

به جای آنکه در یک فرآیند سنگین و خسته کننده تمام هش‌ها را چک کنیم و ببینیم که به داده‌ها تعلق دارند یا خیر، به راحتی می‌توانیم با دنبال کردن هش هایی که به داده مورد نظر می‌رسند، آن را ردیابی کنیم:

هشینگ (Hashing) یا هش کردن چیست؟
هشینگ (Hashing) یا هش کردن چیست؟

انجام اینکار مدت زمان صرف شده را کاهش خواهد داد.

 استفاده از هشینگ در استخراج یا ماینینگ : معماهای رمزنگاری

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

با این حال این مساله می‌تواند مشکل ایجاد کند. برای هر رمز ارز یک سقف عرضه وجود دارد. به طور نمونه برای بیت کوین این سقف ۲۱ میلیون سکه است. تنها ۲۱ میلیون بیت کوین می‌تواند وجود داشته باشد. استخراج‌کنندگان فقط می‌توانند تا این حد استخراج کنند و اگر به این حد برسند کل بیت کوین‌های موجود استخراج شده است. علاوه بر این، میان ایجاد هر بلاک یک فاصله زمانیِ به خصوص وجود دارد. در بیت کوین زمان ایجاد هر بلاک ده دقیقه است، اگر بلاک‌ها با سرعت زیادی تولید شوند، نتایج زیر حاصل می‌شود:

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

بنابراین به منظور محدود کردن سرعت و مدت زمان تولید بلاک، یک سطح سختی ویژه تنظیم می‌شود. استخراج مانند یک بازی است، شما یک معما را حل می‌کنید و در عوض آن پاداش دریافت می‌کنید. تنظیم سختی، حل معماها را سخت‌تر می‌کند و موجب می‌شود که حل آن‌ها به صرف زمان بیشتری نیاز داشته باشد. در مورد بیت کوین، تارگت سختی (سختی شبکه مورد نظر) ۶۴ کاراکتر رشته‌ای است (که در واقع مانند همان خروجی SHA-256 است) که با تعدادی صفر آغاز می‌شود. اگر تعداد صفرها زیادتر شود، سطح سختی نیز افزایش پیدا می‌کند. سطح سختی هر ۲۰۱۶ بلاک یکبار تغییر می‌کند.

فرآیند استخراج

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

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

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

جمع‌بندی:

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

آیا ویژگی شماره ۶ توابع هش را بخاطر دارید؟ ویژگی معمای خوب بودن؟

برای هر خروجی “Y” ، اگر k از یک توزیع با min-entropy بالا انتخاب شده باشد، پیدا کردن ورودی x در فرمول روبرو غیرعملی است:

H(k|x) = Y.

بنابراین اگر بخواهیم فرمول بالا را برای استخراج بیت کوین استفاده کنیم:

  • نانس = K
  • هش بلاک = x
  • تارگت سختی استخراج = Y

تمام این فرآیند، کاملا تصادفی است. هیچ فرآیند فکری پشت انتخاب نانس‌ها وجود ندارد. این یک فرآیند brute-force خالص است که در طی آن نرم‌افزار به صورت مستمر رشته‌ها را تولید می‌کند تا آنکه به هدف مورد نظر دست پیدا کند. تمام این فرآیند از پروتکل اثبات کار تبعیت می‌کند:

  • حل معما باید سخت باشد.
  • با این حال چک کردن جواب باید برای همه آسان باشد تا هیچ روش ناشناخته یا مخفیانه ای در حل مساله به کار گرفته نشود.

نرخ هش (Hash rate) چیست؟

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

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

برای کسب اطلاعات بیشتر درمورد فرایند هشینگ ، سری مقالات ۴ بخشی تراکنش بلاک چین را مطالعه بفرمایید.

منبع

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد.

2 نظر
  1. لیلی

    مقاله تون جامع بود. ممنون

  2. حامد الهی

    شما در توضیح پارادوکس روز تولد گفتید جذر ۳۶۵ میشه ۲۳ اما من محاسبه کردم حدودا میشه ۱۹.۱.۵ ینی تقریبا ۱۹