Случайная соль + хешированный проход или случайная соль + крипта () 'проход? - PullRequest
2 голосов
/ 14 августа 2011

Я пытаюсь создать более-менее безопасную систему входа в систему для своего сайта, у меня не было много времени для обеспечения безопасности, поэтому я учусь по ходу дела.Хотелось услышать некоторые мнения о том, что из следующего лучше и почему.(или я где-то ошибся?)

$staticsalt = '$%*#)$*)^A#$#543667ggfdf\#$%x';  
$random = md5(uniqid(mt_rand(), true));
$salt = hash('sha512',$random.$_POST['password'].microtime().$staticsalt);

либо (где не нужно указывать $ соль в базе данных ...)

$password = crypt($_POST['password'], '$2a$12$'.$salt);   

или (гдеМне также понадобится $ соль в базе данных ...)

$password = hash('sha512',$salt.$_POST['password']);

Ответы [ 3 ]

3 голосов
/ 14 августа 2011
  1. SHA512 - довольно быстрый алгоритм, который обычно является нежелательным атрибутом для алгоритмов хеширования паролей.
  2. Использование предсказуемого значения, такого как microtime, в качестве случайного начального числа для соли может открыть вам некоторые сложные атаки, которые могут предотвратить более случайное значение.

Я рекомендую phpass, который является хорошей существующей реализацией системы хеширования паролей.
http://www.openwall.com/phpass/

0 голосов
/ 14 августа 2011

Не хэшируйте свою соль таким образом.

Хеширование Blowfish

crypt требует 22-символьной строки в кодировке base64 (используя символы [./0-9A-Za-z]) для соли, что составляет 128 битов энтропии.

Хэш SHA-512, который вы используете для создания соли, имеет 512 бит энтропии. Но вы отбрасываете более 80% этого, поскольку crypt теперь будет использовать только 22 шестнадцатеричных символа в нижнем регистре. Это оставляет вам только около 85 бит энтропии, несмотря на все ваши фантазии, генерирующие случайность.

И если для вас достаточно 85 бит, вы можете просто сделать что-то вроде этого:

$salt = str_replace("+", ".", base64_encode(md5(uniqid(mt_rand(), true), true)));

На самом деле я не осмелюсь дать вам какой-либо совет о том, как генерировать соль, которая использует целые 128 бит, поскольку я не специалист по криптографии.

0 голосов
/ 14 августа 2011

На самом деле нет смысла рекламировать такую ​​безопасность.Вы должны знать, для чего создана ваша система.Если это просто какой-то чат, то вы будете в порядке с md5.Если это банковская система, тогда у вас должна быть настоящая система аутентификации, я имею в виду карту с солями или генератор кода.

РЕДАКТИРОВАТЬ: Я не думаю, что есть одна хорошая политика безопасностиВерхний ответ отлично, подумал.

...