MD5 چیست؟

اکـسـیـژن

جمعه، 2 اردیبهشت 1384

MD5 چیست؟

ارسال شده توسط امید در متفرقه در 03:34
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 مرحله زیر را انجام می دهیم:

گام 1- اضافه کردن بیتهای نرم کننده:
طول پیام مورد نظر به 448 به پیمانه 512 توسعه پیدا می کند به این معنی که اگر به طول پیام 64 بیت اضافه شود، طولش مضربی از 512 خواهد بود. عمل توسعه دادن همیشه اجرا می شود مگر اینکه طول پیام به صورت 448 به پیمانه 512 باشد.
عمل توسعه پیام یا نرم کردن آن به صورت زیر انجام می شود:
یک بیت [1] سپس تعدادی بیت [0] به پیام اضافه می شود.اضافه شدن بیت های 0 تا زمانی که طول رشته به 448 بر پایه 512 برسد، ادامه پیدا می کند. در این عمل حداقل یک بیت و حداکثر 512 بیت اضافه خواهد شد.

گام 2- افزایش طول:
یک نمایش 64 بیتی از b بیت پیام اولیه به آخر نتیجه گام قبل اضافه می شود. در بدترین حالت، b بزرگتر از 64 بیت خواهد بود. در این حالت فقط 64 بیت کم ارزش b استفاده خواهد شد.
هم اکنون طول پیام بدست آمده دقیقا معادل مضربی از 512 خواهد بود. مشابه اینکه بگوییم، این پیام طولی معادل مضربی از16 کلمه دارد اجازه بدهید M[0…N-1] را نمایانگر کلمات پیام بدست آمده بدانیم. (N مضربی از 16 می باشد.)

گام 3- یین بافر برای MD:
برای محاسبه خلاصه پیام یک بافر 4 کلمه ای (A,B,C,D) استفاده می شود. هر کدام از A، B، Cو D یک ثبات 32 بیتی می باشند. این ثبات ها مطابق جدول زیر مقدار دهی می شوند ( بایتهای کم ارزش در ابتدا قرار دارند )

word A: 01 23 45 67
word B: 89 ab cd ef
word C: fe dc ba 98
word D: 76 54 32 10


گام 4- پردازش پیام در بلاک های 16 کلمه ای:
در ابتدا 4 تابع کمکی تعریف می کنیم که هر کدام به عنوان ورودی سه کلمهء 32 بیتی می گیرد و برای خروجی یک کلمهء 32 بیتی تولید می کند.

F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z) = XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))


در هر موقعیت بیتی، F به عنوان شرط عمل می کند: اگر X آنگاه Y در غیر این صورت Z. تابع F می توانست طوری تعریف شود که به جای استفاده از v از + استفاده کند چون XY و not(X) هرگز یک هایی در موقعیت بیتی یکسان نخواهد داشت. جالب است به یاد داشته باشید که اگر بیت های X، Y و Z مستقل و غیر مرتبط باشند، هر بیت از F(X, Y, Z) مستقل و غیر مرتبط خواهد بود.
توابع G، H و I شبیه تابع F هستند، به طوری که آنها در "توازی بیتی" کار می کنند تا خروجی شان را از بیت های X، Y و Z تولید کنند. در چنین روشی اگر بیت های متناظر X، Y و Z مستقل و غیر مرتبط باشند، آنگاه هر بیت از G(X, Y, Z)، H(X, Y, Z) و I(X, Y, Z) مستقل و غیر مرتبط خواهند بود.
توجه داشته باشید که تابع H، تابع XOR یا توازن بیتی از ورودی هایش است. این گام از یک جدول 64 عنصری T[1…64] ساخته شده از یک تابع مثلثاتی، استفاده می کند. اجازه دهید T[i]، I-امین عنصر جدول را مشخص می کند که برابر است با قسمت صحیح حاصلضرب 4294967296 در abs(sin(i))، به طوری که I به رادیان باشد.
کارهای زیر را انجام می دهید:


