md5 hash tuning

Следващата статия може да е върха на глупостта но както винаги съм казвал съм по добър админ от колкото кодер. Вчера докато си дращех едни AJAX скрипт и трябваше да изпращам малко данни които за валидация им ползвам хеш понеже скрипта не споделя едни $_SESSION масив и нещата стават леко несигурни. Затова правя следната свинщина всички памери които се подават по POST или GET си им правя един md5 хеш от конкатерираните параметри и после си го сравнявам. Като цяло не лоша схема мисля. Хеширащи алгоритми за тая цел бол MD5 , SHA, DESC и прочие. До тука нещата са ясни да речем, че ще ползваме MD5 за хеширане на параметрите (както и в дейтвителност правя). Имаме 3 параметъра който се подават през GET i=1 n=2 m=3 и да речем низът за хешриане е 123 което ни прави следния MD5 хеш 202cb962ac59075b964b07152d234b70. До тук нищо кой знаеш какво интересно. Тоя хеш ще падне за няколко секунди при каквато и да било атака. Тука вече идва солта и пипера на простата ми идея. Да речем взимам първия и последния символ на стринг-а и им разменяме местата по този начин се получава 002cb962ac59075b964b07152d234b72 хеш който вече ако някой ако не е чел кода ни каква идиотщина се прави нещата загрубяват при опит за хакване. Реално хеша е друг и дори и да бъде изснифен е крайно безполезен. Но защо да спираме до тук можем да разделим хеша на няколко блока, в случая MD5 е с дължина 32 символа ако бъде разделен на 4 блока по 8 символа и им се разместят местата става още по неприятно положение. Далеч най приятния ефект е, че визуално си е стандартен md5 хеш и злия хахор може да си чупи докато има желание. Не съм добър по криптиране и не мога да пледирам за нещо кой знае колко фундаментално и прочие но ми допада колко е семпло като идея и реализация и съвременно надеждността е критично висока не като на нормалния MD5 които с една по грамотна видео карта се чупи за норматив.

Ето и примерен код за първата идея с размяната на първия и последния символ елементарен код от 3 реда 🙂


<?php

$hash = '202cb962ac59075b964b07152d234b70';

$first = substr($hash,0,1);
$last = substr($hash,-1);
$rest = substr($hash,1,30);
$hash = $last.$rest.$first;
echo "The real hash is : $str <br> inverted hash is : $hash";

?>

http://www.youtube.com/watch?v=Fvje9dzBHPM

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *