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