// Process each 16-word block.
For i = 0 to N/16-1 do

// Copy block i into X.
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end // of loop on j

// Save A as AA, B as BB, C as CC, and D as DD.
AA = A
BB = B
CC = C
DD = D

// Round 1.
// Let [abcd k s i] denote the operation a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s).
// Do the following 16 operations.
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

// Round 2.
// Let [abcd k s i] denote the operation a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s).
// Do the following 16 operations.
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

// Round 3.
// Let [abcd k s t] denote the operation a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s).
// Do the following 16 operations.
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]

// Round 4.
// Let [abcd k s t] denote the operation a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s).
// Do the following 16 operations.
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

// Then perform the following additions. (That is increment each
// of the four registers by the value it had before this block
// was started.)
A = A + AA
B = B + BB
C = C + CC
D = D + DD

end // of loop on i



گام 5- خروجی:
خلاصه پیامی که به عنوان خروجی تولید می شود و عبارت است از A، B، C و D، که ما با کم ارزش ترین بیت A شروع می کنیم و به با ارزش ترین بیت D خاتمه می دهیم. این تعریف MD5 را کامل می کند.

4- نتیجه:
الگوریتم خلاصه پیام MD5 به سادگی قابل اجرا می باشد و یک "اثر انگشت" یا "خلاصه پیام" از پیام با طول اختیاری تولید می کند. گمان برده می شود که امکان مواجه شدن با دو پیام که خلاصه پیام مشابهی دارند از رتبهء 64^2 و برای هر پیامی که به آن یک خلاصه پیام داده شده است از رتبهء 128^2 می باشد.
الگوریتم MD5 برای نقاط ضعف به دقت بررسی شده است. به هر حال این الگوریتم نسبتا جدید است و تحلیل امنیتی بیشتری را طلب می کند، مشابه طرح های مشابه در این رده.

5- پانویس:
این مقاله اطلاعاتی برای جامعهء اینترنتی مهیا کرده و البته هیچ استانداردی را مشخص نمی کند. انتشار این مقاله به هر تعداد آزاد می باشد.

*****************************************************

- این مطلب از RFC 1321 ترجمه شده و بعضی از بخش های این RFC که از اهمیت کمتری برخوردار بود حذف شده است.
- هر نوع کپی برداری با نام مترجم و لینک بلامانع است.
نظر ها (7) | دنبالک (1) | بیشترین خروج ها (0)

2749 hits

دنبالک ها
یک آدرس دنبالک برای ارسال

PingBack
Weblog: itline.ir
پیگیری شد: آذر 05, 01:45

نظر ها
نمایش نظرات به صورت (خطی | بند کشی شده)

سلام
ممنون از نوشتتون
بسياري از اوقات، وقتي مي خواهيد يك فايل را دانلود كنيد، مقدار هش MD5 آن هم نوشته شده. مي خواستم بدانم اين مقدار را بر اساس محتويات فايل مورد نظر (به صورت باينري) توليد مي كنند يا اساس ديگري دارد؟ :-)
با تشكر
#1 محمد (سایت) در 1386-02-15 01:03 (پاسخ)
سلام،
خواهش می کنم.
بله، دقیقا از محتویات فایل md5 گرفته میشه تا در نهایت وقتی دانلود کردید، ازش md5 بگیرید تا ببینید فایلتون درست پایین گذاری شده یا نه!
موفق باشید
#1.1 امید (سایت) در 1386-02-15 01:20 (پاسخ)
سلام
از این که اینقدر دیر نظر میدم متأسفم.
دنبال اطلاعاتی در مورد MD5 بودم که با این مقاله مواجه شدم :-)

متأسفانه از اونجایی که درک فرمول پیچیده س و طولانی، نتونستم بخونمش و درست بررسیش کنم.

