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

0

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

هشینگ بلاک چین چگونه کار می کند؟

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

به منظور درک چگونگی عملکرد رمزنگاری های مختلف مانند اتریوم و بیت کوین باید بدانیم هشینگ چیست؟

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

بیایید ببینیم فرایند هشینگ چگونه کار می کند. برای این تمرین قصد داریم از SHA-256 (الگوریتم ایمن هشینگ 256) استفاده کنیم.

همانطور که مشاهده می کنید، در مورد SHA-256 ، مهم نیست ورودی شما چقدر بزرگ یا کوچک باشد، خروجی همیشه دارای طول ثابت 256 بیت خواهد بود. این مسئله زمانی مهم می شود که شما با تعداد زیادی از داده ها و معاملات سروکار دارید. بنابراین اساساً، به جای یادآوری ورودی که می تواند بسیار زیاد باشد، می توانید هش را داشته باشید و پیگیری کنید. قبل از اینکه جلوتر برویم، ابتدا باید خواص مختلف عملکردهای هشینگ و نحوه اجرای آن ها در بلاک چین را ببینیم.


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


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

ویژگی 1: قطعیت

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

ویژگی 2: محاسبات سریع

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

ویژگی 3: عدم پیش نمایش یا Pre-Image Resistance

عدم پیش نمایش یعنی در صورتی که (H (A هش ورودی A باشد، با داشتن (H (A تعیین A تقریبا غیر ممکن است. توجه کنید که به جای استفاده از “غیر ممکن” از “تقریباً غیر ممکن” استفاده کردیم چرا که قبلاً می دانستیم تعیین ورودی اصلی از مقدار هش آن غیرممکن نیست.

یافتن مقدار ورودی از روی هش زمانی که مقدار اطلاعات ورودی شما خیلی کم باشد راحت تر است اما زمانی که حجم عظیمی از اطلاعات ورودی داشته باشید و به طور مثال از هش 128 بیتی استفاده کنید (هش 128 بیتی یعنی خروجی برای هرگونه اطلاعات ورودی دارای مقدار ثابت 128 بیت خواهد بود) تنها راه یافتن ورودی از روی هش “روش حمله بی رحمانه” است. حمله بی رحمانه یعنی ورودی های مختلف را به تابع هش داده و خروجی هش را با هش مورد نظر مقایسه کنید و این کار را آنقدر انجام دهید تا شاید زمانی به نتیجه برسید.

در صورت استفاده از این روش چه اتفاقی خواهد افتاد؟

  • بهترین سناریو: شما در اولین بار جواب خود را می گیرید. برای این اتفاق واقعا باید خوش شانس ترین فرد جهان باشید. شانس این اتفاق نجومی است.
  • بدترین حالت: شما پاسخ خود را بعد از 1- 2128 بار دریافت می کنید. اصولاً به این معنی است که پاسخ خود را در انتهای همه داده ها خواهید یافت.
  • سناریوی متوسط: شما جواب خود را میانه راه پیدا خواهید کرد، بنابراین اساساً بعد از 2127=2128/2 بار. این عدد چیزی معادل 1038*1.7 می باشد که حقیقتا عدد بزرگی است.

بنابراین، درست است که احتمال شکسته شدن ویژگی Pre-Image Resistance یا عدم پیش نمایش توسط روش حمله بی رحمانه وجود دارد ولی زمان شکسته شدن آن آنقدر طولانی است که دیگر اهمیت خود را از دست می دهد.

ویژگی 4: تغییرات کوچک در ورودی هش، خروجی را به طور کلی تغییر می دهد

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

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

ویژگی 5: غیر قابل تلاقی

با توجه به دو ورودی مختلف A و B که (H (A و (H (B هش های مربوط به آنها هستند، غیر ممکن است که (H (A برابر با (H (B باشد. این بدان معنی است که، هر ورودی هش منحصر به فرد خود را دارد.


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


ساختار داده ها یک روش تخصصی برای ذخیره داده ها است. دو ویژگی برای ساختار داده وجود دارد که که دانستن آن ها برای درک کارکرد بلاک چین ضروری است.

  1. اشاره گرها.
  2. لیست های به هم پیوسته یا لینک شده.

اشاره گرها

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

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

لیست های به هم پیوسته (لینک شده)

لیست های به هم پیوسته یکی از مهمترین موارد در ساختار داده ها هستند. لیست های به هم پیوسته را در زیر می توان مشاهده کرد:

 

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

نکته مهمی که باید در اینجا ذکر شود، اشاره گر درون هر بلاک حاوی آدرس بلاک بعدی است.

همانطور که شاید تاکنون حدس زده باشید، این همان چیزی است که ساختار بلاک چین بر پایه آن بنا شده است. بلاک چین در واقع یک لیست به هم پیوسته است. بیایید ببینیم ساختار بلاک چین چگونه است:

 

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

تصور کنید هکرها به بلاک 3 حمله می کنند و سعی می کنند داده های آن را تغییر دهند. به دلیل ویژگی های توابع هش، تغییر جزئی در داده ها باعث تغییر چشمگیر هش می شود. این بدان معنی است که هرگونه تغییر جزئی در بلاک 3، هشی را که در بلوک 2 ذخیره شده است را تغییر می دهد، اکنون باید داده ها و هش بلاک 2 نیز تغییر کند که منجر به تغییر در بلاک 1 می شود. به این معنی که به طور کامل زنجیره را تغییر می دهد، که غیرممکن است. این دقیقاً ویژگی تغییر ناپدیری بلاک چین می باشد.


هدر یا سرتیتر بلاک چیست؟


 

هدر یک بلاک شامل:

  • ورژن یا نسخه: شماره نسخه یا ورژن بلاک
  • زمان: زمان سنج
  • هش بلاک قبل
  • Nonce: عددی است که سطح سختی بلاک چین را مشخص می کند.
  • هش ریشه مرکل

در حال حاضر، بیایید به هش ریشه مرکل بپردازیم. اما قبل از آن، باید بدانیم که یک درخت مرکل چیست.

 

نمودار فوق نشان می دهد که درخت مرکل چیست. درخت مرکل جزء اساسی بلاک چین ها است که پایه و اساس عملکرد آنها را تشکیل می دهد. درخت مرکل امکان تأیید کارآمد و ایمن ساختارهای داده ای بزرگ را فراهم می کند.

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

گره ریشه: تنها گره در بالاترین لایه با عنوان “Top Hash” ، گره ریشه است.

گره های زیرشاخه یا گره کودک: گره های زیر شاخه گره هایی هستند که از گره بالاتر خود مشتق شده اند. به این گره ها، گره های کودک یا زیر شاخه می گویند. در شکل بالا گره هایی با عنوان ”Hash 0-0” و  “Hash 0-1” گره های کودک گره “Hash 0” هستند.

گره برگ: گره هایی در پایین ترین سطح درخت هستند. بنابراین طبق نمودار بالا، گره های برگ L3 ، L2 ، L1 و L4 خواهند بود.


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


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

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

فرض کنید می خواهیم دریابیم که یک داده خاص به این بلاک تعلق دارد یا خیر:

به جای جستجوی در تک تک هش ها و دیدن اینکه آیا متعلق به داده است یا نه، می توانیم با جستجو در دنباله هش های منتهی به داده ها، آن را ردیابی کنیم:

انجام این کار به میزان قابل توجهی زمان لازم را کاهش می دهد.


هشینگ در استخراج (معماهای رمزنگاری)


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

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

  • برخورد بیشتر: توابع هش بیشتری در زمان واحد ایجاد می شود که باعث بوجود آمدن توابع یکسان خواهد شد.
  • بلاک های مشابه در یک زمان واحد بیشتر: اگر تعداد زیادی از استخراج کنندگان به استخراج بپردازند، همزمان با بلاک های جدیدی روبرو می شوند که مشابه هم هستند و در زمان واحدی ایجاد شدند. این امر باعث می شود اکثر بلاک ها به زنجیره اصلی متصل نشوند و اصطلاحاً به بلاک های یتیم تبدیل شوند.

بنابراین ، به منظور محدود کردن ایجاد بلاک، یک سطح سختی خاص تعیین شده است. استخراج مانند یک بازی است، شما معادلات را حل می کنید و پاداش می گیرید. تعیین سطح سختی بالا، حل آن معادله را دشوارتر و بدین ترتیب زمان حل آن را بیشتر می کند. WRT هدف سختی یک رشته 64 کاراکتری است (که همان خروجی SHA-256 است). سطح سختی بعد از هر 2016 بلاک تغییر می کند.


نرخ هش یا هش ریت چیست؟


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

 

نتیجه گیری

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

امکان نظردهی غیر فعال شده.