تابع هش (Hash Function) چیست؟
7 شهریور 1401 1401-06-07 13:50تابع هش (Hash Function) چیست؟
تابع هش (Hash Function) چیست؟
تابع هش یا توابع Hash الگوریتمهای ریاضی هستند که دادهها را با اندازه و طول متغیر دریافت میکنند و به خروجی یکسان و قطعی تبدیلشان میکنند. توابع Hash رکن اصلی فرایند هشینگ هستند.به عبارتی دیگر، میتوان گفت تابع Hash یک رشته کد با طول متناوب را دریافت و تبدیل به یک خروجی با طول ثابت میکند.هش کردن یا هشینگ به فرآیندی گفته میشود که در آن یک عملگر ریاضی به نام «تابع هش» (Hash Function)، دادههای ورودی مانند حروف و اعداد و تصویر و … را به خروجی رمزگذاری شده تبدیل میکند. به تابع هش، «تابع درهمساز» نیز گفته میشود.تابع هش را میتوان یکی از اصلیترین ابزار اینترنت امن دانست. توابع هش از علوم رایانهای مهم و پرکاربرد هستند که این روزها در دنیای رمزارز نیز بسیار کارایی دارند.ورودی تابع هش یک مقدار با طول نامعلوم است؛ اما خروجی همیشه طول ثابتی دارد. توابع هش به شدت کاربردی هستند و تقریبا در همه کاربردهای امنیت اطلاعات حضور دارند.
ویژگیهای اصلی تابع هش
هر تابع هش باید شامل ویژگیهایی خاص باشد که در ادامه به معرفی آنها می پردازیم:
- طول خروجی تابع هش یا مقدار هش، همیشه ثابت است.
- تا زمانی که ورودی تغییر نکند، مقداری خروجی تابع Hash قطعی و ثابت است.
- مقدار هش معمولاً بسیار کوچکتر از ورودی است. به همین خاطر به تابع هش، فشردهساز نیز میگویند.
- سرعت بالا در محاسبه
- عملکرد تابع هش با رمزنگاری متفاوت است.
- توابع Hash بهصورت یکطرفه طراحی شدهاند. به عبارتی دیگر، در هشینگ به دست آوردن خروجی از ورودی امکانپذیر است و عملیات عکس آن یعنی به دست آوردن ورودی از خروجی تقریباً غیرممکن است.
کاربردهای تابع هش (Hash Function)
ذخیره کلمه عبور
یکی از کاربردهای اصلی این الگوریتمها، ذخیرهی رمزهای عبور در بستر وب است. تابع Hash پسوردها را به طور شفاف ذخیره نمیکند و آنها را بهصورت یک فرمول هش ذخیره و ثبت میکند. هکرها هنگام حمله به سیستم فقط میتوانند خروجی هش را به دست آورند که با توجه به توضیحی که کمی قبلتر در رابطه با یک طرفه بودن عملیات هشینگ دادیم؛ به دست آوردن ورودی از طریق مقدار Hash غیرممکن است. در نتیجه ذخیره پسورد از این روش امنیت بالایی دارد.
- به جای ذخیره رمز عبور به صورت شفاف، تمام فرآیندهای لاگین کردن، تنها هش رمز عبور را در یک فایل ذخیره میکنند.
- فایل پسورد شامل جفتهایی به شکل (id کاربر ٫ (h(p) است.
- یک نفوذ کننده تنها میتواند هش پسوردها را ببیند. بنابراین نه میتواند توسط این هشها وارد شود نه از طریق آنها کلمههای عبور را بدست آورد. دلیل آن یکطرفه بودن تابع هش است.
حفظ امنیت
توابع هش در حفظ امنیت شبکههای بلاک چین و فضای کریپتوکارنسی جایگاه مهم و اساسی دارند. فرایند رمزنگاری در بلاک چینها از طریق این الگوریتمها انجام میشود. دادههای موجود روی هر بلاک از طریق فرایند هشینگ به یک رشته کد تبدیل میشوند و به زنجیرهی اصلی میپیوندند.
این فرآیند بررس صحت، به کاربر کمک میکند تا هر تغییر انجام شده روی فایل اصلی را متوجه شود. هر چند تضمینی در مورد اصالت فایل نمیدهد. حمله کننده به جای تغییر داده، میتواند کل فایل را تغییر دهد و هش جدید را محاسبه کرده و به دریافت کننده بفرستد. این کاربرد بررسی صحت داده، تنها زمانی مفید است که کاربرد در مورد اصالت فایل مطمئن باشد.
بررسی صحت داده
یکی دیگر از کاربردهای الگوریتمهای هش، تولید چک سام (CheckSum) بر روی فایلهاست. چک سام، به کاربران تضمین صحت داده میدهد و به آنها کمک میکند تا هر تغییری را بر روی فایلها سریعاً متوجه شوند. اما این سیستم در مورد اصالت فایل تضمینی نمیدهد و هکرها میتوانند با تغییر کلی فایل، Hash جدید تولید و از این طریق به دادههای فایل دسترسی پیدا کنند. استفاده از چک سام زمانی کاربرد دارد که کاربر در رابطه با اصالت فایل اطمینان داشته باشد.
الگوریتم های تابع هش
الگوریتمهای هش زیادی برای رمزنگاری داده وجود دارند. در ادامه به چند مورد از شناختهشدهترین و پرکاربردترین آنها اشاره خواهد شد.
MD۵
الگوریتم هش MD که مخفف عبارت «Message Digest» به معنی «خلاصه پیام» است، در سال ۱۹۹۱ توسط رونالد ریوِست و به عنوان جایگزینی برای تابع هش پیشین این خانواده یعنی MD4 طراحی شد. الگوریتم MD5، تابع هشی است که به صورت گسترده مورد استفاده قرار میگیرد و هش ۱۲۸ بیتی تولید میکند.
اگر چه MD5 با هدف اینکه به عنوان تابع رمزنگاری مورد استفاده قرار گیرد طراحی و ایجاد شد، اما از مشکلات زیادی برخوردار است. همین باعث شد که کمتر به عنوان تابع هش از آن استفاده شود. امروزه از این الگوریتم به عنوان چکسام برای بررسی درستی و یکپارچگی دادهها در برابر دستکاری ناخواسته استفاده میشود.
SHA
الگوریتم هش ایمن (Secure Hash Algorithm) که به اختصار آن را SHA مینامند، مجموعهای از الگوریتمهاست که توسط موسسه ملی استاندارد و فناوری (NIST) ایالات متحده و دیگر ارگانهای امنیتی ایجاد شد و توسعه یافت. SHA-0 اولین الگوریتم از خانواده SHA است که در سال ۱۹۹۳ توسعه پیدا کرد. اما مدتی پس از انتشار به دلیل نقص قابل توجهی که در آن کشف شد، جای خود را به نسخهی جدیدتر و اصلاحشدهی SHA-1 داد.
RIPEMD
RIPEMD که مخفف عبارت «RACE Integrity Primitives Evaluation Message Digest» است، همانند الگوریتم SHA مجموعهای از توابع هش است که در بلژیک و توسط گروه تحقیقاتی COSIC در سال ۱۹۹۶ توسعه یافت. آنها این مجموعه الگوریتم را در واکنش به ضعف امنیتی که در RIPEMD مشاهده شد، طراحی کردند. در طراحی این الگوریتم از اصول به کار رفته در MD4 استفاده شده است و عملکردی مشابه با SHA-1 دارد.