it-roy-ru.com

SHA512 против Blowfish и Bcrypt

Я смотрю на алгоритмы хеширования, но не могу найти ответ.

  • Bcrypt использует Blowfish
  • Blowfish лучше, чем MD5
  • Q: но Blowfish лучше, чем SHA512?

Спасибо..

Update:

Я хочу уточнить, что я понимаю разницу между хешированием и шифрованием. Что побудило меня задать вопрос таким образом: эта статья , , где автор называет bcrypt "адаптивным хешированием"

Поскольку bcrypt основан на Blowfish, я подумал, что Blowfish - это алгоритм хеширования. Если, как указали ответы, это шифрование, то мне кажется, что в этой статье не должно быть места. Что еще хуже, он приходит к выводу, что bcrypt - лучший. Что меня теперь смущает, так это то, что класс phpass (я думаю, он используется для хеширования паролей) использует bcrypt (то есть blowfish, то есть шифрование). Основываясь на этой новой информации, которую вы, ребята, говорите мне (Blowfish - это шифрование), этот класс звучит неправильно. Я что-то пропустил?

218
Chris

Достаточно сказать, является ли bcrypt или SHA-512 (в контексте соответствующего алгоритма, такого как PBKDF2) достаточно хорошим. И ответ - да, любой алгоритм является достаточно безопасным, чтобы нарушение было вызвано недостатком реализации, а не криптоанализом.

Если вы настаиваете на знании того, что "лучше", SHA-512 провела подробные обзоры NIST и других. Это хорошо, но были признаны недостатки, которые, хотя и не использовались в настоящее время, привели к конкуренции SHA-3 за новые алгоритмы хеширования. Кроме того, имейте в виду, что изучение алгоритмов хеширования "новее", чем изучение шифров, и криптографы все еще изучают их.

Несмотря на то, что bcrypt в целом не подвергался такому тщательному анализу, как сам Blowfish, я считаю, что использование шифра с хорошо понятной структурой дает ему некоторую внутреннюю безопасность, которой не хватает при аутентификации на основе хеш-функции. Кроме того, проще использовать обычные графические процессоры в качестве инструмента для атаки на хэши на основе SHA-2; Из-за требований к памяти для оптимизации bcrypt требуется более специализированное оборудование, такое как FPGA, с некоторым количеством встроенной оперативной памяти.


Примечание: bcrypt - это алгоритм, который использует Blowfish для внутреннего использования. Это не сам алгоритм шифрования. Он используется для необратимого сокрытия паролей, так же как хеш-функции используются для "одностороннего хеширования".

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

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

Теперь рассмотрим bcrypt. Он использует Blowfish для шифрования магической строки, используя ключ, "полученный" из пароля. Позже, когда пользователь вводит пароль, ключ выводится снова, и если зашифрованный текст, созданный путем шифрования с этим ключом, совпадает с сохраненным зашифрованным текстом, пользователь аутентифицируется. Зашифрованный текст хранится в таблице "паролей", но производный ключ никогда не сохраняется.

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

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

Предполагая, что таблицы Rainbow были сорваны при правильном использовании соли, любая действительно необратимая функция превращает атакующего в метод проб и ошибок. А скорость, с которой злоумышленник может делать испытания, определяется скоростью этого необратимого алгоритма хеширования. Если используется одна итерация хэш-функции, злоумышленник может выполнить миллионы попыток в секунду, используя оборудование стоимостью порядка 1000 долларов, проверяя все пароли длиной до 8 символов в течение нескольких месяцев.

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

Итак, моя рекомендация по bcrypt основана на предположениях: 1) что Blowfish имеет такой же уровень контроля, как и семейство хеш-функций SHA-2, и 2) что криптоаналитические методы для шифров лучше разработаны, чем методы для хеш-функций.

316
erickson

Я согласен с ответом Эриксона, с одной оговоркой: для целей аутентификации по паролю bcrypt намного лучше, чем одиночная итерация SHA-512 - просто потому, что он намного медленнее. Если вы не понимаете, почему медлительность является преимуществом в этой конкретной игре, прочитайте статью, на которую вы ссылались снова (прокрутите вниз до ". Скорость - это именно то, что вам не нужно в хэше пароля функция. ").

Конечно, вы можете построить безопасный алгоритм хеширования паролей вокруг SHA-512, повторяя его тысячи раз, точно так же, как работает алгоритм PHK MD5. Ульрих Дреппер сделал именно это , для склепа glibc (). Тем не менее, нет особой причины делать это, если у вас уже есть протестированная реализация bcrypt.

48
caf

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

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

Это две разные вещи, предназначенные для разных задач. Не существует "правильного" ответа на "Является ли ударная рыба лучше, чем SHA512?" Вы также можете спросить " яблоки лучше кенгуру? "

Если вы хотите прочитать больше по теме, вот несколько ссылок:

30
Glen

Blowfish не лучше, чем MD5 или SHA512, так как они служат разным целям. MD5 и SHA512 - это алгоритмы хеширования, Blowfish - алгоритм шифрования. Две совершенно разные криптографические функции.

4
blowdart

Я бы порекомендовал реализацию крипта Ульриха Дреппера на основе SHA-256/SHA-512.

Мы перенесли эти алгоритмы на Java, и вы можете найти их свободно лицензированную версию по адресу ftp://ftp.arlut.utexas.edu/Java_hashes/ .

Обратите внимание, что большинство современных (L) Unices поддерживают алгоритм Drepper в своих файлах/etc/shadow.

2
Jonathan Abbey

Я только сталкивался с этим:

http://codahale.com/how-to-safely-store-a-password/

Может ли автор этой статьи ошибаться?

2
disappearedng