Это должно быть достаточно , чтобы сказать , является ли 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) что криптоаналитические методы для шифров лучше разработаны, чем методы для хеш-функций.