Это моя текущая процедура хэширования пароля в проектах PHP / SQL …
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 – вы можете посмотреть на этот совместимый порт для новых функций:
Вы определенно находитесь на правильном пути, bcrypt – очень хороший способ хранения ваших паролей (лучше всего использовать scrypt, но трудно найти хорошую реализацию на PHP).
Помните, что sha1, sha256, sha512 никогда не делались с хэш-паролями. Они были разработаны так, чтобы быть быстрыми, чтобы вы могли брать большие наборы данных и создавать для них уникальную подпись в кратчайшие сроки . Они используются для подписания более чем что-либо еще.
Вы определенно хотите использовать алгоритм хеширования, который занимает больше времени.
Сторона примечания: Некоторые утверждают, что перец бессмыслен, так как если они взломают вашу систему, у них будет доступ к вашим солям и перцу.
В этом посте есть отличная информация о безопасности паролей.