Хранилище паролей, hash () с sha-512 или crypt () с blowfish (bcrypt)?

Это моя текущая процедура хэширования пароля в проектах PHP / SQL …

  • Возьмите 512 бит одной доли пользователя из / dev / urandom, сохраненных в записи пользователя пользователя в дополнение к финальному хэшу
  • Возьмите 512 бит «перец» из / dev / urandom, который хранится в файловой системе. Это постоянное для каждого приложения и одно и то же для каждого пользователя
  • Затем hash('sha512', $password.$salt.$pepper, TRUE)

Хеш и соль хранятся в двоичном формате в БД, в основном по привычке. Я не думаю, что это имеет какое-то значение в плане безопасности. Если что-то немного менее удобно для SQL-резервных копий и делает PHP-код немного сложнее.

Является ли hash() с SHA-256 или SHA-512, который, как считается, в наши дни был превзойден bcrypt?
Я считаю, что SHA-2 (256/512) по-прежнему считается криптографически защищенным, и я, вероятно, переусердствую энтропийные биты. Скорее всего, это будет ошибкой в ​​моем коде, что приведет к проблемам, чем злоумышленник, реконструирующий хэш SHA-2 из дампа базы данных.

Но нужно ли обновлять мою методологию, чтобы вместо этого использовать crypt() с CRYPT_BLOWFISH (я считаю, что это называется bcrypt, а blowfish технически является алгоритмом шифрования, а не хэшированием)?
Даже как лучшая лучшая практика?

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

Приветствия, B

Если вы можете подождать til php 5.5, для этой встроенной функции будут некоторые полезные функции:

https://gist.github.com/3707231

До тех пор, используйте crypt – вы можете посмотреть на этот совместимый порт для новых функций:

https://github.com/ircmaxell/password_compat

Вы определенно находитесь на правильном пути, bcrypt – очень хороший способ хранения ваших паролей (лучше всего использовать scrypt, но трудно найти хорошую реализацию на PHP).

Помните, что sha1, sha256, sha512 никогда не делались с хэш-паролями. Они были разработаны так, чтобы быть быстрыми, чтобы вы могли брать большие наборы данных и создавать для них уникальную подпись в кратчайшие сроки . Они используются для подписания более чем что-либо еще.

Вы определенно хотите использовать алгоритм хеширования, который занимает больше времени.

Сторона примечания: Некоторые утверждают, что перец бессмыслен, так как если они взломают вашу систему, у них будет доступ к вашим солям и перцу.

В этом посте есть отличная информация о безопасности паролей.