Насколько безопасно шифрование паролей с помощью crypt () в PHP? - PullRequest
0 голосов
/ 09 августа 2011

Я использую crypt() шифрование в PHP, как это:

<?php
$password = sanitizing_func($_POST['password']);
$var = crypt($password, 'ab');
?>

Насколько это безопасно?

Нашел лучшее решение здесь: openwall phpass

Благодаря Эдварду Томсону

1 Ответ

1 голос
/ 09 августа 2011

Это менее безопасно, чем если бы вы просто использовали crypt так, как это было задумано, с паролем в качестве первого аргумента и солью в качестве второго.

Теперь вы шифруете известный открытый текст, используя пользовательскийпароль как соль.Если ваша система использует MD5 crypt, то вы просто ограничили пространство соли до 12 символов, поэтому вы сокращаете пространство паролей пользователей до двенадцати символов.Что еще хуже, моя система требует, чтобы я использовал префикс для соли, чтобы указать мой склеп, иначе я получу старую школу crypt, что означает, что у вас есть два символа для соли.Таким образом, вы ограничили возможную длину пароля пользователя двумя символами.Кроме того, нет смысла даже запускать crypt в этот момент, вы могли бы также просто сохранить их двухсимвольный пароль, так как соль ставится перед зашифрованным текстом, чтобы последующие вызовы crypt могли передать ту же соль.

Кроме того, вы ограничиваете символьное пространство пароля, используя его в соли, так как символьное пространство соли ограничивается AZ, az, 0-9, ".", "/".Даже если вы переключаете аргументы из своего примера кода, вы используете одни и те же солт-данные для каждого вызова.Это означает, что каждый пароль имеет одну и ту же соль.Поэтому, если ваша таблица паролей будет раскрыта, взломать ее с помощью словарной атаки станет менее затратно.

Другими словами, замена паролей и аргументов соли является фатальной ошибкой.

Наконец, естьпросто нет причин звонить в склеп дважды.Если вы хотите лучшего шифрования, используйте лучший алгоритм, не вызывайте его чаще.Например, если вы используете крипту DES, то это все еще древний алгоритм, независимо от того, сколько раз вы его называете.(Мне также кажется, что я читал, что чтение нескольких проходов алгоритма может непреднамеренно привести к ослаблению зашифрованного текста. Но у меня нет Шнайера передо мной.)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...