بایگانی برچسب: الگوریتم

امنیت الگوریتم رمزنگاری MD5

encryption

همونطور که میدونید MD5 یکی از رایج‌ترین الگوریتم‌ها برای رمزنگاری هست و البته کاربردهای مختلفی هم داره. چند روز پیش اتفاقی داشتم به یک مسئله‌ای فکر می‌کردم و اون اینکه میخواستم ببینم تمام حالات MD5 چندتاست. خب خروجی MD5 یک رشته به طول ۳۲ هست و ساخته شده از اعداد ۰ تا ۹ و حروف انگلیسی a تا z هست (البته case sensitive نیست)، یعنی کلا کاراکترهای ممکن برای یک حرف از یک رشته‌ی MD5 می‌شود ۳۶ حالت (۲۶+۱۰) می‌باشد. خب از اون طرف هم داشتیم که طول رشته ۳۲ کاراکتر هست، پس ماکزیمم حالات ممکن برای یک رشته‌ی MD5 می‌شود ۳۶ به توان ۳۲ که حاصل آن می‌شود حدود ۶۳ کویندسیلیون (عدد ۶۳ و ۴۸ صفر جلویش). اما با اندکی تامل در می‌یابیم که حالات ممکن برای تولید رشته‌ای به صورت تلفیقی از اعداد و حروف و کاراکترهای خاص و همچنین به طول رشته‌های دلخواه و متفاوت بسیار بسیار بیشتر از این تعداد حالات می‌باشد. بنابراین انتظار می‌رود الگوریتم MD5 حالات خروجی یکسان بسیاری داشته باشد و در واقع همپوشانی زیادی دارد. به طوریکه مثلا رشته‌ی زیر:
۲۰۲cb962ac59075b964b07152d234b70
که MD5 رشته‌ی ۱۲۳ می‌باشد، منحصربفرد نیست و ممکن است برای حالات بسیار دیگری نیز همین نتیجه را برگرداند. البته در حال حاضر چیزی در ذهنم هست که کمی در موردش مردد هستم و اون اینکه ممکنه برای رشته‌ی MD5 مثل بالا، بی نهایت حالت مقابل وجود داشته باشه. حتی فکر کردن به موضوعاتی این چنینی، حس عجیبی به آدم میده 🙂