SHA512 против Blowfish и Bcrypt
Я смотрю на алгоритмы хеширования, но не могу найти ответ.
- Bcrypt использует Blowfish
- Blowfish лучше, чем MD5
- Q: но Blowfish лучше, чем SHA512?
Спасибо..
Обновить:
Я хочу уточнить, что я понимаю разницу между хешированием и шифрованием. Что побудило меня задать вопрос таким образом, так это статья, в которой автор называет bcrypt "адаптивным хешированием".
Поскольку bcrypt основан на Blowfish, я подумал, что Blowfish - это алгоритм хеширования. Если, как указали ответы, это шифрование, то мне кажется, что в этой статье не должно быть места. Что еще хуже, он приходит к выводу, что bcrypt - лучший. Что меня теперь смущает, так это то, что класс phpass (я думаю, что он используется для хеширования паролей) использует bcrypt (т.е. blowfish, то есть шифрование). Основываясь на этой новой информации, которую вы, ребята, говорите мне (Blowfish - это шифрование), этот класс звучит неправильно. Я что-то пропустил?
6 ответов
Достаточно сказать, достаточно ли хорош 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) что криптоаналитические методы для шифров лучше разработаны, чем методы для хеш-функций.
Я согласен с ответом Эриксона, с одной оговоркой: для целей аутентификации по паролю bcrypt намного лучше, чем одна итерация SHA-512 - просто потому, что он намного медленнее. Если вы не понимаете, почему медлительность является преимуществом в этой конкретной игре, прочитайте статью, на которую вы ссылаетесь снова (прокрутите вниз до "Скорость - это именно то, чего вам не нужно в хэш-функции пароля").
Конечно, вы можете построить алгоритм безопасного хеширования паролей вокруг SHA-512, повторяя его тысячи раз, точно так же, как работает алгоритм PHK MD5. Ульрих Дреппер сделал именно это для крипты glibc (). Тем не менее, нет особой причины делать это, если у вас уже есть протестированная реализация bcrypt.
Blowfish не является алгоритмом хеширования. Это алгоритм шифрования. Это означает, что вы можете зашифровать что-то с помощью Blowfish, а затем вы можете расшифровать его обратно в обычный текст.
SHA512 - это алгоритм хеширования. Это означает, что (теоретически) после хеширования ввода вы не сможете вернуть исходный ввод обратно.
Это две разные вещи, предназначенные для разных задач. Не существует "правильного" ответа на вопрос "Является ли Blowfish лучше, чем SHA512?" Вы могли бы также спросить "яблоки лучше кенгуру?"
Если вы хотите прочитать больше по теме, вот несколько ссылок:
Blowfish не лучше, чем MD5 или SHA512, так как они служат разным целям. MD5 и SHA512 - это алгоритмы хеширования, Blowfish - алгоритм шифрования. Две совершенно разные криптографические функции.
Я только сталкивался с этим:
http://codahale.com/how-to-safely-store-a-password/
Может ли автор этой статьи ошибаться?
Я бы порекомендовал реализацию крипта Ульриха Дреппера на основе SHA-256/SHA-512.
Мы перенесли эти алгоритмы на Java, и вы можете найти их свободно лицензированную версию по адресу ftp://ftp.arlut.utexas.edu/java_hashes/.
Обратите внимание, что большинство современных (L)Unices поддерживают алгоритм Drepper в своих файлах /etc/shadow.