PDA

Просмотр полной версии : алгоритм для форума


[Paran0ik]
16.07.2008, 09:17
пользователь регистрируется, вводит пасс, с хешем, перед записью его в БД, делается небольшое изменение - один из его символов, выбранный случайным образом, мы заменяем случайным

т.е. для мд5 хеша от пароля 123:
202cb962ac59075b964b07152d234b70
в базу пойдет
202cb962ac5907bb964b07152d234b70, или
202c7962ac59075b964b07152d234b70, или
202cb962ac59075b964b01152d234b70 и т.д.

когда же пользователь будет авторизовываться, будет происходить следующая проверка - из введенного пользователем пароля получается мд5 хеш, затем посимвольно он сравнивается с хешем из БД, если получаем совпадение 31 символа из 32, то авторизация признается успешной...

если же подобный хеш попадет в чьито руки, то чтобы сбрутить его, необходимо будет или перебрать в 2^128 раза больше хешей или написать модуль для ПассвордПро, который будет проводить подобную, как и при авторизации, проверку, однако мы получим заметное замедление брута во-первых из-за дополнительных операций (сравнения хешей посимвольно) и во-вторых уменьшение скорости пропорционально количеству хешей (по аналогии для хешей с солью - для каждого хеша необходимы новые вычисления), а также невозможность прогнать хеш по радужным табличкам...

Chaak
17.07.2008, 01:10
А ведь идея неплохая. Только реализовать сложно будет плагин

159932
17.07.2008, 01:22
А ведь идея неплохая. Только реализовать сложно будет
и в чём такая сложность ? невижу ничего сложного ..

159932
17.07.2008, 01:51
ясн .. а я подумал ты про реализацию алгоритма ))
=============
.зы плагин для passwordsPro писать будет безсмысленно, тк кк будет находить дрегие пароли тоже и скорость будет настолько мала что трудно себе и представить ..
md5-unix будет быстрее брутиться ..

159932
17.07.2008, 02:05
<?
// md5 of pass "1"
// Алгоритм шифровки ..
$md5="c4ca4238a0b923820dcc509a6f75849b";
$arr=array("1","2","3","4","5","6","7","8","9","0","q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m");
$r_num=rand(0,31);
echo $md5."<br>";
for($i=0;$i<32;$i++){
if($i==$r_num) $md6=$md6.$arr[rand(0,35)];
else $md6=$md6.$md5[$i];
}
echo $md6."<br>";

// Алгоритм опознания хеша ..
for($i=0;$i<32;$i++){
if($md6[$i]==$md5[$i]) $cont++;}
if($cont==31) echo "Your hash is correct";
?>
вот от нечего делать и для тренировки(хотя где тут она !?) я накатал это вот ..
я не програмист :) так что не против бы услышать как можно такое оптимизаровать ..

[Paran0ik]
17.07.2008, 17:15
зы плагин для passwordsPro писать будет безсмысленно, тк кк будет находить дрегие пароли тоже и скорость будет настолько мала что трудно себе и представить ..ну во-первых если модуль найдет такой пароль, то и авторизация на форуме с ним пройдет, а во-вторых теоретически (если не брать во внимание еще и коллизии) возможно существование только одного пароля, соответствующего такому измененному хешу, но не думаю что он будет проще того пасса, который введет пользователь :)

А еще можно на всякий случай md5 заменить на sha1
лучше тогда уж на sha256, под них коллизии вроде еще не находили, и кстати на фоне назревающей идеи не брута пароля, а нахождения коллизии, можно заносить 2 хеша в БД (например md5 и sha1), применять идею, описанную в первом посте к обоим хешам и тогда шанс нахождения коллизий к ним обоим одновременно такой же как и шанс образования черной дыры при запуске адронного коллайдера :)
тогда и возможность существования еще одного пароля (из-за замены одного из символов хеша) отпадает...

Chaak
17.07.2008, 17:21
Всетаки вероятность подбора очень мала. Нужно чтобы хотябы 31 символ был верным, да и то, он может быть от очень огромного значения, причем из непонятных символов типа: ͍رٰ䡭㭑䡴戝☺521倉˫ⰹ