Каков самый быстрый, но безопасный способ шифрования паролей в (предпочтительный 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
Следует отметить, что вы не хотите шифровать пароль, вы хотите его использовать.
Зашифрованные пароли могут быть дешифрованы, позволяя кому-то увидеть пароль. Хеширование – односторонняя операция, поэтому исходный пароль пользователя (криптографически) ушел.
Что касается алгоритма, который вы должны выбрать – используйте принятый в настоящее время стандарт:
И когда вы вводите пароль пользователя, обязательно используйте хэш в каком-то другом барахле. например:
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