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

Какой в ​​настоящее время самый безопасный односторонний алгоритм шифрования?

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

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

Я использую MD5 почти исключительно годами, и мне интересно, есть ли что-то еще, что я должен делать. Должен ли я рассматривать другой алгоритм?

Другой связанный вопрос: как долго должно быть поле для такого зашифрованного пароля? Должен признаться, что практически ничего не знаю о шифровании, но я предполагаю, что хэш MD5 (как пример) может быть длиннее и, предположительно, потребует большей вычислительной мощности для взлома. Или длина поля вообще не имеет значения при условии, что зашифрованный пароль в нем в первую очередь входит?

4b9b3361

Ответ 1

Предупреждение:. Поскольку этот пост был написан в 2010 году, графические процессоры были широко развернуты для хэшей паролей грубой силы. Графические процессоры с умеренной ценой может работать десять миллиардов MD5 в секунду. Это означает, что даже полностью-случайный 8-символьный буквенно-цифровой пароль (возможно 62 символы) могут быть скорбными в течение 6 часов. SHA-1 только немного медленнее, это займет один день. Ваши пользовательские пароли намного слабее, и (даже с засолением) упадет со скоростью тысяч паролей в второй. Хеш-функции предназначены для быстрой работы. Вы не хотите этого для паролей. Используйте scrypt, bcrypt или PBKDF-2.

MD5 был признан слабым еще в 1996 году, а больше не должен использоваться для криптографических целей. SHA-1 - обычно используемая замена, но SHA-2 семейство хеш-функций - это текущий замена SHA-1. Члены SHA-2 индивидуально называются SHA-224, SHA-256, SHA-384 и SHA-512.

В настоящий момент несколько хеш-функций конкурируют, чтобы стать SHA-3, следующим стандартизованным алгоритмом хеширования криптографии, Победитель будет выбран в 2012 году. Ни один из них не должен использоваться до сих пор!

Для хэширования паролей вы также можете использовать что-то вроде bcrypt. Он предназначен для того, чтобы быть достаточно медленным, чтобы сделать атаки крупномасштабных грубых сил неосуществимыми. Вы можете настроить медленность самостоятельно, чтобы ее можно было сделать медленнее, когда компьютеры становятся быстрее.

Предупреждение: bcrypt основан на более раннем алгоритме двустороннего шифрования Blowfish, для которого сегодня существуют лучшие альтернативы. Я не думаю, что криптографические свойства хэширования bcrypt полностью понятны. Кто-то исправит меня, если я ошибаюсь; Я никогда не находил надежный источник, который обсуждает свойства bcrypt (кроме его медленности) с криптографической точки зрения.

Возможно, несколько успокаивается, что риск конфликтов имеет меньшее значение для хэширования паролей, чем для криптографии с открытым ключом или цифровых подписей. Использование MD5 сегодня является ужасной идеей для SSL, но не столь же катастрофическим для хэширования паролей. Но если у вас есть выбор, просто выберите более сильный.

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

Ответ 2

Отличный вопрос! Эта страница хорошо читается. В частности, автор утверждает, что MD5 не подходит для хеширования паролей:

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

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

Далее в статье объясняются некоторые альтернативы и рекомендуется Bcrypt как "правильный выбор" (его слова, а не мои).

Отказ от ответственности: я вообще не пробовал Bcrypt. Рассмотрите эту дружескую рекомендацию, но не я могу поддержать свой собственный технический опыт.

Ответ 3

Чтобы увеличить силу пароля, вы должны использовать более широкий набор символов. Если у вас есть 8-10 символов в пароле, становится довольно сложно взломать. Хотя сделать это дольше, он сделает его более безопасным, только если вы используете числовые/алфавитные/другие символы.

SHA1 - это еще один алгоритм хэширования (одностороннее шифрование), он медленнее, но имеет более длинный дайджест. (закодированный messsage) (160 бит), где MD5 имеет только 128 бит.

Затем SHA2 еще более безопасен, но он используется меньше.

Ответ 4

засовывание пароля всегда является дополнительным уровнем защиты

$salt = 'asfasdfasdf0a8sdflkjasdfapsdufp';
$hashed = md5( $userPassword . $salt );

Ответ 5

Увидев, что компьютеры продолжают все быстрее и что математики все еще разрабатывают эти алгоритмы

Шифрование RSA безопасно в том, что он полагается на действительно большое число, которое трудно подвергнуть сомнению. В конце концов, компьютеры будут достаточно быстрыми, чтобы умножить число в разумные сроки. Чтобы оставаться впереди кривой, вы используете большее число.

Однако для большинства веб-сайтов цель хэширования паролей заключается в том, чтобы сделать неудобным для человека, имеющего доступ к базе данных, для чтения пароля, а не для обеспечения безопасности. Для этой цели MD5 отлично 1.

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


1 Просто потому, что MD5 "сломан" не означает, что вы можете просто отменить его, когда захотите.

Ответ 6

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

Мы оцениваем, что на современном (2009 г.) оборудовании, если потрачено 5 секунд на вычисление производного ключа, стоимость аппаратной атаки грубой силы против scrypt примерно в 4000 раз больше, чем стоимость аналогичной атаки против bcrypt (до найти тот же пароль) и в 20000 раз больше, чем аналогичная атака на PBKDF2.

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

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

Ответ 7

В настоящее время NIST проводит конкурс для выбора нового алгоритма хеширования, как и для выбора алгоритма шифрования AES. Таким образом, ответ на этот вопрос, вероятно, будет отличаться через пару лет.

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