ولی در هر صورت، همیشه یک سوال از MD5 در ذهن من بوده و اون اینه:
طول همه ی رشته های MD5، به اندازه ی 128 بیت هست.
1- آیا این به این معناست که تعداد کاراکترهای رشته های md5 در نهایت ثابت (و یا یک بازه ی محدود) هست؟
اگر بلی:
2- از طرفی میدانیم که تعداد رشته های قابل فرض، نامحدود هستن. و از طرفی طول رشته ی md5 یک طول محدود هست، بنابراین رشته هایی که میتوان برای md5 فرض کرد، هر چقدر هم که زیاد باشن، نامحدود نیستن و در نهایت تعدادی محدود خواهند بود!
چطوری ممکنه که رشته هایی نامحدود، دارای md5 ها محدود باشن، و حال این که هیچ کدوم از این md5 ها تکراری نیستن؟؟!

امیدوارم منظورم رو رسونده باشم.
در مورد سوال دومم، فکر نمیکنم محسابات اشتباهی انجام داده باشم. در نتیجه فکر میکنم جواب سوالم مربوط به همون سوال شماره ی 1 میشه و حتما در اونجا یه اشتباهی کردم!

ممنون میشم اگر جواب بدی.
با آرزوی موفقیت
سید محسن حائری
#2 tabib_m در 1386-12-26 20:24 (پاسخ)
سلام،

۱- خیر.

۲- کسی نمی‌گه تکراری نیستند! از لحاظ تئوری بی‌نهایت رشته وجود دارند که یک MD5 رو خروجی می‌دن! اما احتمالش خیلی خیلی خیلی کمه! مثل اینه که من بگ هیچ دو اثر انگشتی مثل هم نیست!! با اینکه واقعا اینطوری نیست و ممکنه دو تا اثر انگشت عین هم باشه، مهم اینه که تا الان پیدا نشده، همین!

موفق باشید.
#2.1 امید (سایت) در 1386-12-27 01:20 (پاسخ)
:-)

2- ممنون از پاسخت
واقعا لطف کردی. خیلی سعی کردم این قضیه رو برای خودم توجیه کنم، ولی باز هم به این نتیجه می رسیدم که باید امکان وجود یک md5 برای دو رشته وجود داشته باشه :-)

1- میشه یه کم قضیه رو برام شرح بدی؟ مگر هر 32 بیت یک بایت نیست؟ و مگر هر بایت اشاره به یک کاراکتر نمیکنه؟ یعنی اگر اینطوری باشه که من تصور میکنم، 128 بیت، الزاما باید به تعداد کاراکتر های ثابتی اشاره کنه!
(شرمنده دیگه، شما بذار رو حساب درس نخوندگی ما) :-)
#2.1.1 tabib_m در 1386-12-28 09:34 (پاسخ)
سلام . ممنون از مقالاتتون . یه سوال داشتم من یک رشته دارم که می دونم با md5 یا sha1 (در php ) اینطوری شده می خواستم بدونم راهه برای فهمیدن اصل رشته و توابعی که باهاش این رو کد کردند وجود داره یا نه ؟
خیلی ممنون
#3 آرمین در 1387-09-13 11:13 (پاسخ)
سلام،

تنها راهی که حتمن به جواب می‌رسه، Brute Force است! اما ممکنه زمان به جواب رسیدن چندین میلیارد میلیارد میلیارد قرن باشه!

پس می‌شه گفت در شرایط تو اصلن به جواب نمی‌رسی :-)
#3.1 امید (سایت) در 1387-09-13 23:31 (پاسخ)

ارسال نظر

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
BBCode format allowed
:'( :-) :-| :-O :-( 8-) :-D :-P ;-) 
E-Mail addresses will not be displayed and will only be used for E-Mail notifications

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

 
 
 
این سایت توسط امید متقی راد با ایدهء اصلی از طرح ولادیمیر سیمو ویچ طراحی شده است و هرگونه کپی برداری از آن با ذکر منبع آزاد است.

خوراک‌ها

XML RSS 2.0 feed
XML RSS 2.0 نظر ها

ایمیل من

omi...@gmail.com

Google the Site

