1- خلاصه:
در این مقاله با الگوریتم "خلاصه پیام MD5" آشنا می شویم.
این الگوریتم یک رشته با طول متفاوت را به عنوان ورودی می گیرد و یک
"خلاصه پیام MD5" یا "اثر انگشت" با طول 128 بیت می سازد.
در این روش
اینکه دو پیام مختلف دارای یک "خلاصه پیام" باشند یا اینکه یک رشته از روی
یک "خلاصه پیام" ساخته شود غیر ممکن می باشد. این الگوریتم برای امضاهای
دیجیتال مناسب است، جایی که احتیاج به خلاصه کردن یک فایل بزرگ در یک
رشتهء امن و فشرده، قبل از کد کردن آن متن، در سیستم های کدینگ، با کلید
های خصوصی و عمومی آن سیستم مانند RSA (Rivest Shamir Adelman)
الگوریتم
MD5 برای داشتن سرعت بالا در ماشین های 32 بیتی طراحی شده است در عین حال
احتیاجی به جانشینی ها در جداول بزرگ ندارد. این الگوریتم را با کدهای
بسیار کمی می توان نوشت.
الگوریتم MD5 توسعه ای از الگوریتم MD4 می
باشد با این تفاوت که MD5 کمی کندتر از MD4 عمل می کند اما در طراحی آن
بسیار محافظه کارانه عمل شده است.
MD5 به این دلیل طراحی شد که حس
کردند MD4 به عنوان سرعت بالایی که داشت پذیرفته شده و از امنیت بالایی در
شرایط بحرانی برخوردار نمی باشد. MD4 برای سرعت بالا طراحی شده ولی احتمال
شکست آن در رمز کردنی موفق وجود دارد. MD5 کمی در سرعت کند شده با این
تفاوت که بیشترین امنیت را داراست. این الگوریتم حاصل تاثیر دادن نظرات
تعدادی از استفاده کنندگان MD4 به همراه مقادیری تغییر در ساختار الگوریتم
برای افزایش سرعت و قدرت آن می باشد. الگوریتم MD5 در این مکان عومی
قرارگرفته تا از آن استفاده و در صورت امکان استاندارد شود.
2- شرایط و نکات لازم:
در
این متن منظور از « کلمه» تعداد 32 بیت و «بایت» تعداد 8 بیت داده می
باشد. یک صف از بیت ها دارای خصوصیات طبیعی یک صف از بایتها می باشند که
هر گروه هشت تایی متوالی از بیتها یک بایت را تشکیل می دهند که پرارزش
ترین بیت در ابتدا قرار دارد. یک صف از بایت ها دقیقا مشابه یک صف 32 بیتی
از کلمات پردازش می شود. جایی که گروهی 4 تایی از توالی بایتها پردازش می
شوند، کم ارزش ترین بایت اولین بایت می باشد.
اجازه بدهید از x_i
بجای xi (x اندیس i ) استفاده کنیم و اگر مقدار اندیس یک عبارت محاسباتی
بود آن را در {} محدود می کنیم، مانند: x_{i-1} . همچنین از ^ به عنوان
علامت توان استفاده می کنیم، پس x^i یعنیx به توان i .
اجازه بدهید از
علامت «+» برای اضافه کردن دو کلمه به هم استفاده کنیم. از x<<<5
به عنوان عملگر چرخش بیتی در کلمات استفاده می شود کهx به اندازه 5 بیت به
چپ چرخش می کند.
از not (x) به عنوان عملگر نقیض بیتی، از X v Y به
عنوان عملگر فصل (or) و از X xor Y به عنوان عملگر exclusive or و از XY
به عنوان عملگر عطف (and) استفاده می کنیم.
3- توضیحات الگوریتم MD5:
فرض
کنید ما b بیت پیام به عنوان ورودی داریم و تصمیم داریم خلاصه پیام آن را
بدست آوریم. b در اینجا یک عدد نا منفی و صحیح است، b می تواند مقدار صفر
داشته باشد و هیچ محدودیتی برای مضرب هشت بودن آن نیست و به هر اندازه می
تواند بزرگ باشد. فرض کنید بیت های این پیام را بشود به صورت زیر نوشت:
m_0 m_1 ... m_{b-1}
برای آوردن خلاصه پیام 5 مرحله زیر را انجام می دهیم:
طول
پیام مورد نظر به 448 به پیمانه 512 توسعه پیدا می کند به این معنی که اگر
به طول پیام 64 بیت اضافه شود، طولش مضربی از 512 خواهد بود. عمل توسعه
دادن همیشه اجرا می شود مگر اینکه طول پیام به صورت 448 به پیمانه 512
باشد.
عمل توسعه پیام یا نرم کردن آن به صورت زیر انجام می شود:
یک بیت [1] سپس تعدادی بیت