رمزنگاری در بلاک چین ( بخش دوم )

در ادامه قصد داریم با در دست داشتن این ابزارها، به الگوریتم‌های دیگری که در یک بلاک چین برای ساخت ویژگی غیر قابل تغییر بودن به کار می‌رود بپردازیم. این ویژگی یک ابزار رمزنگاری دیگر است که به طور کلی به آن توابع هش[۱] می‌گوییم.

0 126

توابع هش:

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

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

هر تابعی که بتواند داده‌ای با هر طول دلخواه را به یک داده با طول مشخص تصویر کند یک تابع هش نامیده می‌شود. (Pelzl & Paar, 2009)) این توابع در محل‌های مختلفی در علوم کامپیوتر کاربرد دارند که از جمله آن‌ها می‌توان به نگه‌داری رمزنگاری شده پسوردها، chechsum فایل‌ها (عددی که نشان می‌دهد یک فایل تولیدی یا دانلود شده از منشا خارجی دچار تغییرات نبوده است. به طور مثال وقتی از اپ استور گوگل برنامه‌ای دانلود می‌کنید می‌توانید با استفاده از کنترل md5 فایل دانلود شده با مقدار تعیینی توسط سازنده مطمئن شوید که فایل آلوده به کدهای مخرب نیست) و حتی جستجوی داده‌های تکراری به کار روند.

اگر بخواهیم به عنوان مثال یک تابع هش مانند SHA-2 را در نظر بگیریم که خروجی آن ۶۴ کاراکتر است، شما می‌توانید به عنوان ورودی به آن هر متنی با هر طول دلخواه (از یک کاراکتر تا بی‌نهایت کاراکتر ممکن) را وارد کنید و تابع هش از این ورودی‌ها همیشه یک رشته متنی ۶۴ کاراکتری به عنوان خروجی به شما تحویل بدهد. توابع هش رمزنگاری توابع هشی هستند که دارای ویژگی‌های خاصی می‌باشند که باعث می‌شود برای استفاده در رمزنگاری مناسب باشند. این توابع یک سویه (یعنی تبدیل یک هش به متن اصلی از لحاظ عملی غیر ممکن است) بوده و قاعدتا (به عنوان یک استاندارد) در تشابه با توابع رمزنگاری، هیچ راهی آسان‌تر از حمله Brute-Force برای شکستن آن‌ها وجود ندارد. توابع ایده‌ال هش باید دارای پنج ویژگی باشند:

  • یک متن یکسان باید همواره منجر به یک هش یکسان شود و نتایج متفاوت ندهد.
  • تابع هش باید حتی الامکان از لحاظ محاسباتی سریع باشد. یعنی تبدیل یک متن به هش آسان باشد.
  • نباید راهی آسان‌تر از Brute-Force برای تبدیل هش به متن اولیه موجود باشد.
  • تابع هش باید بسیار اتفاقی باشد یعنی هر تغییر، هر مقدار کوچک، در پیام اولیه باید منجر به چنان تغییری در هش پیام شود که هیچ همبستگی بین هش قبل و هش جدید قابل کشف نباشد.
  • پیدا کردن دو عبارت با هش یکسان باید بسیار مشکل باشد و الگوریتمی برای آن موجود نباشد.

 

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

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

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

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

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

 

ادامه در بخش ششم

 

 

[۱] Hash Function

[۲] Difficulty

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

ارسال پاسخ

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