SHA512 против Blowfish и Bcrypt

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

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

Спасибо..

Update:

Я хочу пояснить, что я понимаю разницу между хэшированием и шифрованием. То, что побудило меня задать вопрос таким образом, - это статья, , где автор ссылается на bcrypt как "адаптивное хеширование" https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2007/july/enough-with-the-rainbow -tables-what-you-need-to-know-about-secure-password-scheme/

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

Я бы порекомендовал реализацию шифрования на основе Ulrich Drepper SHA-256/SHA-512.

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

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