MD5

خوارزمية MD5 لتلخيص الرسائل هي دالة تجزئة شائعة الاستخدام تُنتج قيمة تجزئة بطول 128 بت . صُممت MD5 بواسطة رونالد ريفست عام 1991 لتحل محل دالة التجزئة السابقة MD4 ، [ 3 ] وتم تحديدها رسميًا عام 1992 في RFC 1321.

يمكن استخدام MD5 كمجموع اختباري للتحقق من سلامة البيانات وحمايتها من التلف غير المقصود. تاريخيًا، شاع استخدامه كدالة تجزئة تشفيرية ؛ إلا أنه تبين أنه يعاني من ثغرات أمنية واسعة النطاق. ومع ذلك، يظل مناسبًا لأغراض أخرى غير تشفيرية، مثل تحديد القسم لمفتاح معين في قاعدة بيانات مقسمة ، وقد يُفضل استخدامه نظرًا لمتطلباته الحسابية المنخفضة مقارنةً بخوارزميات التجزئة الآمنة الأحدث . [ 4 ]

التاريخ وتحليل الشفرات

MD5 هي إحدى خوارزميات تجزئة الرسائل التي صممها البروفيسور رونالد ريفست من معهد ماساتشوستس للتكنولوجيا (ريفست، 1992). عندما أشارت الدراسات التحليلية إلى أن خوارزمية MD4، سلف MD5، قد تكون غير آمنة، صمم ريفست MD5 في عام 1991 كبديل آمن. ( وقد اكتشف هانز دوبرتين لاحقًا نقاط ضعف في MD4).

في عام 1993، قدم دين بوير وبوسيليرز نتيجة مبكرة، وإن كانت محدودة، تتمثل في إيجاد " تصادم زائف " لوظيفة ضغط MD5 ؛ أي متجهي تهيئة مختلفين ينتجان ملخصًا متطابقًا.

في عام 1996، أعلن دوبيرتين عن وجود خلل في وظيفة ضغط MD5 (دوبيرتين، 1996). ورغم أن هذا لم يكن هجومًا على وظيفة تجزئة MD5 الكاملة، إلا أنه كان قريبًا بما يكفي ليوصي خبراء التشفير بالتحول إلى بديل، مثل SHA-1 (الذي تم اختراقه أيضًا منذ ذلك الحين) أو RIPEMD-160 .

حجم قيمة التجزئة (128 بت) صغير بما يكفي لإمكانية استغلاله في هجوم عيد الميلاد . كان مشروع MD5CRK مشروعًا لامركزيًا بدأ في مارس 2004 لإثبات أن خوارزمية MD5 غير آمنة عمليًا من خلال إيجاد تصادم باستخدام هجوم عيد الميلاد.

انتهت مسابقة MD5CRK بعد فترة وجيزة من 17 أغسطس 2004، عندما أعلن كل من شياويون وانغ ، ودينغقو فنغ، وشويجيا لاي ، وهونغبو يو عن اكتشاف تصادمات لخوارزمية MD5 الكاملة. [ 5 ] [ 6 ] وقد أفيد بأن هجومهم التحليلي استغرق ساعة واحدة فقط على مجموعة حواسيب IBM p690 . [ 7 ]

في الأول من مارس/آذار 2005، قدّم كلٌّ من أرجين لينسترا ، وشياويون وانغ ، وبين دي ويغر عرضًا عمليًا لإنشاء شهادتين من نوع X.509 بمفتاحين عامين مختلفين وقيمة تجزئة MD5 متطابقة، ما يُثبت إمكانية حدوث تصادم عملي. [ 8 ] وتضمّن هذا الإنشاء مفاتيح خاصة لكلا المفتاحين العامين. بعد بضعة أيام، وصف فلاستيميل كليما خوارزمية مُحسّنة، قادرة على إنشاء تصادمات MD5 في غضون ساعات قليلة على جهاز حاسوب محمول واحد. [ 9 ] وفي 18 مارس/آذار 2006، نشر كليما خوارزمية قادرة على إيجاد تصادم في غضون دقيقة واحدة على جهاز حاسوب محمول واحد، باستخدام طريقة أطلق عليها اسم "النفق". [ 10 ]

نُشرت العديد من تصحيحات RFC المتعلقة بـ MD5 . في عام 2009، استخدمت القيادة السيبرانية الأمريكية قيمة تجزئة MD5 لبيان مهمتها كجزء من شعارها الرسمي. [ 11 ]

في 24 ديسمبر 2010، أعلن تاو شي ودينغقو فينغ عن أول تصادم منشور لكتلة واحدة (512 بت) باستخدام خوارزمية MD5. [ 12 ] (اعتمدت اكتشافات التصادم السابقة على هجمات متعددة الكتل). ولأسباب أمنية، لم يكشف شي وفينغ عن طريقة الهجوم الجديدة. ووجّها تحديًا لمجتمع التشفير، عارضين مكافأة قدرها 10,000 دولار أمريكي لأول من يكتشف تصادمًا مختلفًا بحجم 64 بايت قبل 1 يناير 2013. استجاب مارك ستيفنز للتحدي ونشر رسائل متصادمة لكتلة واحدة، بالإضافة إلى خوارزمية البناء والمصادر. [ 13 ]

في عام 2011 تمت الموافقة على RFC 6151 المعلوماتي [ 14 ] لتحديث اعتبارات الأمان في MD5 [ 15 ] وHMAC-MD5. [ 16 ]

حماية

