السلام عليكم ورحمة الله وبركاته
هل أصبحت خوارزمية التشفير MD5 غير آمنة ويمكن كسرها بسهولة ؟ خصوصا أن هنالك آلاف المواقع والبرامج التي تفك هذا النوع من التشفير بسهولة.
وإذا لم تعد آمنة فما هو البديل ؟؟
MD5 تعمية باتجاه واحد، وهو ما يجعلها نظريا مستحيلة الكسر، والبرامج التي تتحدث عنها تعتمد على قاعدة بيانات تحتوي على مجموعة كبيرة من البيانات المعماة بنفس الخوارزمية، بمعنى آخر فإن هذه البرامج لا تفكها وإنما تقارن كلمات أخرى معماة، لهذا تجدها لا تستطيع فك كل النصوص المعماة، مع أن هناك من وجد بعض الطرق لفكها جزئيا والله أعلم.
خوارزميات الـhashing كلها مستحيلة الكسر نظرياً وعملياً ولم توجد آلية لفكها، فهي ليست "تشفير" لتفك أو تكسر، من فكرتها فهي تختزل بيانات كبيرة إلى بصمة بحجم ثابت (كـ16 بت أو 32 بت)، فكيف يمكن إسترجاع بيانات بحجم 4 جيجا من 32 بت؟
المشكلة التي تواجه خوارزميات الـhashing بأنواعها مشكلة "التصادم" [1]، أي هناك بيانات مختلفة لكنها تعطي نفس البصمة. هناك خوازميات hashing بسيطة تستخدم في أغراض مثل إنشاء القواميس hash tables، لاتوجد مشكلة كبيرة بأن يحدث تصادم، لكن خوارزميات الـhashing الموجهة للأغراض الأمنية مثل md5 وغيرها، التصادم مشكلة كبيرة، وهي المشكلة التي يحاول من يهاجم الخوارزمية استغلالها.
قد أثبتت حالات تصادم في md5 لبيانات تولد نفس البصمة، في حالات استغلت عملياً! [2]، الخوارزميات الأخرى مثل sha256 نظرياً ممكن إلا أنه لم يثبت التصادم عملياً حتى الآن [3].
[1] http://en.wikipedia.org/wik...
كلمة التعمية أقرب ل obfuscation وهي ليس لها علاقة بالتشفير كما نعلم .
أضن أن "بصمة" هي الأقرب لأن جميع أنواع hashes تعطينا "بصمة" وبواسطتها ممكن أن نقارن هل لدينا القيمة الأصلية , ربما تنفع كلمة "ضل" أيضا لكن "تعمية" لم أستسغها
هي هي غير آمنة.
لا تستخدم SHA256 أو حتى SHA512
يستحسن أن تستعمل PBKDF2 - https://en.wikipedia.org/wi...
و الأسباب:
تحمي ضد الهجمات بالقواميس و المواقع التي فيها قائمة كبيرة للهاشات.
فيها خاصية إبطاء التخمين.
آمنة كفاية و مشهورة.
هذا مثال قريب قليلا لأمان PBKDF2 يوضح كيف تقوم بالأمر بشكل صحيح:
md5 كانت ولا زالت تمتلك شعبية كبيرة لأنها أتبتث جدارتها في التسفير لسنوات - لكن المشكل هو أن توسعها الكبير في مختلف البرمجيات
جعل منها محط الأعين - وتم جمع قواعد بيانات ضخمة تستعمل للمقارنة لايجاد فك التشفير نسبيا
لكن الأمر غير مضمون بالطبع ولكن لسوء الحظ الأمر يعتمد على كلمة السر بالتأكيد بحيث بامكانك فك معضم كلمات السر السهلة
توجد عدة طرق لضمان تشفير امن نسبيا
مثلا اعادة تشفير كلمة السر
$password = md5(md5(md5($password)));
لكن دلك لا يزيد شيئا غير مدة فك التشفير
ومع دللك بالامكان استخدام md5 للتشفير باضافة تشفير تاني لها
عادة استخدم هدا الكلاس لاعادة تشفير md5 - بامكانك استخدام مفتاح خاص بك لاعادة التشفير
var $skey = "your-key";
class crypte { //do not change it again (loknhytgvfrredcsxea) var $skey = "loknhytgvfrredcsxea";
public function safe_b64encode($string) {
$data = base64_encode($string);
$data = str_replace(array('+','/','='),array('-','_',''),$data);
return $data;
}
public function safe_b64decode($string) {
$data = str_replace(array('-','_'),array('+','/'),$string);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr('====', $mod4);
}
return base64_decode($data);
}
//// Encode ////
public function encode($value){
if(!$value){return false;}
$text = $value;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->skey, $text, MCRYPT_MODE_ECB, $iv);
return trim($this->safe_b64encode($crypttext));
}
//// Decode ////
public function decode($value){
if(!$value){return false;}
$crypttext = $this->safe_b64decode($value);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->skey, $crypttext, MCRYPT_MODE_ECB, $iv);
return trim($decrypttext);
}
}
يمكنك هدا الكلاس من تشفير و اعادة الفك
لحد الان لا يوجد أي فك تشفير مضمون ل md5 فمعضمها يعتمد على قواعد بيانات ضخمة تقوم بالمقارنة لفك التشفير نسبيا.
استخدام نفس التشفير مرتين لا ينجح بل ولا يزيد من قوة التشفير مثلا إزاحة الحروف بمقدار 13 حرف rot13. يظهل التشفير ضمن نفس فضاء القوة لو استخدمته 100 مرة داخل بعض.
استخدام md5 مرتين قد يحميك على مبدأ security by minority وهي لا تعمل ولا ينصح بها.
الطريقة الصحيحة هي استخدام salt عشوائي مختلف لكل مستخدم.
هناك شيء قريب من تركيب md5 على md5 لعله هو الذي تريده واسمه خوارمزية HMAC ويستخدم لدمج رسالة ومفتاح.
المشكلة الحقيقية ليس في خوارزمية التشفير بل بطريقة استخدامها
مثلا اذا قام المبرمج بتطبيق حماية كلمة المرور بالشكل التالي فقط
$password = md5($password)
فما ذنب الخوارزمية ؟
في حال كان الموقع يحتاج لحماية كلمة المرور بشكل أكبر (كمواقع التجارة الالكترونية)
يمكن اضافة محارف اضافية و يمكن عدم السماح للمستخدم بادخال كلمة مرور مثل (123456789)
https://www.google.com.sa/s...
اصبح فك تشفيرها اون لاين ولايتطلب اي جهد يارجل !
هذا الأمر غير صحيح ، ما يحصل أن هناك كمية هائلة من البيانات المشفرة المخزنة ومخزن الأصل منها .
قمت بتجربتها على ثلاث كلمات مرور مشفرة ، النتيجة 1 نجاح ، 2 فشل ")
-
إذا العملية هي مجرد بحث في قاعدة بيانات :/
لا اعرف مالموقع الذي جربت عليه لكن الذي جربت عليه انا وضعت فيه اكثر من ١٥٠ كلمة مرور مشفرة وكلها تم فك التشفير بنجاح!
حاول أن تضع كلمة مرور كبيرة جدا و تحتوي على أرقام و حروف و رموز بطريقة عشوائية و انسخ الهاش الناتج من قاعدة البيانات و جربه على تلك المواقع التي تزعم أنها تفك التشفير ستجد بأنهم لم يستطيعوا فك تشفير ذلك الهاش لأنه غير موجود في قاعدة البيانات مثل "f5fdgfglmjk322dfklf*fjr@" فكما ترى هذه كلمة مرور عشوائية من المستحيل أن يتم فك تشفير الهاش الخاص بها.
هل هي كلمات قوية ؟ أنا قمت بتجربة ع قاعدة بيانات قديمة لمشروع منتهي بها كلمات مرور ، اخترت بعشوائية ")
الكلمة الوحيدة التي تم فك تشفيرها كانت نتيجتها : 050606151 ") << واضح انها بسيطة ")
أجل ، هناك مواقع تفك تشفير كلمات ، لم تتمكن مواقع اخرى من ذلك ، كل موقع وحسب ما تحتويه قاعدة بياناته .
التعليقات