موضوعات

  • XML فایرفاکس (1)
  • XML لینوکس (10)
  • XML متفرقه (23)
  • XML چیستان (2)
  • XML پی‌اچ‌پی (15)
  • XML زنگ تفریح (2)
  • XML طراحی وب (4)

تمامی موضوعات

محبوب ترین مطالب

تقویم فارسی برای Google Personalized Homepage
(95)
روش های نگهداری فیلم - بخش دوم - تبدیل فایل های تصویری
(42)
روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
(41)
زمین و گربه
(39)
تکامل چیست؟
(36)
کاراکتر های فارسی در عکس توسط PHP
(32)
بزرگ ترین عدد
(32)
11 نکته مفید در مورد فایرفاکس
(28)
تغییر ظاهر وبلاگ
(26)
چگونگی فارسی سازی phpMyAdmin
(25)

آمار

آخرین نوشته: 1387-03-31 01:22
تعداد مطالب: 59
تعداد نظر ها: 748

لینک

لینک های روزانه

مقایسه‌ی کرنل ویندوز و لینوکس
عضویت در تیم اهدای عضو
Who uses Linux?
ده تغییر مهم مهاجران به لینوکس!
بهینه سازی فایرفاکس
امنیت شبکه (باگ تراک)
طریقه توسعه افزونه، برای فایرفاکس
اینترنت اکسپلورر 7 را بمباران کنید
رفع مشکل حافظه فایرفاکس
نمایش محتویات cache شده در فایرفاکس

قبل | بعد

PageRank Counter

کپی برداری از مطالب سایت طبق لایسنس CC مجاز می باشد

Creative Commons License - Some Rights Reserved
Original content in this work is licensed under a Creative Commons License

نظر ها

امید about persian_log2vis نسخه‌ی RC3 منتشر شد
ج، 15.09.1387 03:53
کدت رو نگاه کردم. کا ر خوبی انجام دادی، ا ما فعلن خیلی ناقصه، ولی فکر می‌کنم بشه م نطقی‌تر کاملش [...]


امید about روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
ج، 15.09.1387 03:16
خدا شفاشون بده! ا ین چی؟ http://www.m playerhq.hu/DOCS/man /en/mplayer.1.html#O SD/SUBTITLE%20 [...]


nima about روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
ج، 15.09.1387 01:36
لینکی که دادی فیلتره :-)


امید about روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
پ، 14.09.1387 01:46
سلام، من زیاد با بخش زیرنویس mencoder کار نکردم. قبلن با subrip کارام رو انجا م می‌دادم. [...]


امید about MD5 چیست؟
چ، 13.09.1387 23:31
سلام، تنها راهی ک ه حتمن به جواب می‌رس ه، Brute Force است! اما ممکنه زمان به جو اب رسیدن چندین [...]


آرمین about MD5 چیست؟
چ، 13.09.1387 11:13
سلام . ممنون از مقال اتتون . یه سوال داشت م من یک رشته دارم که می دونم با md5 یا s ha1 (در php ) [...]


اميد about persian_log2vis نسخه‌ی RC3 منتشر شد
د، 11.09.1387 17:54
آقا اميد عزيز كارت خ يلي قشنگ بود. اما يه مشكل كوچيك وجود داش ت اونم fribidi . من خودم نتونستم [...]


نیما about روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
د، 11.09.1387 02:38
ممنون اون حل شد :-) فقط این زیرنویس رو ه م شامل بشه رو یکم بی شتر توضیح میدی؟ خرو جی -v اینه : [...]


امید about روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
ی، 10.09.1387 12:43
سلام، اول دی‌وی‌دی ر و بریز روی هارد، بعد از رو هارد تلاش کن تبدیل کنی. ممکنه دی‌وی‌دی‌ات مش [...]


nima about روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
ی، 10.09.1387 09:39
سلام من تو فدورا ۹ م شکل دارم اگه کمکم کن ی ممنون میشم :-) هر فیلمی رو میخوام تبدی ل کنم بعد ۶۸ ث [...]


مدیریت وبلاگ

باز کردن صفحه ورود