تابع هش یا درهم سازی (Hash Function) چیست؟ – به زبان ساده


یک «تابع هش» (Hash Function) (به فارسی به آن تابع درهمسازی گفته میشود)، تابعی است که مقدار ورودی را دریافت کرده و با استفاده از آن ورودی، مقدار خروجی قطعی مقدار ورودی را به دست میدهد. هنگام اجرای تابع هش، برای یک ورودی x، همواره یک مقدار y مشابه دریافت میشود. بدین شکل، هر ورودی دارای یک خروجی قطعی است. یک تابع اساسا چیزی است که یک ورودی را دریافت کرده و بر اساس آن خروجی را به دست میدهد.

بنابراین، یک تابع هش چیزی است که ورودی را دریافت کرده (که میتواند هر نوع دادهای شامل عدد، فایل و دیگر موارد باشد) و یک هش را به عنوان خروجی میدهد. یک هش معمولا به صورت یک عدد «مبنای شانزده» (Hexadecimal) نمایش داده میشود.

تابع قابل مشاهده در تصویر بالا، تابع هش md5 است، که از هر داده ورودی یک خروجی ۳۲ کاراکتری در مبنای ۱۶ میسازد. تابع هش معمولا برگشتناپذیر (یک طرفه) است، بدین معنا که نمیتوان از روی خروجی به ورودی رسید و در واقع ورودی را فهمید، مگر آنکه کاربر هر ورودی ممکنی را امتحان کند (به این کار حمله جستوجوی فراگیر یا brute-force attack گفته میشود). توابع هش معمولا برای مشخص کردن آنکه چیزی مشابه چیز دیگری است، بدون آشکارسازی اطلاعات پیشین، مورد استفاده قرار میگیرند. در ادامه یک مثال برای این توضیح آورده شده است.
«آلیس» (Alice) به «باب» (Bob) ادعا میکند که پاسخ مساله ریاضی مطرح شده در کلاس را میداند. باب از آلیس میخواهد که این موضوع را بدون گفتن پاسخ نهایی مساله به او اثبات کند. بنابراین آلیس هش پاسخ خود را به باب میدهد (فرض میشود که پاسخ عدد ۴۲ است):
آلیس هش را به باب میدهد. بدین ترتیب باب با استفاده از هش نمیتواند بفهمد که پاسخ صحیح چیست اما هنگامی که خودش به پاسخ صحیح دست یافت میتواند پاسخ خود را هش کند و اگر نتیجه مشابهی دریافت کرد متوجه میشود که آلیس به او حقیقت را گفته و پاسخ مساله را به درستی به دست آورده است. هشها معمولا در زمینه «تایید اطلاعات» (verifying information) بدون آشکارسازی آنچه در حال تایید است مورد استفاده قرار میگیرند.
اگر نوشته بالا برای شما مفید بود، آموزشهای زیر نیز به شما پیشنهاد میشوند:
درود بر شما عالی
درود شما روش ساخت rainbow table با هش sha256 رو بلدین؟