من المتطلبات الأساسية لأي دالة تجزئة تشفيرية أن يكون من المستحيل حسابيًا إيجاد رسالتين مختلفتين تُجزئان إلى نفس القيمة. يفشل MD5 في تحقيق هذا الشرط فشلًا ذريعًا. في 31 ديسمبر 2008، خلص معهد هندسة البرمجيات بجامعة كارنيجي ميلون إلى أن MD5 "معطل تشفيريًا وغير مناسب للاستخدام". [ 17 ] وقد استُغلت نقاط ضعف MD5 في الواقع، وأشهرها برنامج Flame الخبيث عام 2012. (حتى عام 2019)لا يزال خوارزمية MD5 مستخدمة على نطاق واسع، على الرغم من نقاط ضعفها الموثقة جيدًا وتخلي خبراء الأمن عنها. [ 18 ]

يوجد هجوم تصادم قادر على اكتشاف التصادمات في غضون ثوانٍ على جهاز كمبيوتر بمعالج  بنتيوم 4 بسرعة 2.6 جيجاهرتز (تعقيد 2^ 24.1 ). [ 19 ] علاوة على ذلك، يوجد أيضًا هجوم تصادم البادئة المختارة ، القادر على إحداث تصادم بين مدخلين ببادئات محددة في غضون ثوانٍ، باستخدام أجهزة حاسوب جاهزة (تعقيد 2^ 39 ). [ 20 ] وقد ساهم استخدام وحدات معالجة الرسومات الجاهزة بشكل كبير في تعزيز القدرة على اكتشاف التصادمات . فعلى سبيل المثال، يمكن لمعالج الرسومات NVIDIA GeForce 8400GS حساب ما بين 16 و18 مليون تجزئة في الثانية. بينما يستطيع معالج NVIDIA GeForce 8800 Ultra حساب أكثر من 200 مليون تجزئة في الثانية. [ 21 ]

لقد تم إثبات هذه الهجمات المتعلقة بالتجزئة والتصادم علنًا في مواقف مختلفة، بما في ذلك تصادم ملفات المستندات [ 22 ] [ 23 ] والشهادات الرقمية [ 24 ] . وحتى عام 2015، تبين أن خوارزمية MD5 لا تزال مستخدمة على نطاق واسع، لا سيما من قبل شركات أبحاث الأمن وبرامج مكافحة الفيروسات [ 25 ] .

اعتبارًا من عام 2019، أفادت التقارير أن ربع أنظمة إدارة المحتوى المستخدمة على نطاق واسع لا تزال تستخدم MD5 لتجزئة كلمات المرور . [ 18 ]

نظرة عامة على القضايا الأمنية

في عام 1996، تم اكتشاف ثغرة في تصميم خوارزمية MD5. ورغم أنها لم تُعتبر نقطة ضعف قاتلة آنذاك، بدأ خبراء التشفير بالتوصية باستخدام خوارزميات أخرى، مثل SHA-1 ، التي تبيّن لاحقًا أنها عرضة للاختراق أيضًا. [ 26 ] وفي عام 2004، تبيّن أن MD5 غير مقاومة للتصادم . [ 27 ] ولذلك، فإن MD5 غير مناسبة لتطبيقات مثل شهادات SSL أو التوقيعات الرقمية التي تعتمد على هذه الخاصية في الأمن الرقمي. كما اكتشف الباحثون ثغرات أكثر خطورة في MD5، ووصفوا هجوم تصادم محتمل - وهو أسلوب لإنشاء زوج من المدخلات تُنتج MD5 مجموعًا اختباريًا متطابقًا له . [ 5 ] [ 28 ] وقد تحققت مزيد من التقدم في اختراق MD5 في أعوام 2005 و2006 و2007. [ 29 ] وفي ديسمبر 2008، استخدمت مجموعة من الباحثين هذه التقنية لتزييف صلاحية شهادات SSL . [ 24 ] [ 30 ]

اعتبارًا من عام 2010، اعتبر معهد هندسة البرمجيات بجامعة كارنيجي ميلون خوارزمية MD5 "مخترقة تشفيريًا وغير مناسبة للاستخدام المستقبلي"، [ 17 ] وتتطلب معظم تطبيقات الحكومة الأمريكية الآن عائلة دوال التجزئة SHA-2 . [ 31 ] وفي عام 2012، استغل برنامج Flame الخبيث نقاط الضعف في خوارزمية MD5 لتزييف توقيع رقمي لشركة مايكروسوفت . [ 32 ]

نقاط ضعف التصادم

في عام 1996، تم اكتشاف تصادمات في دالة الضغط الخاصة بـ MD5، وكتب هانز دوبرتين في النشرة الفنية لمختبرات RSA : "لا يهدد الهجوم المقدم التطبيقات العملية لـ MD5 حتى الآن، ولكنه يقترب من ذلك إلى حد ما ... في المستقبل، يجب عدم استخدام MD5 ... حيثما تكون هناك حاجة إلى دالة تجزئة مقاومة للتصادم." [ 33 ]

في عام 2005، تمكن الباحثون من إنشاء أزواج من مستندات PostScript [ 34 ] وشهادات X.509 [ 35 ] بنفس قيمة التجزئة. وفي وقت لاحق من ذلك العام، كتب رون ريفست، مصمم خوارزمية MD5 ، أن "خوارزميتي md5 وsha1 معيبتان بشكل واضح (من حيث مقاومة التصادم)". [ 36 ]

