Сведения о вопросе

Gaukhar

16:03, 1st July, 2020

Теги

php   encryption   passwords    

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

Просмотров: 441   Ответов: 7

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

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

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



  Сведения об ответе

lats

18:03, 1st July, 2020

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

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

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

Инкрементные взломщики не просчитывают заранее все возможные взломанные пароли. Они рассматривают каждый пароль hash индивидуально, и они передают свой словарь через функцию password hash так же, как и ваша страница входа в систему PHP. Радужный стол сухари, как образ использовать пространство для атаки пароли; добавочные сухари, как Джон Потрошитель, трещины, и LC5 работы со временем: статистика и вычисления.

Игра password attack забивается за время, необходимое для взлома пароля X. С помощью rainbow tables это время зависит от того, насколько большой должен быть ваш стол и как быстро вы можете его найти. При использовании инкрементных взломщиков время зависит от того, насколько быстро вы можете запустить функцию password hash.

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


  Сведения об ответе

baggs

18:03, 1st July, 2020

Я с Питером. Разработчики, похоже, не понимают паролей. Мы все выбираем (и я тоже виноват в этом) MD5 или SHA1, потому что они быстрые. Думая об этом (потому что кто-то недавно указал мне на это), это не имеет никакого смысла. Мы должны выбрать алгоритм хеширования, который глупо медленный. Я имею в виду, в масштабе вещей, занятый сайт будет hash паролей что? каждые 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


  Сведения об ответе

VERSUION

18:03, 1st July, 2020

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

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


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

  • SHA-256

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

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

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

String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");


  Сведения об ответе

Chhiki

18:03, 1st July, 2020

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


  Сведения об ответе

VCe znayu

18:03, 1st July, 2020

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


  Сведения об ответе

$DOLLAR

18:03, 1st July, 2020

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

Это не обязательно должно быть MOST secure, я не кодирую для банка (прямо сейчас), но я определенно не буду хранить пароли в виде обычного текста.


  Сведения об ответе

VERSUION

18:03, 1st July, 2020

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться