وانفینکس

تابع هش (Hash Function)

4 آبان 1405

318

زمان تقریبی مطالعه: 5 دقیقه

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

advertise blog post start

تابع هش چگونه کار می‌کند؟

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

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

یک مثال ساده

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

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

کاربرد در شبکه‌های رمزارزی

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

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

هش و سازوکار ثبت بلوک

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

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

محدودیت‌ها و نکات مهم

برابری هش‌ها همیشه به معنی برابری قطعی دو ورودی نیست، چون برخورد از نظر نظری ممکن است. امنیت عملی نیز به الگوریتم انتخاب‌شده و کاربرد درست آن بستگی دارد. همه تابع‌های هش برای کارهای رمزنگاری مناسب نیستند و مقاومت الگوریتم‌ها هم یکسان نیست. برای نمونه، ضعف مقاومت SHA-1 در برابر برخورد باعث شده استفاده از آن برای کاربردهای حساس محدود شود. بنابراین دیدن واژه «هش» به‌تنهایی اطلاعات کافی درباره امنیت یک سامانه نمی‌دهد.

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

آیا مطالعه این مقاله برای شما مفید بود؟!

advertise blog post end