في 30 ديسمبر 2008، أعلن فريق من الباحثين في المؤتمر الخامس والعشرين لتواصل الفوضى عن استخدامهم لتصادمات MD5 لإنشاء شهادة وسيطة تبدو شرعية عند التحقق منها باستخدام تجزئة MD5 الخاصة بها. [ 24 ] استخدم الباحثون مجموعة حواسيب PS3 في المعهد الفدرالي السويسري للتكنولوجيا في لوزان [ 37 ] لتحويل شهادة SSL عادية صادرة عن RapidSSL إلى شهادة CA صالحة لتلك الجهة المصدرة، والتي يمكن استخدامها بعد ذلك لإنشاء شهادات أخرى تبدو شرعية وصادرة عن RapidSSL. وأعلنت شركة Verisign ، الجهة المصدرة لشهادات RapidSSL، أنها أوقفت إصدار شهادات جديدة باستخدام MD5 كخوارزمية للتحقق من المجموع الاختباري لشهادات RapidSSL بمجرد الإعلان عن الثغرة الأمنية. [ 38 ] على الرغم من رفض شركة Verisign إلغاء الشهادات الحالية الموقعة باستخدام MD5، إلا أن ردها اعتُبر كافيًا من قِبل مُنشئي الثغرة ( ألكسندر سوتيروف ، ومارك ستيفنز ، وجاكوب أبيلباوم ، وأرجين لينسترا ، وديفيد مولنار، وداغ آرني أوسفيك، وبين دي ويغر). [ 24 ] كتب بروس شناير عن الهجوم: "كنا نعلم مُسبقًا أن MD5 دالة تجزئة معيبة" وأنه "لا ينبغي لأحد استخدامها بعد الآن". [ 39 ] كتب باحثو SSL: "نهدف إلى أن تتوقف هيئات إصدار الشهادات عن استخدام MD5 في إصدار الشهادات الجديدة. كما نأمل أن يُعاد النظر في استخدام MD5 في التطبيقات الأخرى أيضًا". [ 24 ]

في عام 2012، ووفقًا لمايكروسوفت ، استخدم مؤلفو برمجية Flame الخبيثة تصادم MD5 لتزوير شهادة توقيع رمز ويندوز. [ 32 ]

تستخدم خوارزمية MD5 بنية Merkle–Damgård ، لذا إذا أمكن إنشاء بادئتين لهما نفس قيمة التجزئة، يُمكن إضافة لاحقة مشتركة لكلتيهما لزيادة احتمالية قبول التطبيق المُستخدم للتصادم كبيانات صالحة. علاوة على ذلك، تسمح تقنيات اكتشاف التصادم الحالية بتحديد بادئة عشوائية : إذ يُمكن للمهاجم إنشاء ملفين متصادمين يبدآن بنفس المحتوى. كل ما يحتاجه المهاجم لإنشاء ملفين متصادمين هو ملف نموذجي يحتوي على كتلة بيانات بحجم 128 بايت، مُحاذية على حد 64 بايت، يُمكن لخوارزمية اكتشاف التصادم تعديله بحرية. مثال على تصادم MD5، حيث يختلف الرسالتان في 6 بايتات:

d131dd02c5e6eec4 693d9a0698aff95c 2fcab5 8 712467eab 4004583eb8fb7f89 55ad340609f4b302 83e4888325 7 1415a 085125e8f7cdc99f d91dbd f 280373c5b d8823e3156348f5b ae6dacd436c919c6 dd53e2 b 487da03fd 02396306d248cda0 e99f33420f577ee8 ce54b67080 إلى 80d1e c69821bcb6a88393 96f965 2 b6ff72a70
d131dd02c5e6eec4 693d9a0698aff95c 2fcab5 0 712467eab 4004583eb8fb7f89 55ad340609f4b302 83e4888325 f 1415a 085125e8f7cdc99f d91dbd 7 280373c5b d8823e3156348f5b ae6dacd436c919c6 dd53e2 3 487da03fd 02396306d248cda0 e99f33420f577ee8 ce54b67080 2 80d1e c69821bcb6a88393 96f965 إلى b6ff72a70

كلاهما يُنتج تجزئة MD5 79054025255fb1a26e4bc422aef54eb4. [ 40 ] الفرق بين العينتين هو أن البت الأول في كل نصف بايت قد تم قلبه. على سبيل المثال، البايت رقم 20 (الإزاحة 0x13) في العينة العلوية، 0x87، هو 10000111 بالنظام الثنائي. يتم قلب البت الأول في البايت (وهو أيضًا البت الأول في النصف بايت الأول) ليصبح 00000111، وهو 0x07، كما هو موضح في العينة السفلية.

لاحقًا، تبيّن أيضًا إمكانية إنشاء تصادمات بين ملفين باستخدام بادئات مختارة بشكل منفصل. استُخدمت هذه التقنية في إنشاء شهادة CA مزوّرة عام 2008. وفي عام 2014، اقترح أنطون كوزنتسوف صيغة جديدة للبحث المتوازي عن التصادمات باستخدام MPI ، مما مكّن من إيجاد تصادم في غضون 11 ساعة على مجموعة حاسوبية. [ 41 ]

ثغرة ما قبل الصورة

في أبريل 2009، نُشر هجومٌ على خوارزمية MD5 يكسر مقاومتها للصورة الأصلية . هذا الهجوم نظريٌّ فقط، وتبلغ تعقيداته الحسابية 2^ 123.4 للصورة الأصلية الكاملة. [ 42 ] [ 43 ]

التطبيقات

تُستخدم خوارزمية MD5 على نطاق واسع في عالم البرمجيات لضمان وصول الملفات المنقولة سليمة. فعلى سبيل المثال، غالبًا ما توفر خوادم الملفات قيمة MD5 مُحسوبة مسبقًا (تُعرف باسم md5sum ) للملفات، ليتمكن المستخدم من مقارنة قيمة MD5 للملف المُنزّل بها. تتضمن معظم أنظمة التشغيل المبنية على يونكس أدوات حساب قيمة MD5 ضمن حزم التوزيع الخاصة بها؛ ويمكن لمستخدمي ويندوز استخدام دالة PowerShell المضمنة "Get-FileHash"، أو دالة سطر الأوامر المضمنة "certutil -hashfile <filename> md5"، [ 44 ] [ 45 ] أو تثبيت أداة من مايكروسوفت، [ 46 ] [ 47 ] أو استخدام تطبيقات خارجية. كما تستخدم أنظمة أندرويد ROM هذا النوع من التحقق من القيم.

رسم تخطيطي يوضح استخدام خوارزمية التجزئة MD5 في نقل الملفات
رسم تخطيطي يوضح استخدام خوارزمية التجزئة MD5 في نقل الملفات

نظرًا لسهولة حدوث تصادمات في خوارزمية MD5، فمن الممكن للشخص الذي أنشأ الملف إنشاء ملف ثانٍ بنفس قيمة التحقق، لذا لا تستطيع هذه التقنية الحماية من بعض أشكال التلاعب الخبيث. في بعض الحالات، لا يمكن الوثوق بقيمة التحقق (على سبيل المثال، إذا تم الحصول عليها عبر نفس قناة تنزيل الملف)، وفي هذه الحالة، لا توفر خوارزمية MD5 سوى وظيفة التحقق من الأخطاء: حيث ستتعرف على التنزيل التالف أو غير المكتمل، وهو أمر يزداد احتماله عند تنزيل ملفات كبيرة الحجم.

تاريخيًا، استُخدمت خوارزمية MD5 لتخزين تجزئة أحادية الاتجاه لكلمة المرور ، غالبًا مع تمديد المفتاح . [ 48 ] [ 49 ] لا تُدرج NIST خوارزمية MD5 في قائمة التجزئات الموصى بها لتخزين كلمات المرور. [ 50 ]

يُستخدم خوارزمية MD5 أيضًا في مجال الاكتشاف الإلكتروني ، لتوفير مُعرّف فريد لكل وثيقة يتم تبادلها خلال عملية الاكتشاف القانوني. يمكن استخدام هذه الطريقة كبديل لنظام ترقيم بيتس الذي استُخدم لعقود في تبادل الوثائق الورقية. وكما ذُكر سابقًا، يُنصح بتجنب هذا الاستخدام نظرًا لسهولة اختراقه.

الخوارزمية

الشكل 1. عملية MD5 واحدة. تتكون MD5 من 64 عملية من هذا النوع، مُجمّعة في أربع جولات، كل جولة تتكون من 16 عملية. F دالة غير خطية؛ تُستخدم دالة واحدة في كل جولة. يُمثل Mi كتلة من 32 بت من مُدخل الرسالة، بينما يُمثل Ki ثابتًا من 32 بت، يختلف باختلاف كل عملية. <<< s يُمثل تدويرًا للبتات إلى اليسار بمقدار s خانة ؛ وتختلف قيمة s باختلاف كل عملية.{\displaystyle \boxplus }يشير إلى الجمع بتردد 2 32 .

تعالج خوارزمية MD5 رسالة متغيرة الطول إلى مخرج ثابت الطول يبلغ 128 بت. تُقسّم الرسالة المدخلة إلى أجزاء من كتل طول كل منها 512 بت (ستة عشر كلمة، كل منها 32 بت). تُضاف أصفار إلى الرسالة دائمًا حتى لو كان طولها الأصلي يقبل القسمة على 512 (انظر RFC 1321، القسم 3.1). تتم عملية إضافة الأصفار كالتالي: أولًا، يُضاف بت واحد، وهو 1، إلى نهاية الرسالة. ثم يُضاف عدد من الأصفار يكفي لجعل طول الرسالة أقل بمقدار 64 بت من مضاعفات العدد 512. تُملأ البتات المتبقية بـ 64 بت تمثل طول الرسالة الأصلية، بتردد 2^ 64 .

تعمل خوارزمية MD5 الرئيسية على حالة مكونة من 128 بت، مقسمة إلى أربع كلمات، كل منها 32 بت، يُرمز لها بـ A و B و C و D. تُهيأ هذه الكلمات بقيم ثابتة محددة. ثم تستخدم الخوارزمية الرئيسية كل كتلة رسالة، كل منها 512 بت، بدورها لتعديل الحالة. تتكون معالجة كتلة الرسالة من أربع مراحل متشابهة، تُسمى جولات ؛ تتألف كل جولة من 16 عملية متشابهة تعتمد على دالة غير خطية F ، والجمع المعياري، والتدوير إلى اليسار. يوضح الشكل 1 عملية واحدة ضمن جولة. هناك أربع دوال ممكنة؛ تُستخدم دالة مختلفة في كل جولة.

F(ب،ج،د)=(بج)(¬بد)جي(ب،ج،د)=(بد)(ج¬د)ح(ب،ج،د)=بجدأنا(ب،ج،د)=ج(ب¬د){\displaystyle {\begin{aligned}F(B,C,D)&=(B\wedge {C})\vee (\neg {B}\wedge {D})\\G(B,C,D)&=(B\wedge {D})\vee (C\wedge \neg {D})\\H(B,C,D)&=B\oplus C\oplus D\\I(B,C,D)&=C\oplus (B\vee \neg {D})\end{aligned}}}

،،،¬{\displaystyle \oplus ,\wedge ,\vee ,\neg }تشير إلى عمليات XOR و AND و OR و NOT على التوالي.

الشفرة الزائفة

يتم حساب قيمة التجزئة MD5 وفقًا لهذه الخوارزمية. [ 51 ] جميع القيم بتنسيق little-endian .

