Достаточно сказать, является ли bcrypt или SHA-512 (в контексте подходящего алгоритма, такого как PBKDF2) достаточно хорошим. И ответ - да, любой алгоритм достаточно безопасен, чтобы взлом произошел из-за недостатка реализации, а не криптоанализа.
Если вы настаиваете на том, чтобы знать, что «лучше», SHA-512 подвергся тщательной проверке NIST и другими. Это хорошо, но были признаны недостатки, которые, хотя сейчас не могут быть использованы, привели к соревнованию SHA-3 за новые алгоритмы хеширования. Также имейте в виду, что изучение хеш-алгоритмов «новее», чем изучение шифров, и криптографы все еще изучают их.
Несмотря на то, что bcrypt в целом не подвергался такой тщательной проверке, как сам Blowfish, я считаю, что основа на шифровании с хорошо понятной структурой дает ему некоторую внутреннюю безопасность, которой не хватает аутентификации на основе хэшей. Кроме того, проще использовать обычные графические процессоры в качестве инструмента для атаки хэшей на основе SHA-2; из-за требований к памяти для оптимизации bcrypt требуется более специализированное оборудование, такое как FPGA, с некоторой встроенной памятью.
Примечание: bcrypt - это алгоритм, который внутренне использует Blowfish. Это не сам алгоритм шифрования. Он используется для необратимого скрытия паролей, так же как хеш-функции используются для «одностороннего хеширования».
Криптографические алгоритмы хеширования разработаны таким образом, чтобы их невозможно было отменить. Другими словами, учитывая только результат хэш-функции, поиск сообщения, которое будет производить такой же хэш-результат, займет «вечность». Фактически, с вычислительной точки зрения должно быть невозможно найти любые два сообщения, которые производят одно и то же значение хеш-функции. В отличие от шифра, хеш-функции не параметризуются ключом; один и тот же ввод всегда дает один и тот же результат.
Если кто-то предоставляет пароль, хэширующий значение, хранящееся в таблице паролей, он аутентифицируется. В частности, из-за необратимости хеш-функции предполагается, что пользователь не является злоумышленником, который получил хеш-код и отменил его, чтобы найти рабочий пароль.
Теперь рассмотрим bcrypt. Он использует Blowfish для шифрования волшебной строки, используя ключ, "производный" от пароля. Позже, когда пользователь вводит пароль, ключ выводится снова, и если зашифрованный текст, полученный путем шифрования с помощью этого ключа, совпадает с сохраненным зашифрованным текстом, пользователь аутентифицируется. Зашифрованный текст хранится в таблице «паролей», но полученный ключ никогда не сохраняется.
Чтобы взломать криптографию здесь, злоумышленник должен восстановить ключ из зашифрованного текста. Это называется атакой с использованием "известного открытого текста", поскольку при атаке известна зашифрованная магическая строка, но не используется ключ. Blowfish был тщательно изучен, и пока не известно об атаках, которые позволили бы злоумышленнику найти ключ с одним известным открытым текстом.
Таким образом, подобно необратимым алгоритмам, основанным на криптографических дайджестах, bcrypt производит необратимый результат, исходя из пароля, соли и фактора стоимости. Его сила заключается в устойчивости Blowfish к известным атакам с открытым текстом, что аналогично «атаке первого предварительного изображения» в алгоритме дайджеста. Поскольку его можно использовать вместо алгоритма хеширования для защиты паролей, bcrypt ошибочно называют самим алгоритмом «хеширования».
Если предположить, что радужным таблицам помешало правильное использование соли, любая действительно необратимая функция сводит злоумышленника к методу проб и ошибок. А скорость, с которой злоумышленник может провести испытания, определяется скоростью этого необратимого «хэш-алгоритма». Если используется одна итерация хеш-функции, злоумышленник может делать миллионы попыток в секунду, используя оборудование, которое стоит порядка 1000 долларов, проверяя все пароли длиной до 8 символов за несколько месяцев.
Если, однако, дайджест будет «возвращен» тысячи раз, то на тестирование того же набора паролей на этом оборудовании уйдут сотни лет. Bcrypt достигает того же эффекта «усиления ключа», выполняя итерацию внутри своей процедуры получения ключа, и правильный метод на основе хеширования, такой как PBKDF2, делает то же самое; в этом отношении эти два метода схожи.
Итак, моя рекомендация bcrypt основана на предположениях: 1) что Blowfish прошел такой же уровень изучения, что и семейство хэш-функций SHA-2, и 2) криптоаналитические методы для шифров разработаны лучше, чем для хеш-функций.
person
erickson
schedule
13.10.2009
bcrypt
просто по умолчанию имеет более высокий рабочий коэффициент. Предполагается, что SHA не ... если вы не используете passhash9, который может использовать любой из них вместе с фактором работы. почему этот вопрос закрыт? это далеко не ответ, но очень важный. - person   schedule 03.10.2013