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

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

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

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

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

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

Современные парольные схемы атакованы инкрементными взломами паролей.

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

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

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

Я с Питером. Разработчик, похоже, не понимает пароли. Мы все выбираем (и я тоже виноват в этом) 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

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

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


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

  • SHA-256

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

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

Приложите соль к паролю пользователя:

 String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion"); 

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

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

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

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

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

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

Алгоритмы безопасного хеша: SHA-256, SHA-384, SHA-512

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