الـ MD5 عادة نستخدمه بشكل متكرر لذلك علينا فهمه بشكل جيد لمعرفة ماهو و ما هي امكاناته و حدوده و لتحديد استخداماته و قد لاحظت بأن ماهية هذا النظام مازالت مجهولة لدى الكثيرين؟
أتمنى أن تستفيدو من هذا الكلام الذي حاولت من خلاله تصحيح بعض الأخطاء المطروحة.
أول سؤال قد يتبادر إلى ذهن الجميع ما هي الـ MD5؟
الـ MD5 هي علاقة رياضية Hash algorithm لتوليد رقم بحيث يكون عبارة عن توقيع لهذه البيانات أي أنه ليس تشكيل آخر البيانات و ليس تشفيراً للبيانات أي عندما نستخدم دالة الـ MD5 على String فإننا لا نشفر الـ String بل نأخذ توقيعاً إلكترونياً له والأمر شبيه بالـ CRC و لهذا السبب فالناتج هو رقم له طول ثابت 128 بت و هذا الرقم يتم إظهاره بهيئة الـ HEX فيصبح طول بيانات الخرج 32 محرف لأن الرقم الأصلي يشغل حجم 16 بايت .
من مبتكر هذا النظام؟
شركة RSA Data Security .
حتى قرب الموضوع أكثر، كلنا بيشتغل على الـ Winzip! و كلنا لاحظ بأنه عندما يتغير أي بايت في الملف راح يحس البرنامج على هذا التغيير و يرسل رسالة خطأ بأن الملف تالف!
هل تعلم كيف يتم ذلك؟
يستخدم الـ Winzip مايسمى بالـ CRC ليتحقق من صحة البيانات إذ يوجد في الملف رقم تم حسابه من بيانات الملف و عند تشغيل البرنامج يقوم البرنامج بحساب الـ CRC و مقارنتها مع القيمة الموجودة في الملف .
أغلب البرامج تستخدمها و حتى ما نروح بعيد فبروتوكول الـ TCP يستخدمها في الـ HEADER للتحقق من سلامة البيانات و الهدر يسمى CRC check .
طيب ياترى ألا تجدوا بأنه من المنطقي وجود قيمتين تعطيان نفس قيمة الـ MD5 ؟
نعم و قد يكون هناك عدد كبير من التطابقات.
بسبب أن عدد احتمالات قيم الـ MD5 هو 2^128 صحيح أنها قيمة كبيرة جداً جداً جداً و لكن احتمالات البيانات بشكل عام لانهائي.
طيب مازال هذا عبارة عن توقيع فهل من الممكن أن نحصل على البيانات من الـ MD5؟
أحياناً لكن نظام الـ MD5 بالأصل قد تم إنشاؤه فقط لإضافة توقيع إلكتروني للملفات الكبيرة أو للملفات المشفرة و عندما كان نظام الـ MD4 كانت معادلته بسيطة و بالتالي عمله أسرع و بالتالي تكبر إمكانية تعرضه لـ Force Attack فابتكرو نظام الـ MD5 لجعله أبطأ نوعاً ما و أأمن من سابقه.
كيف تتم عملية الحصول على البيانات من الـ MD5؟
بعملية الـ Brute Force Attack أي بالتجريب و مطابقة النتائج يعني بيبدأ بيحسب الأحتمالات و الأمكانات و بيجرب يطلع قيمة الـ MD5 له فإن تطابقت مع المطلوب فهي الباسوورد فمثلاً بيبدأ ياخذ الـ MD5 للـ a ثم للـ b و هكذا... لكن من الممكن وجود عدد من الباسووردات لها نفس الـ MD5 و شي ثاني إذا كانت الباسوورد طويلة كفاية فستتطلب وقت كبير جداً لحلها.
ما الطريقة لحماية الباسوورد من أن تكون مكشوفة للعيان؟
بكل بساطة اعمل: Md5(MD5($Password);X أو عمل MD5 للبيانات بعد أخذ الـ CRC لها مثل md5(crc32($Password));X و بهذا إن كانت الباسوورد طولها محرف واحد فبأخذ الـ MD5 الأول لها ستعطي ناتج ذو 32 حرفاً و هذا الأخير نعمل له MD5 بهذا سيكون من المستحيل تماماً الوصول للباسوورد إذاً فالغاية من عمل ذلك مرتين هو لحماية الباسووردات القصيرة من الاختراق و لتأمين حماية مضاعفة.
(الـ X لتلافي قلب النص في الـ Right-to-left)
هل يمكن استعادة كلمة بالعربي من الـ MD5 ؟
نعم لكن البرنامج الذي يقوم بهذه العملية مازال غير موجود مع أنه من الممكن برمجته و بسهولة ولو كان ذو فائدة و استخدام لوجد من زمان.
عذراً على الأطالة و أرجو التصحيح إن بدر أي خطأ...