2013-09-11 5 views
0

Я изучаю алгоритмы шифрования паролей. Я знаю о существовании Bcrypt, Scrypt и varients, но я хочу chanllenge сам по этому вопросу, и именно поэтому я пришел с этим алгоритмом в PHP:PHP-алгоритм для хэш-паролей

$secret = md5(uniqid(mt_rand(), true)); // Length is 32 
$passwd = 'qwert123'; 
$hash = $secret . hash('sha256', $secret + $passwd); 

Поскольку тайна определяется случайным образом и добавила на фронте хеша пароля, я мог бы подтвердить ввод пароля следующим образом:

$secret = substr($hash_from_db, 0, 32); 
$hash_from_db === $secret . hash('sha256', $secret + $input_from_user); 

Что вы думаете об этой реализации? Я хотел бы получить некоторые отзывы об этом. Спасибо.

+6

Вы только заново [засолка] (http://en.wikipedia.org/wiki/Salting_ (криптография)). –

+1

отличная работа, если вы придумали это, не зная, что такое соль. –

+1

Используйте PHPass, он плавный и гарантированно работает. Лучшая защита там в данный момент. – Jonast92

ответ

0

MD5 считается криптографически сломанным - не используйте его для обеспечения безопасности.

Вы только один раз добавили соль + пароль. Мне потребовалось около 10 секунд, чтобы найти инструмент, который взломает соленый хэш, как это, используя словарь. Ваша реализация не должна считаться защищенной от любой формы решительной атаки.

Чтобы улучшить ситуацию, рассмотрите хеширование несколько раз; используя более одной соли; изменение алгоритма хеширования на части; что-то непредсказуемое. Скорость не ваш друг - чем больше времени вы тратите на путаницу, тем более надежной она будет.

+4

Есть инструмент, который может найти столкновение SHA-256 при объединении с 128 бит энтропии в разумном количестве времени? –

+0

@OliCharlesworth - соль не добавляет никакой энтрофии, она, как правило, хранится в открытом тексте, так что это известно. Жесткое принуждение к единому паролю не является более сложным, если использовать соль, но вы должны переборщить каждый пароль отдельно, это цель соли. – martinstoeckli

+0

@martinstoeckli: Да, я понимаю, что я неправильно понял ответ; соль не имеет никакого значения для стоимости атаки словаря (я думал о радужных таблицах ...) –

Смежные вопросы