// : جميع المتغيرات من نوع unsigned 32 بت، وتُحسب باستخدام modulo 2^32 عند الحساب. var int s[64], K[64] var int i // يحدد s كميات الوردية لكل جولة s[0..15] := {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22} s[16..31] := { 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20 } s[32..47] := { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23 } s[48..63] := { 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 } // استخدم الجزء الثنائي الصحيح من جيوب الأعداد الصحيحة (بالراديان) كثوابت: for i from 0 to 63 do K[i] := floor(2 32 × abs(sin(i + 1))) end for // (أو استخدم الجدول المحسوب مسبقًا التالي): K[ 0.. 3] := { 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee } K[4..7] := {0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501} K[8..11] := { 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be } K[12..15] := { 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821 } K[16..19] := { 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa } K[20..23] := { 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8 } K[24..27] := { 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed } K[28..31] := { 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a } K[32..35] := { 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c } K[36..39] := { 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70 } K[40..43] := { 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05 } K[44..47] := { 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665 } K[48..51] := { 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039 } K[52..55] := { 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1 } K[56..59] := { 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1 } K[60..63] := { 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 } // تهيئة المتغيرات: var int a0 := 0x67452301 // A var int b0 := 0xefcdab89 // B var int c0 := 0x98badcfe // C var int d0 := 0x10325476 // D// المعالجة المسبقة: إضافة بت واحد بقيمة 1، إلحاق البت "1" بالرسالة < // ملاحظة: تُعتبر البايتات المدخلة سلاسل بتات، // حيث يمثل البت الأول البت الأكثر أهمية في البايت. [ 52 ]// المعالجة المسبقة: إضافة أصفار، ثم إلحاق بت "0" حتى يصبح طول الرسالة بالبتات ≡ 448 (mod 512) // ملاحظة: تم تنفيذ خطوتي الحشو المذكورتين أعلاه بطريقة أبسط // في التطبيقات التي تعمل فقط مع البايتات الكاملة: أضف 0x80 // وقم بتعبئة البيانات بـ 0x00 بايت بحيث يكون طول الرسالة بالبايت ≡ 56 (mod 64).أضف الطول الأصلي بالبتات modulo 264 إلى الرسالة// معالجة الرسالة على شكل أجزاء متتالية بحجم 512 بت: لكل جزء من الرسالة المبطنة بحجم 512 بت، قم بما يلي: قسّم الجزء إلى ستة عشر كلمة من 32 بت M[j]، حيث 0 ≤ j ≤ 15  // تهيئة قيمة التجزئة لهذه الكتلة: var int A := a0 var int B := b0 var int C := c0 var int D := d0  // الحلقة الرئيسية: for i from 0 to 63 do var int F, g if 0 ≤ i ≤ 15 then F := (B and C) or (( not B) and D) g := i وإلا إذا كان 16 ≤ i ≤ 31 فإن F := (D و B) أو (( ليس D) و C) g := (5×i + 1) mod 16، وإلا إذا كان 32 ≤ i ≤ 47 فإن F := B xor C xor D g := (3×i + 5) mod 16 else if 48 ≤ i ≤ 63 then F := C xor (B or ( not D)) g := (7×i) mod 16  // انتبه للتعريفات التالية لـ a و b و c و d F := F + A + K[i] + M[g] // يجب أن يكون M[g] كتلة 32 بت أ := د D := C ج := ب B := B + leftrotate (F, s[i]) end for  // أضف قيمة التجزئة لهذه القطعة إلى النتيجة حتى الآن: a0 := a0 + A b0 := b0 + B c0 := c0 + C d0 := d0 + D نهاية لـvar char digest[16] := a0 append b0 append c0 append d0 // (الإخراج بنظام little-endian)

بدلاً من الصيغة الموضحة في RFC 1321 الأصلي، يمكن استخدام الصيغة التالية لتحسين الكفاءة (مفيدة في حال استخدام لغة التجميع - وإلا، سيقوم المترجم عادةً بتحسين الكود أعلاه. ونظرًا لأن كل عملية حسابية تعتمد على الأخرى في هذه الصيغ، فإن هذا غالبًا ما يكون أبطأ من الطريقة المذكورة أعلاه حيث يمكن تنفيذ عمليات NAND/AND بالتوازي):

( 0 ≤ i ≤ 15): F := D xor (B and (C xor D)) (16 ≤ i ≤ 31): F := C xor (D and (B xor C))

تجزئات MD5

تُمثَّل تجزئات MD5 ذات 128 بت (16 بايت) (وتُسمى أيضًا ملخصات الرسائل ) عادةً كسلسلة من 32 رقمًا سداسيًا عشريًا . يوضح المثال التالي مُدخل ASCII بحجم 43 بايت وتجزئة MD5 المقابلة له:

MD5(" The quick brown fox jumps over the lazy dog ") = 9e107d9d372bb6826bd81d3542a419d6

حتى تغيير بسيط في الرسالة سيؤدي (باحتمالية كبيرة جدًا) إلى قيمة تجزئة مختلفة تمامًا، وذلك بسبب تأثير التراكم . على سبيل المثال، إضافة نقطة في نهاية الجملة:

MD5(" The quick brown fox jumps over the lazy dog . ") = e4d909c290d0fb1ca068ffaddf22cbd0

قيمة التجزئة للسلسلة ذات الطول الصفري هي:

MD5("") = d41d8cd98f00b204e9800998ecf8427e

تم تحديد خوارزمية MD5 للرسائل التي تتكون من أي عدد من البتات؛ فهي لا تقتصر على مضاعفات ثمانية بتات ( أوكتيتات ، بايتات ). قد تقتصر بعض تطبيقات MD5، مثل md5sum، على الأوكتيتات، أو قد لا تدعم البث المباشر للرسائل ذات الطول غير المحدد مسبقًا.

التطبيقات

فيما يلي قائمة بمكتبات التشفير التي تدعم خوارزمية MD5:

انظر أيضاً

مراجع

  1. ريفست، ر. (أبريل 1992). "الخطوة 4. معالجة الرسالة في كتل من 16 كلمة" . خوارزمية MD5 لتلخيص الرسائل . IETF . ص  5.  القسم  3.4. doi : 10.17487/RFC1321 . RFC 1321. تم الاطلاع عليه في 10 أكتوبر 2018 .
  2. شي تاو؛ فانباو ليو؛ دينغقو فنغ (2013). "هجوم التصادم السريع على MD5" (ملف PDF) . أرشيف الطباعة الإلكترونية لعلم التشفير . مؤرشف (ملف PDF) من الأصل في 2 فبراير 2021. تم الاطلاع عليه في 3 ديسمبر 2013 .
  3. سيامبا، مارك (2009). شهادة CompTIA Security+ 2008 بالتفصيل . أستراليا؛ الولايات المتحدة: Course Technology/Cengage Learning. ص 290. ISBN  978-1-59863-913-1.
  4. كليمان، مارتن (2 أبريل 2017). تصميم التطبيقات كثيفة البيانات: الأفكار الرئيسية وراء الأنظمة الموثوقة والقابلة للتوسع والصيانة ( الطبعة الأولى). دار نشر أورايلي ميديا. ص 203. ISBN   978-1449373320.
  5. 1 2 ج. بلاك، م. كوكران، ت. هايلاند: دراسة لهجمات MD5: رؤى وتحسينات مؤرشفة في 1 يناير 2015 في Wayback Machine ، 3 مارس 2006. تم استرجاعها في 27 يوليو 2008.
  6. هوكس، فيليب؛ بادون، مايكل؛ روز، غريغوري ج. (13 أكتوبر 2004). "تأملات حول تصادم وانغ وآخرون في MD5" . أرشيف الطباعة الإلكترونية لعلم التشفير . مؤرشف من الأصل في 5 نوفمبر 2018. تم الاسترجاع في 10 أكتوبر 2018 .
  7. بيشوب فوكس (26 سبتمبر 2013). "مولدات تصادم سريعة من نوع MD5 وMD4" . بيشوب فوكس . مؤرشف من الأصل في 26 أبريل 2017. تم الاطلاع عليه في 10 فبراير 2014 .
  8. لينسترا، أرجين ؛ وانغ، شياويون ؛ ويغر، بيني دي (1 مارس 2005). "شهادات X.509 المتضاربة" . أرشيف الطباعة الإلكترونية لعلم التشفير . مؤرشف من الأصل في 23 مايو 2017. تم الاطلاع عليه في 10 أكتوبر 2018 .
  9. كليما، فلاستيميل (5 مارس 2005). "إيجاد تصادمات MD5 - لعبة لدفتر ملاحظات" . أرشيف الطباعة الإلكترونية لعلم التشفير . مؤرشف من الأصل في 17 مايو 2017. تم الاسترجاع في 10 أكتوبر 2018 . 
  10. فلاستيميل كليما: الأنفاق في دوال التجزئة: تصادمات MD5 في غضون دقيقة واحدة. مؤرشف في 6 أغسطس 2011 في آلة Wayback ، تقرير أرشيف الطباعة الإلكترونية لعلم التشفير 2006/105، 18 مارس 2006، تمت مراجعته في 17 أبريل 2006. تم استرجاعه في 27 يوليو 2008.
  11. "فك الشفرة! حل لغز شعار القيادة السيبرانية" . القيادة السيبرانية الأمريكية . وايرد نيوز . 8 يوليو 2010. مؤرشف من الأصل في 17 فبراير 2014. تم الاطلاع عليه في 29 يوليو 2011 .
  12. تاو شي؛ دينغقو فنغ (2010). "إنشاء تصادمات MD5 باستخدام كتلة واحدة فقط من الرسالة" (ملف PDF) . مؤرشف من الأصل في 14 مايو 2017. تم الاطلاع عليه في 28 يوليو 2011 .
  13. "مارك ستيفنز - بحث - هجوم تصادم أحادي الكتلة على خوارزمية MD5" . Marc-stevens.nl. 2012. مؤرشف من الأصل في 15 مايو 2017. تم الاطلاع عليه في 10 أبريل 2014 .
  14. تيرنر، شون (مارس 2011). "RFC 6151 - اعتبارات أمنية مُحدَّثة لخوارزميتي MD5 Message-Digest وHMAC-MD5" . فريق عمل هندسة الإنترنت . doi : 10.17487/RFC6151 . مؤرشف من الأصل في 15 يونيو 2017. تم الاطلاع عليه في 11 نوفمبر 2013 .
  15. ريفست، رونالد ل. (أبريل 1992). "RFC 1321 - خوارزمية MD5 لتلخيص الرسائل" . فريق عمل هندسة الإنترنت . doi : 10.17487/RFC1321 . hdl : 1721.1/149165 . مؤرشف من الأصل في 9 أبريل 2021. تم الاطلاع عليه في 5 أكتوبر 2013 .
  16. كراوتشيك، هوغو؛ بيلاري، ميهير؛ كانيتي، ران (فبراير 1997). "RFC 2104 – HMAC: التجزئة المفتاحية لمصادقة الرسائل" . فريق عمل هندسة الإنترنت . doi : 10.17487/RFC2104 . مؤرشف من الأصل في 15 أبريل 2021. تم الاسترجاع في 5 أكتوبر 2013 .
  17. 1 2 دوغيرتي، تشاد ر. (31 ديسمبر 2008). "ملاحظة حول الثغرة الأمنية VU#836068: MD5 عرضة لهجمات التصادم" . قاعدة بيانات ملاحظات الثغرات الأمنية . مركز الاستجابة للطوارئ الحاسوبية (CERT)، معهد هندسة البرمجيات، جامعة كارنيجي ميلون. مؤرشف من الأصل في 26 يوليو 2011. تم الاطلاع عليه في 3 فبراير 2017 .
  18. 1 2 سيمبانو، كاتالين. "ربع أنظمة إدارة المحتوى الرئيسية تستخدم خوارزمية MD5 القديمة كخوارزمية تجزئة كلمات المرور الافتراضية" . ZDNet . مؤرشف من الأصل في 24 يناير 2021. تم الاطلاع عليه في 17 يونيو 2019 .
  19. إم إم جيه ستيفنز (يونيو 2007). حول التصادمات لـ MD5 (ملف PDF) (رسالة ماجستير). مؤرشف (ملف PDF) من الأصل في 17 مايو 2017. تم الاطلاع عليه في 31 مارس 2010 .
  20. ^ مارك ستيفنز. ارين لينسترا؛ بيني دي فيجر (16 يونيو 2009). "تصادمات البادئة المختارة لـ MD5 والتطبيقات" (PDF) . مدرسة البوليتكنيك الفيدرالية في لوزان . مؤرشفة من الأصلي (PDF) في 9 نوفمبر 2011 . تم الاسترجاع 31 مارس 2010 .
  21. "برنامج جديد لفك تشفير MD5 باستخدام وحدة معالجة الرسومات يفك أكثر من 200 مليون تجزئة في الثانية" . مؤرشف من الأصل بتاريخ 11 مايو 2011. تم الاطلاع عليه بتاريخ 25 مارس 2011 .
  22. ماغنوس داوم، ستيفان لوكس . "تصادمات التجزئة (هجوم الرسالة المسمومة)" . جلسة يورو كريبت 2005. مؤرشف من الأصل في 27 مارس 2010.
  23. ماكس جيبهاردت؛ جورج إيليس؛ فيرنر شيندلر (31 أكتوبر 2005). "ملاحظة حول القيمة العملية لتصادمات التجزئة الفردية لتنسيقات الملفات الخاصة" (ملف PDF) . المعهد الوطني للمعايير والتكنولوجيا . مؤرشف من الأصل (ملف PDF) في 17 سبتمبر 2008.
  24. 1 2 3 4 5 سوتيروف، ألكسندر؛ مارك ستيفنز؛ جاكوب أبلباوم؛ ارين لينسترا؛ ديفيد مولنار؛ داج آرني أوسفيك؛ بيني دي فيجر (30 ديسمبر 2008). "يعتبر MD5 ضارًا اليوم" . أرشفة من الأصلي في 25 مارس 2017 . تم الاسترجاع 30 ديسمبر 2008 .تم الإعلان عنه وأرشفته في 16 نوفمبر 2018 في Wayback Machine في المؤتمر الخامس والعشرين للاتصالات الفوضوية .
  25. "فيروس MD5 السام - ذئاب بين الخراف | مدونة سايلنت سيجنال التقنية" . 10 يونيو 2015. مؤرشف من الأصل في 10 يونيو 2015. تم الاطلاع عليه في 10 يونيو 2015 .
  26. هانز دوبرتين (صيف 1996). "وضع خوارزمية MD5 بعد هجوم حديث" . كريبتوبايتس . تم الاطلاع عليه بتاريخ 22 أكتوبر 2013 .
  27. شياويون وانغ؛ هونغبو يو (2005). "كيفية اختراق خوارزمية MD5 وغيرها من دوال التجزئة" (ملف PDF) . التطورات في علم التشفير - محاضرات في علوم الحاسوب . الصفحات 19-35 . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 21 مايو 2009. تم الاطلاع عليه بتاريخ 21 ديسمبر 2009 . 
  28. شياويون وانغ، دينغقو، ك.، م.، م، هافال-128 وريبمد ، تقرير أرشيف الطباعة الإلكترونية لعلم التشفير 2004/199، 16 أغسطس 2004، تمت مراجعته في 17 أغسطس 2004. تم استرجاعه في 27 يوليو 2008.
  29. مارك ستيفنز، أرجين لينسترا، بيني دي ويجر: ضعف تطبيقات سلامة البرمجيات وتوقيع التعليمات البرمجية أمام تصادمات البادئات المختارة لـ MD5. مؤرشف في 13 ديسمبر 2007 في Wayback Machine ، 30 نوفمبر 2007. تم استرجاعه في 27 يوليو 2008.
  30. ستراي، جوناثان (30 ديسمبر 2008). "ثغرة في متصفح الويب قد تُعرّض أمن التجارة الإلكترونية للخطر" . CNET.com . مؤرشف من الأصل في 28 أغسطس 2013. تم الاطلاع عليه في 24 فبراير 2009 .
  31. "NIST.gov — قسم أمن الحاسوب — مركز موارد أمن الحاسوب" . Csrc.nist.gov. مؤرشف من الأصل في 9 يونيو 2011. تم الاطلاع عليه في 9 أغسطس 2010 .  
  32. 1 2 "شرح هجوم تصادم برمجية فليم الخبيثة" . مؤرشف من الأصل في 8 يونيو 2012. تم الاطلاع عليه في 7 يونيو 2012 .
  33. دوبيرتين، هانز (صيف 1996). "وضع MD5 بعد هجوم حديث" (ملف PDF) . مختبرات RSA، كريبتوبايتس ( FTP ). ص 1. تاريخ الاسترجاع: 10 أغسطس 2010. لا يُهدد الهجوم المذكور التطبيقات العملية لـ MD5 حتى الآن، ولكنه يُقارب ذلك. ... [ كذا ] في المستقبل، ينبغي عدم استخدام MD5 ... [ كذا ] حيثما تكون هناك حاجة إلى دالة تجزئة مقاومة للتصادم. (للاطلاع على المستندات، انظر صفحة المساعدة: FTP )
  34. "شناير حول الأمن: المزيد من حالات تصادم MD5" . Schneier.com. مؤرشف من الأصل في 11 أبريل 2021. تم الاطلاع عليه في 9 أغسطس 2010 .
  35. "شهادات X.509 المتضاربة" . Win.tue.nl. مؤرشف من الأصل بتاريخ 15 مايو 2017. تم الاطلاع عليه بتاريخ 9 أغسطس 2010 .
  36. " [ Python-Dev ] hashlib — أسرع في حساب MD5/SHA، ويضيف دعمًا لـ SHA256/512" . Mail.python.org. 16 ديسمبر 2005. مؤرشف من الأصل في 6 مايو 2021. تم الاطلاع عليه في 9 أغسطس 2010 . 
  37. "باحثون يستخدمون مجموعة خوادم بلاي ستيشن لتزوير مفتاح هيكلي للويب" . مجلة وايرد . 31 ديسمبر 2008. مؤرشف من الأصل في 21 أبريل 2009. تم الاطلاع عليه في 31 ديسمبر 2008 .
  38. كالان، تيم (31 ديسمبر 2008). "تم حل هجوم MD5 الذي وقع هذا الصباح " . فيريساين. مؤرشف من الأصل في 16 يناير 2009. تم الاطلاع عليه في 31 ديسمبر 2008 . 
  39. بروس شناير (31 ديسمبر 2008). "تزوير شهادات SSL" . شناير حول الأمن. مؤرشف من الأصل في 9 نوفمبر 2020. تم الاطلاع عليه في 10 أبريل 2014 .
  40. إريك ريسكورلا (17 أغسطس 2004). "تصادم حقيقي بين MD5" . تخمين مدروس (مدونة) . مؤرشف من الأصل في 15 أغسطس 2014. تم الاطلاع عليه في 13 أبريل 2015 .
  41. أنطون أ. كوزنيتسوف. "خوارزمية لهجوم تصادم الكتلة المفردة باستخدام خوارزمية MD5 ومجموعة حوسبة عالية الأداء" (ملف PDF) . IACR. مؤرشف (ملف PDF) من الأصل في 4 يونيو 2016. تم الاطلاع عليه في 3 نوفمبر 2014 .
  42. يو ساساكي؛ كازومارو آوكي (16 أبريل 2009). "إيجاد الصور الأصلية في MD5 الكامل أسرع من البحث الشامل". التطورات في علم التشفير - EUROCRYPT 2009. سلسلة محاضرات في علوم الحاسوب. المجلد 5479. سبرينغر برلين هايدلبرغ . الصفحات 134-152 . doi : 10.1007/978-3-642-01001-9_8 . ISBN   978-3-642-01000-2.
  43. مينغ ماو، وشاوهوي تشين، وجين شو (2009). "بناء البنية الأولية لهجوم الصورة المسبقة على خوارزمية MD5". المؤتمر الدولي لعام 2009 حول الذكاء الحسابي والأمن . المجلد 1. جمعية IEEE للحاسبات. الصفحات 442-445 . doi : 10.1109/CIS.2009.214 . ISBN   978-0-7695-3931-7. S2CID 16512325 . 
  44. "إيجاد قيم التحقق في ويندوز 10" . مجتمع مايكروسوفت. مؤرشف من الأصل في 11 يناير 2024. تم الاطلاع عليه في 23 نوفمبر 2023 .
  45. "certutil" . certutil . Microsoft Learn. مؤرشف من الأصل في 23 نوفمبر 2023. تم الاسترجاع في 23 نوفمبر 2023 .
  46. "توافر ووصف أداة التحقق من سلامة مجموع التحقق للملفات" . دعم مايكروسوفت. 17 يونيو 2013. مؤرشف من الأصل في 15 فبراير 2015. تم الاطلاع عليه في 10 أبريل 2014 .
  47. "كيفية حساب قيم التجزئة المشفرة MD5 أو SHA-1 لملف" . دعم مايكروسوفت. 23 يناير 2007. مؤرشف من الأصل في 9 مارس 2015. تم الاطلاع عليه في 10 أبريل 2014 .
  48. "دليل FreeBSD، الأمن - DES، Blowfish، MD5، وCrypt" . مؤرشف من الأصل بتاريخ 18 فبراير 2017. تم الاطلاع عليه بتاريخ 19 أكتوبر 2014 .
  49. "ملخص - صفحات الدليل، القسم 4: تنسيقات الملفات" . Docs.oracle.com. 1 يناير 2013. مؤرشف من الأصل في 4 مارس 2016. تم الاطلاع عليه في 10 أبريل 2014 .
  50. NIST SP 800-132 مؤرشف في 1 ديسمبر 2016 في Wayback Machine القسم 5.1
  51. "مصدر مرجعي" . مؤرشف من الأصل في 21 يونيو 2021. تم الاطلاع عليه في 23 ديسمبر 2020 .
  52. RFC 1321، القسم 2، "المصطلحات والرموز"، الصفحة 2.

