سارینا حیدری
سارینا حیدری
خواندن ۶ دقیقه·۵ سال پیش

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • بهترین سناریو: در اولین تلاش خود جوابتان را پیدا می‌کنید. احتمالا در این صورت خوش‌شانس‌ترین فرد روی زمین هستید، چرا که احتمال رخ دادن چنین اتفاقی بسیار ناچیز است.
  • بدترین سناریو: شما جواب خود را پس از 1-128^2  دفعه تلاش به دسته می‌آورید. اساسا به این معناست که شما کل داده‌های موجود را تست کرده‌اید.
  • سناریوی میانه: در میانه احتمالات ممکن، یعنی پس از 128/2^2 = 127^2 دفعه به جواب خود می‌رسید. این عدد برابر با  1.7 * 38^10  است و به عبارت دیگر عدد بسیار بزرگی است.

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

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

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

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

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

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

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

اگر شما در خیابان تصادفا با یک غریبه برخورد کنید، احتمال آنکه هر دوی شما در یک روز به دنیا آمده باشید، بسیار کم است. در حقیقت احتمال این اتفاق 1/365 یا 0.27% است. به عبارت دیگر احتمال واقعا پایینی است.

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


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

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


به دلیل طولانی بودن مطلب جهت خواندن ادامه مطلب به لینک داده شده در منبع مراجعه کنید.


منبع

تلگرام-فینمگ

هشینگhashinghashهش
من اینجا هستم تا شما رو با دنیای بلاک چین و رمزارزها آشنا کنم.جدیدترین مطالب رو در سایت ما finmag.ir بخونید.
شاید از این پست‌ها خوشتان بیاید