آشنایی با تابع هش (Hash Function) به زبان ساده
انواع تابع هش متداول ترین توابع ریاضی مورد استفاده در رمزنگاری برای پیاده سازی امنیت هستند. در این مقاله از ارز دیجیتال، به زبان ساده به آشنایی با تابع هش میپردازیم.
مقدمه
یک تابع هش یک مقدار ورودی با هر اندازه دلخواه را به یک مقدار با اندازه ثابت تبدیل می کند. بنابراین، ورودی می تواند از هر طولی باشد، اما خروجی تولید شده همیشه دارای طول ثابت است. خروجی تولید شده مقادیر هش یا هش نامیده می شود.
نکته مهم دیگری که باید به آن اشاره کرد این است که توابع هش و رمزنگاری کاملاً با یکدیگر متفاوت هستند. رمزگذاری یک عملکرد دو طرفه است، یعنی داده های رمزگذاری شده باید با استفاده از یک کلید خصوصی رمزگشایی شوند، بنابراین آنها قابل برگشت هستند. توابع هش یا هش توابع یک طرفه هستند (یعنی هش ها قابل برگشت نیستند). بنابراین، هش کردن سریعتر از رمزنگاری است.
کاربرد تابع هش
رایج ترین استفاده از هش، بررسی رمز عبور است. هنگامی که کاربر رمز عبور را وارد می کند، هش رمز عبور تولید شده و با هش موجود در پایگاه داده مقایسه می شود. اگر هر دو هش یکسان باشند، کاربر مجاز است وارد شود در غیر این صورت کاربر باید رمز عبور را دوباره وارد کند.
توابع هش محبوب
توابع هش پرکاربرد در زیر آمده است:
MD: مخفف Message Digest است. این تابع می تواند از انواع MD2، MD4، MD5 و MD6 باشد. MD یک تابع هش 128 بیتی است.
SHA: مخففSecure Hash است. این می تواند SHA-0، SHA-1، SHA-2 و SHA-3 باشد. SHA-224، SHA-256، SHA-384 و SHA-512 انواعی از خانواده SHA-2 هستند.
RIPEMD: مخفف عبارت RACE Integrity Primitives Evaluation Message Digest است. RIPEMD، RIPEMD-128 و RIPEMD-160 به طور گسترده مورد استفاده قرار میگیرند. نسخه های 256 و 320 بیتی این الگوریتم نیز وجود دارد.
ورلپول: Whirlpool یک تابع هش 512 بیتی و یک نسخه اصلاح شده از AES است. WHIRLPOOL-0، WHIRLPOOL-T و WHIRLPOOL سه نسخه از Whirlpool هستند.
ویژگیهای توابع هش
یک تابع هش ایده آل برای داشتن ویژگی های زیر برای موثر بودن در برابر حملات مختلف مهاجمان مورد نظر است. آنها به شرح زیر است:
مقاومت قبل از تصویر
مقاومت قبل از تصویر به این معنی است که عملکرد هش قابل برگشت نیست.
به عبارت ساده، اگر هر تابع هش “a” مقدار هش “c” را تولید کند، پیدا کردن مقدار ورودی “b” که به “c” هش می شود بسیار دشوار است.
این ویژگی برای مهاجمی که دارای مقدار هش است و سعی در یافتن ورودی دارد غیرممکن می کند.
مقاومت قبل از تصویر دوم
مقاومت پیش از تصویر دوم به این معنی است که برای هر ورودی و مقدار هش آن، یافتن ورودی متفاوتی که همان هش را ایجاد میکند بسیار دشوار است.
به عبارت ساده، اگر هر تابع هش برای ورودی “a” یک مقدار هش h(a) تولید کند، پس یافتن مقدار ورودی دیگری “b” ممکن نخواهد بود که h(b) = h(a) باشد.
مقاومت در برابر برخورد
مقاومت در برابر برخورد به این معنی است که یافتن دو ورودی مختلف با هر طولی که هش یکسانی تولید می کنند بسیار دشوار است. این ویژگی به عنوان تابع هش بدون برخورد نیز شناخته می شود. این ویژگی از یک حمله شناخته شده به نام حمله برخورد هش جلوگیری می کند.
به عبارت ساده، برای یک تابع هش معین h، یافتن هر دو ورودی x و y بسیار دشوار است، یعنی اینکه h(x) = h(y).
این ویژگی بدون برخورد تأیید می کند که یافتن این برخوردها برای یک تابع هش معین دشوار است.
همچنین، این ویژگی است که یافتن دو مقدار ورودی که هش یکسانی را ایجاد می کنند را برای مهاجم دشوار می کند.
کاربردهای توابع هش
در زیر فیلدهایی وجود دارد که از تابع هش به طور گسترده استفاده می شود:
- ارز دیجیتال
- تایید رمز عبور برای احراز هویت
- بررسی یکپارچگی داده ها و فایل ها
- امضای دیجیتالی