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

یک تابع هش یک تابع ریاضی است که یک مقدار ورودی را به مقدار فشرده‌ شده‌ی دیگر تبدیل می‌کند. ورودی تابع هش یک مقدار با طول نامعلوم است اما خروجی همیشه طول ثابتی دارد. توابع هش به شدت کاربردی هستند و تقریبا در همه کاربرد‌های امنیت اطلاعات حضور دارند.

مقدار برگشت داده شده توسط یک تابع هش، یک «پیام خلاصه» یا به طور ساده «مقدار هش» نام دارد. شکل زیر یک تابع هش را نشان می‌دهد.

ویژگی‌های توابع هش

ویژگی‌های معمول توابع هش عبارتند از:

  • طول ثابت خروجی (مقدار هش)
    • تابع هش، داده با طول متغیر را به طول ثابت تبدیل می‌کند.
    • معمولا اندازه هش بسیار کوچک‌تر از ورودی است، بنابراین توابع هش را گاهی با نام توابع فشرده‌ساز می‌شناسند.
    • تابع هش با خروجی n بیتی، را تابع هش n-بیتی می‌نامند.
  • اثربخشی فرآیند
    • به طور کلی برای هر تابع هش h با ورودی X، محاسبه (h(x، یک عملیات سریع است.
    • انجام محاسبات در توابع هش بسیار سریعتر از رمزنگاری متقارن هستند.

شرایط توابع هش

برای اینکه تابع هش یک ابزار موثر رمزنگاری باشد، بایستی شرایط زیر را برآورده کند:

  • شرط اول
    • این شرط بیان می‌کند که تابع هش باید یک تابع یکطرفه باشد.
    • به بیان دیگر اگر یک تابع هش h یک مقدار هش z را تولید کرد، پیدا کردن یک مقدار x که هش آن با z یکی شود، بایستی فرآیند دشواری باشد.
    • این خاصیت باعث محافظت از پیدا کردن مقدار ورودی هش توسط حمله کننده‌ای می‌شود که مقدار هش را در اختیار دارد.
  • شرط دوم
    • اگر یک ورودی و هش آن را در اختیار داشته باشیم، پیدا کردن یک ورودی متفاوت که همان مقدار هش را بدهد، بایستی دشوار باشد.
    • به بیان دیگر اگر یک تابع هش h برای یک ورودی x، یک مقدار هش (h(x را بدهد، پیدا کردن مقدار ورودی دیگری که (h(y) = h(x شود، بایستی دشوار باشد.
    • این ویژگی باعث می‌شود در برابر حمله کننده‌ای که یک مقدار هش ورودی و هش ‌آن را دارد و می‌خواهد یک مقدار متفاوت را به عنوان مقدار ورودی اصلی جایگزین آن کند، محافظت شود.
  • شرط سوم
    • پیدا کردن دو ورودی متفاوت با هر طولی که منجر به یک هش مشابه شود، بایستی دشوار باشد. این ویژگی با عنوان «تابع هش بدون تصادم» نیز شناخته می‌شود.
    • به بیان دیگر برای یک تابع هش h، پیدا کردن دو ورودی متفاوت x و y به طوری که (h(x) = h(y شود، باید دشوار باشد.
    • چون تابع هش یک تابع فشرده ساز با خروجی ثابت است، نداشتن تصادم برای آن غیر ممکن است. این ویژگی تنها بیان می‌کند که پیدا کردن این تصادم‌ها باید بسیار سخت باشد.

hash_function

کاربرد توابع هش

تابع هش دو کاربرد اصلی دارد که در ادامه به توضیح آنها می‌پردازیم.

  • ذخیره رمز عبور

توابع هش در زمان ذخیره‌سازی کلمات عبور، از آنها محافظت می‌کنند.

  • بجای ذخیره رمز عبور به صورت شفاف، تمام فرآیندهای لاگین کردن، تنها هش رمز عبور را در یک فایل ذخیره می‌کنند.
  • فایل پسورد شامل جفت‌هایی به شکل (id کاربر ٫ (h(p) است.
  • یک نفوذ کننده تنها می‌تواند هش پسورد‌ها را ببیند. بنابراین نه می‌تواند توسط این هش‌ها وارد شود نه از طریق آن‌ها کلمه‌های عبور را بدست آورد. دلیل آن یکطرفه بودن تابع هش است.
  • بررسی صحت داده

بررسی صحت داده یکی از کاربردهای بسیار رایج توابع هش می‌باشد که از آن برای تولید «چک‌سام‌ها» روی داده‌ی فایل‌ها استفاده می‌شود. این کاربرد به کاربر اطمینان می‌دهد که صحت داده تضمین شده است.

این فرآیند در شکل زیر به تصویر کشیده ‌شده:

تابع هش

این فرآیند بررس صحت، به کاربر کمک می‌کند تا هر تغییر انجام شده روی فایل اصلی را متوجه شود. هر چند تضمینی در مورد اصالت فایل نمی‌دهد. حمله کننده بجای تغییر داده، می‌تواند کل فایل را تغییر دهد و هش جدید را محاسبه کرده و به دریافت کننده بفرستد. این کاربرد بررسی صحت داده، تنها زمانی مفید است که کاربرد در مورد اصالت فایل مطمئن باشد.

طراحی الگوریتم های هشینگ

در مرکز هشینگ، تابع ریاضیاتی وجود دارد که بر روی دو بلاک داده با اندازه ثابت اعمال می شود تا یک کد هش شده را ایجاد کند. این تابع هش، بخشی از الگوریتم هشینگ را تشکیل می‌دهد.

اندازه و حجم هر بلاک داده بر اساس الگوریتم، متغیر می‌باشد. معمولا اندازه هر بلاک از ۱۲۸ الی ۵۱۲ بیت است. شکل زیر تابع هش را نشان می‌دهد.

تابع هش

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

این فرآیند تا جایی که نیاز باشد تکرار می‌شود تا کل پیام را هش کند. نمای کلی الگوریتم هشینگ در شکل زیر نشان داده شده است.

الگوریتم هشینگ

در واقع مقدار هش اولین Message Block تبدیل به ورودی دومین عملیات هش می‌شود، خروجی به دست آمده نیز برای سومین عملیات مورد استفاده قرار می‌گیرد و این روند ادامه پیدا می کند. به این فرآیند، اثر avalanche هشینگ می‌گویند.

نتیجه اثر avalanche، مقادیر هش کاملا متفاوت برای دو پیام می باشد، حتی اگر فقط در یک بیت پیام ها تفاوت داشته باشند.

الگوریتم و تابع هش با هم تفاوت دارند. تابع هش با اجرا بر روی دو بلاک داده باینری که طول ثابت دارند، یک کد هش تولید می‌کند.

الگوریتم هشینگ فرآیندی برای استفاده از تابع هش می باشد. به طور مشخص چگونگی تجزیه پیام و نحوه ترکیب شدن با نتایج Message Block های قبلی را الگوریتم هشینگ می گویند.

توابع هش پرکاربرد

در ادامه به چند تابع هش پرکاربرد می پردازیم.

  • خلاصه پیام (Message Digest)

الگوریتم MD۵ تا چندین سال محبوب ترین و پر استفاده ترین تابع هش بود.

خانواده MD شامل توابع هش MD۲، MD۴ ، MD۵ و MD۶ می باشد که به تصویب استاندارد اینترنت RFC ۱۳۲۱ رسیدند. این توابع هش از سری توابع با طول ۱۲۸ بیت می باشند.

تابع MD۵ به طور گسترده در نرم افزارها استفاده می شد تا یکپارچگی فایل منتقل شده را تضمین‌ کند. برای مثال، سرورها معمولا یک عدد با نام checksum قبل از ارسال فایل محاسبه می کنند. کاربر فایل را از سرور دریافت کرده و checksum ها را مقایسه می کند، اگر مطابقت داشتند، صحت فایل تضمین شده است.

در سال ۲۰۰۴، در MD۵ نواقصی پیدا شد. این گزارش در مورد آنالیز یک حمله بود که توانست در مدت زمان یک ساعت از این نواقص استفاده کند. همین امر باعث شد که استفاده از این تابع هش توصیه نشود.

  • تابع هش ایمن (SHA)

خانواده SHA شامل چهار الگوریتم می باشد که عبارتند از : SHA-۰, SHA-۱, SHA-۲, SHA-۳. اگرچه این چهار الگوریتم از یک‌خانواده می باشند ، اما از نظر ساختاری متفاوت می باشند.

نسخه اصلی، SHA-۰ می باشد که یک تابع هش ۱۶۰ بیت است و توسط موسسه ملی استانداردها و تکنولوژی  (NIST) در سال ۱۹۹۳ منتشر شد. این الگوریتم ضعف هایی داشت و نتوانست محبوبیت زیادی کسب کند. در سال ۱۹۹۵، SHA-۱برای اصلاح ضعف های SHA-۰ طراحی شد.

الگوریتم SHA-۱ پرکاربردترین تابع هش SHA می باشد. از این الگوریتم در برنامه ها و پروتکل های بسیار زیادی نظیر SSL مورد استفاده قرار گرفت.

در سال ۲۰۰۵ ، روشی برای نشان دادن نواقص SHA-۱ در دوره های زمان یافت شد و باعث شد استفاده بلند مدت از SHA-۱ با شک و ابهام رو به رو شود.

خانواده SHA-۲ بر اساس تعداد بیت در مقدار هش آن ها به چهار عضو تقسیم می شود که عبارتند از : SHA-۲۲۴, SHA- ۲۵۶, SHA- ۳۸۴, SHA-۵۱۲. تاکنون حمله موفقیت آمیزی به تابع هش SHA-۲ گزارش نشده است.

اگرچه SHA-۲ یک تابع هش قوی است و تفاوت چشمگیری با SHA-۱ دارد، با این حال طرح اصلی آن هم چنان مشابه SHA-۱ می باشد. بنابراین NIST در صدد طراحی تابع هش رقابتی جدیدی برآمد.

در اکتبر ۲۰۱۲، NIST الگوریتم ‌Keccak را به عنوان استاندارد SHA-۳ انتخاب کرد. Keccak دارای مزایای بسیاری نظیر عملکرد موثر و مقاوم خوب در برابر حمله ها می باشد.

  • ریپمد (RIPEMD)

ریپمد مخفف RACE Integrity Primitives Evaluation Message Digest می باشد. این مجموعه توابع هش توسط جامعه تحقیقاتی آزاد طراحی شده است و عموما به اسم خانواده توابع هش اروپایی شناخته می شود.

این مجموعه شامل RIPEMD، RIPMED-۱۲۸ و RIPMED-۱۶۰ می باشد. هم چنین نسخه های ۲۵۶ و ۳۲۰ بیت این الگوریتم نیز موجود می باشد.

ریپمد اصلی که ۱۲۸ بیت است بر اساس اصول MD۴ می باشد و برای ارائه امنیت موارد مشکوک ایجاد شده است. ریپمد ۱۲۸ بیت به عنوان یک جایگزین برای از بین بردن آسیب پذیری های ریپمد اصلی منتشر شده است.

ریپمد-۱۶۰ نسخه بهبود یافته و پر استفاده این خانواده می باشد. در نسخه های ۲۵۶ و ۳۲۰ بیت ، احتمال وجود اختلال کاهش یافته است اما در مقایسه با ریپمد- ۱۶۰ و ۱۲۸ بیت از سطح امنیت بالاتری برخوردار نمی باشد.

  • ویرل‌پول (Whirlpool)

ویرل‌پول یه تابع هش ۵۱۲ بیت می باشد.

این تابع از تغییر در نسخه استاندارد رمزنگاری پیشرفته (AES) ایجاد شده است. یکی از طراحان این تابع وینسنت ریمن است که از موسسان AES می باشد.

سه نسخه از ویرل‌پول منتشر شده است که عبارتند از: WHIRLPOOL-۰, WHIRLPOOL-T, WHIRLPOOL

 


54321
امتیاز 2.5 از 4 رای

ممکن است شما دوست داشته باشید

ارسال نظر

  اشتراک  
اطلاع از
عضویت در کانال تلگرام میهن بلاکچین