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