خطر تصادم در توابع درهمسازی
چند روز پیش، در ۵ اسفند ۱۳۹۵، تیم امنیتی گوگل خبر یافت شدن اولین نمونه از تصادم (Collision) در الگوریتم SHA-1 را در اینجا [+] منتشر کرد. با وجود این که این موضوع به صورت نظری چندین سال قبل در مقالات علمی اعلام شده بود، اما این یک نمونه کاملا عملی است و سیاست کاری بسیاری از شرکتها و سیستمهای نرمافزاری را تحت تأثیر قرار خواهد داد. اما این الگوریتم چیست و چرا این موضوع این قدر مهم است؟
الگوریتم SHA-1 یک تابع درهمسازی یا Hash Function است و الگوریتمهای متعدد دیگری نیز، مشابه با آن وجود دارند؛ از جمله الگوریتم MD5 و دهها مورد دیگر. کارکرد این توابع مشابه با اثر انگشت در انسانهاست. این توابع، با دریافت یک بخش از اطلاعات (در قالب یک فایل یا رشته)، آن را به یک عدد یا رشته با طول ثابت (مثلا ۴۰ کاراکتر) تبدیل میکنند. به این ترتیب، در واقع یک شماره شناسایی به مراتب کوچکتر از ابعاد اطلاعات ورودی ایجاد میشود که به نوعی، اثر انگشت آن اطلاعات است. اما با توجه به این که این توابع، از نظر ریاضی یک به یک نیستند، و فضای خروجی آنها به مراتب کوچکتر از فضای ورودی است، و این امکان وجود دارد که دو داده کاملا متفاوت، دقیقا دارای یک مقدار کد خروجی، موسوم به Hash (هش) باشند.
اما نقطه قوت این توابع، در حساسیت بسیار زیاد به تغییر ورودی است. مثلا، فرض کنید یک برنامه کامپیوتری، توسط فردی غیر مجاز، در حد یک یا چند بیت تغییر داده شود. در این حالت، مقدار هش برنامه، به مقدار قابل توجهی تغییر خواهد کرد و به این ترتیب، میتوان متوجه شد که این فایل، با نسخه اصلی متفاوت است. به همین دلیل است که برخی ناشرین دیجیتال و تولید کنندگان نرم افزار، مقدار هش SHA1 و یا MD5 فایلهای خود را نیز، اعلام میکنند.
حال مشخص شده است که با یک کامپیوتر تقریبا معمولی، میتوان دو فایل ایجاد کرد که مقدار هش آنها در الگوریتم SHA-1، دقیقا برابر است. به این ترتیب، هکرها و برنامههای مخرب، این امکان را دارند که انواع سوء استفادهها را در سیستمهای کامپیوتری که مبتنی بر SHA-1 هستند، انجام دهند. اگر مایل به کسب اطلاعات بیشتر در این خصوص هستید، اخیرا یک ویدئوی آموزشی کوتاه را در فرادرس ارائه کردهام [لینک]، و به بررسی دقیقتر این موضوع پرداختهام. اگر علاقهمند به مباحث ریاضی هستید، ویدئوهای مشابهی در این لینک [+] در دسترس شما هستند.