Подтвердить что ты не робот

Шифрование паролей

Какой самый быстрый, но безопасный способ шифрования паролей (предпочтителен PHP), и какой метод вы выберете, является ли он переносимым?

Другими словами, если я позже перенесу свой сайт на другой сервер, мои пароли продолжат работать?

Метод, который я использую сейчас, как мне сказали, зависит от точных версий библиотек, установленных на сервере.

4b9b3361

Ответ 1

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

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

Современные схемы паролей подвергаются атакам с инкрементными взломами паролей.

Инкрементальные крекеры не предсказывают все возможные взломанные пароли. Они рассматривают каждый хэш пароля отдельно, и они передают свой словарь через хэш-функцию пароля так же, как и ваша страница входа в PHP. Радужные столовые крекеры, такие как Ophcrack, используют пространство для атаки паролей; инкрементные крекеры, такие как John the Ripper, Crack и LC5, работают со временем: статистика и вычисления.

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

Чем лучше вы можете оптимизировать свою хэш-функцию пароля, тем быстрее будет работать хэш-функция вашего пароля, тем слабее ваша схема. MD5 и SHA1, даже обычные блок-шифры, такие как DES, предназначены для быстрой работы. MD5, SHA1 и DES - слабые хэши паролей. На современных процессорах необработанные криптоблочные блоки, такие как DES и MD5, могут быть битрейлерами, векторизованными и параллельными, чтобы сделать быстрый поиск пароля быстрым. Реализация FPGA для игр обойдется в сотни долларов.

Ответ 2

Я с Питером. Разработчик, похоже, не понимает пароли. Мы все выбираем (и я тоже виноват в этом) MD5 или SHA1, потому что они быстры. Думая об этом (ведь кто-то недавно указал мне на это), это не имеет никакого смысла. Мы должны выбрать алгоритм хеширования, который будет глупым. Я имею в виду, по масштабам вещей, занятый сайт будет хэш-паролями, что? каждые 1/2 минуты? Кого волнует, если он занимает 0,8 секунды против 0,03 секунды? Но эта лишняя медлительность огромна, чтобы предотвратить все виды распространенных жестоко-жестоких атак.

Из моего чтения, bcrypt специально разработан для безопасного хеширования паролей. Это основано на blowfish, и есть много реализаций.

Для PHP, проверьте PHPPass http://www.openwall.com/phpass/

Для тех, кто делает .NET, проверьте BCrypt.NET http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

Ответ 3

Следует отметить, что вы не хотите шифровать пароль, вы хотите хэш.

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


Что касается алгоритма, который вы должны выбрать - используйте принятый в настоящее время стандартный вариант:

  • SHA-256

И когда вы вводите пароль пользователя, не забудьте также хеш в каком-то другом барахле. например:.

  • пароль: password1
  • соль: PasswordSaltDesignedForThisQuestion

Добавьте соль в пароль пользователя:

String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");

Ответ 4

Что бы вы ни делали, не пишите свой собственный алгоритм шифрования. Выполнение этого почти гарантирует (если вы не криптограф), что в алгоритме будет недостаток, который сделает его тривиальным для взлома.

Ответ 5

Предположим использовать bcrypt, он используется во многих современных фреймворках, таких как laravel.

Ответ 6

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

Это не должно быть MOST безопасным, я не буду тратить деньги на банк (прямо сейчас), но я, безусловно, НЕ БУДЕТ хранить пароли как обычный текст.

Ответ 7

password_hash ( string $password, int $algo [, array $options ] ). (PHP 5> = 5.5.0, PHP 7)

password_hash() создает новый хэш пароля, используя сильный односторонний алгоритм хеширования. password_hash() совместим с crypt(). Следовательно, хэши паролей, созданные crypt(), могут использоваться с password_hash().

Ответ 8

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

Лучше итератировать по HMAC со случайной солью в течение приблизительно 100 мс и сохранить соль с хешем.

Защищенные алгоритмы хеширования: SHA-256, SHA-384, SHA-512

Популярные функции Хеширования пароля: PBKDF2, Rfc2898DeriveBytes, password_hash, Bcrypt, passlib.hash