للمزيد من القراءة

  • بيرسون، توماس أ. (1992). "التحليل التفاضلي للتشفير Mod 2 32 مع تطبيقات على MD5". يورو كريبت . الصفحات 71-80 . ISBN  3-540-56413-6.
  • بيرت دن بوير؛ أنطون بوسيلرز (1993). “الاصطدامات لوظيفة الضغط لـ MD5”. التقدم في علم التشفير – EUROCRYPT '93 . يوروكريبت. برلين؛ لندن: سبرينغر. ص 293 – 304. ISBN  978-3-540-57600-6.
  • هانز دوبرتين، تحليل تشفير MD5 المضغوط. إعلان على الإنترنت، مايو 1996. "CiteSeerX" . Citeseer.ist.psu.edu. مؤرشف من الأصل في 24 يونيو 2008. تم الاطلاع عليه في 9 أغسطس 2010 .
  • دوبيرتين، هانز (1996). "وضع MD5 بعد هجوم حديث" . كريبتوبايتس . 2 (2).
  • شياويون وانغ؛ هونغبو يو (2005). "كيفية اختراق خوارزمية MD5 وغيرها من دوال التجزئة" (ملف PDF) . يورو كريبت . ISBN 3-540-25910-4تمت أرشفة هذا الملف من النسخة الأصلية (PDF) بتاريخ 21 مايو 2009. تم الاطلاع عليه بتاريخ 6 مارس 2008 .