SHA512 против Blowfish и Bcrypt

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

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

Спасибо..

Обновление:

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

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


person Chris    schedule 13.10.2009    source источник
comment
Это не так; см. обновления к моему ответу, чтобы узнать, как работает bcrypt и почему он служит той же цели, что и односторонний алгоритм на основе хэша.   -  person erickson    schedule 14.10.2009
comment
bcrypt просто по умолчанию имеет более высокий рабочий коэффициент. Предполагается, что SHA не ... если вы не используете passhash9, который может использовать любой из них вместе с фактором работы. почему этот вопрос закрыт? это далеко не ответ, но очень важный.   -  person    schedule 03.10.2013
comment
Ссылка, о которой идет речь, не работает ...............   -  person Pacerier    schedule 22.12.2014


Ответы (5)


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

person erickson    schedule 13.10.2009
comment
Спасибо за ответ и комментарий. Я действительно спрашивал причины криптоанализа / радужные таблицы и т. Д. Но также у меня сложилось впечатление, что Blowfish хеширует, а не шифрование, как оно используется в классе phpass (класс, который, как я полагаю, используется для хеширования паролей). Я соответствующим образом обновил свой исходный пост. - person Chris; 13.10.2009
comment
+1 отличный пост. Но у меня есть два вопроса. Blowfish был заменен на twofish более десяти лет назад, разве система не должна использовать современные примитивы? Кроме того, тысячи итераций кажутся расточительными в таких системах, как веб-приложения, в которые в любой момент входит много людей. Например, PBKDF2 реализован только в сценариях, когда в систему одновременно входит 1 человек, например, функция string2key для зашифрованной файловой системы. Я использую пословицу: «Если она слишком тяжелая для взломщика, значит она слишком тяжелая для вашего сервера». Что вы думаете? - person rook; 06.11.2010
comment
Я не думаю, что есть что-то плохое в использовании более современного примитива. Уязвимости часто обнаруживаются с течением времени, и Twofish был разработан с использованием знаний, полученных от Blowfish. Однако я не знаю конкретных уязвимостей, которые сделали бы недействительным использование Blowfish, поэтому можно также привести аргумент «если это не сломалось». Мне не нравится твоя пословица о злоумышленниках. Даже если вы выберете алгоритм, который потребует годы у злоумышленника для проверки миллиарда паролей, он будет занимать ничтожно малую долю времени в легитимном приложении. - person erickson; 08.11.2010
comment
@erickson Следующее предложение просто вводит в заблуждение: в отличие от шифра, хеш-функции не параметризуются с помощью ключа; один и тот же ввод всегда дает один и тот же результат. Хотя соль не является ключом, весь смысл соли в том, что использование другой соли приведет к хешированию одной и той же строки с другим значением. - person Hank Gay; 14.01.2011
comment
Если вы посмотрите спецификацию какой-либо хеш-функции, вы ничего не увидите о соли. Единственный параметр - это сообщение, которое нужно обработать. Просмотрите спецификацию любого шифра, и вы увидите, что функция параметризуется с помощью ключа. Соль, которая может (или может не) использоваться вместе с хешем, является просто частью сообщения. Алгоритм хеширования не требует этого, не обрабатывает его специально и не может отличить его от остальной части сообщения. Итак, хотя это правда, что сообщения часто изменяются путем соления, данное сообщение создает только один хэш. - person erickson; 14.01.2011
comment
@Rook, почему вы утверждаете, что PBKDF2 реализован только в сценариях, когда 1 человек одновременно входит в систему, например, функция string2key для зашифрованной файловой системы? - person Daniel Serodio; 22.09.2012
comment
@erickson а как насчет BLAKE2? При этом соль упоминается довольно часто. - person orlp; 15.04.2013
comment
@Rook Что касается комментария о тысячах итераций, которые кажутся расточительными, высокая стоимость создания хэшей с этими алгоритмами (BCrypt или PBKDF2 / SHA-512) делает их желательными для хеширования паролей. Как ответил Эриксон, это приемлемая стоимость для сервера; необходимое зло. Поймите, что это может открыть вектор атаки DOS. Злоумышленник может затопить сервер достаточным количеством попыток входа в систему, чтобы законные пользователи были заблокированы. Регулирование попыток входа в систему может помочь смягчить это, но тогда у вас будет другой вектор DOS, где определенные пользователи могут быть заблокированы. Безопасность - это сложно. - person Andre D; 23.05.2013
comment
@Andre D В качестве пентестера я сообщаю о приложениях, которые блокируют учетные записи, и я сообщаю о приложениях, которые не защищают от грубой силы. В идеале оскорбительный IP-адрес должен решать капчу, кроме того, если имя пользователя нацелено (даже если это имя пользователя не существует), тогда эта учетная запись должна решить капчу перед аутентификацией. Также приемлемо ограничение частоты вращения X в минуту. По теме: security.stackexchange.com/questions/25444 / - person rook; 23.05.2013
comment
@rook: хотя ограничение скорости приложений является хорошей практикой, вы можете предположить, что в этом случае база данных была загружена и размещена на оборудовании, которое не имеет указанного вами ограничения скорости. - person Ellert van Koperen; 21.10.2015
comment
@Ellert van Koperen Меня беспокоит отказ в обслуживании приложений, который вызывает серьезную озабоченность для PBKDF2, поскольку у него нет максимальной длины строки. - person rook; 22.10.2015
comment
@rook Я не понимаю, о чем вы говорите. Вас беспокоит количество процессорного времени, затрачиваемого на попытку использования очень длинного пароля в приложении, использующем аутентификацию PBKDF2? Я не думаю, что время масштабируется очень быстро с длиной пароля по сравнению с тем, как оно масштабируется с количеством итераций. В любом случае приложение может наложить ограничение на максимальную длину пароля, так же как оно должно устанавливать минимальную длину и другие критерии выбора. Если вы имели в виду не это, поясните, пожалуйста. - person erickson; 22.10.2015
comment
@erickson Я думаю, вы сбиваете с толку известный открытый текст. Атака с использованием известного открытого текста - это когда незашифрованное сообщение известно злоумышленнику. Но незашифрованное сообщение - в данном случае пароль - неизвестно; это предмет нападения. - person Samuel Jaeschke; 01.04.2016
comment
@SamuelJaeschke Нет, простой текст, о котором я говорю, известен: OrpheanBeholderScryDoubt. Это часть спецификации bcrypt. Чтобы восстановить пароль, злоумышленник должен будет найти ключ, используемый для шифрования OrpheanBeholderScryDoubt, чтобы получить сохраненный хэш. Затем им нужно будет найти пароль, на основе которого можно получить этот ключ. - person erickson; 01.04.2016

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

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

person caf    schedule 13.10.2009
comment
Надеюсь, мой ответ проясняет, что одной итерации хеширования недостаточно (к сожалению, даже этот элементарный уровень знаний нельзя предполагать). Если используется одна итерация хеш-функции, злоумышленник может делать миллионы попыток в секунду, используя оборудование, которое стоит порядка 1000 долларов, проверяя все пароли длиной до 8 символов за несколько месяцев. Если, однако, дайджест будет «возвращен» тысячи раз, то на тестирование того же набора паролей на этом оборудовании уйдут сотни лет. Bcrypt достигает того же эффекта «усиления ключа», повторяя… - person erickson; 20.06.2011
comment
@erickson: Да, хотя я думаю, ты мог закопать леде там. Я пытался подчеркнуть, что прямое сравнение bcrypt и SHA-512 на самом деле не актуально, потому что одна является функцией получения ключа, а другая - просто криптографическим примитивом, который сам по себе непригоден. - person caf; 21.06.2011
comment
Использование тысяч раундов SHA-512 не является чем-то необычным, и, учитывая его включение в различные реализации crypt (в том числе в PHP, который я использую), когда я читал исходный вопрос, я даже предположил, что это имел в виду OP, когда он спросил о SHA-512 - что он на самом деле имел в виду тысячи раундов SHA-512 против bcrypt, который сам использует сотни или тысячи итераций. - person thomasrutter; 25.08.2015

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

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

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

Если вы хотите узнать больше по этой теме, вот несколько ссылок:

person Glen    schedule 13.10.2009
comment
Я думаю, что вопрос заключается в использовании bcrypt в качестве необратимой защиты паролей, поскольку для этой цели используется хеширование. - person erickson; 13.10.2009
comment
@erickson текст Q: но разве Blowfish лучше, чем SHA512? мне кажется довольно ясным и показывает, что OP не понимает различий между двумя алгоритмами - person Glen; 13.10.2009
comment
ОП здесь. На самом деле, основываясь на ответе Глена, что blowfish - это алгоритм шифрования (который, как я понимаю, отличается от хеширования), теперь я понимаю, что мой вопрос «да» был запутан. Что сбивает с толку, так это то, что класс phpass (который, как я полагаю, используется для хеширования паролей) использует bcrypt (то есть blowfish, то есть шифрование). Если blowfish - это шифрование, то почему phpass использует его для хеширования паролей, мне кажется недостатком, нет? Я что-то упускаю? - person Chris; 13.10.2009
comment
однако вопрос заключается в том, какие из яблок и кенгуру лучше подходят для конкретной задачи. Blowfish - лучшая функция хеширования, чем sha, из-за времени, необходимого для хеширования. Большинство реализаций sha, которые я видел, очень быстрые. Вам нужен медленный алгоритм хеширования паролей. - person John Nicholas; 27.03.2010
comment
Это правильный ответ, что Blowfish - это алгоритм шифрования, но в этом контексте (например, при использовании в bcrypt) он используется в качестве алгоритма хеширования, получая ключ из исходной строки и используя его для шифрования магического числа. Это делает его необратимым, по сути, хеш-функцией. Вы не можете вычислить ключ из шифра, даже если вы знаете открытый текст и зашифрованные данные. - person thomasrutter; 25.08.2015
comment
Что касается скорости работы, когда вы используете SHA-512 для хеширования паролей, вы хотите использовать тысячи его раундов, а не один раунд. - person thomasrutter; 25.08.2015
comment
@thomasrutter, почему бы и нет? Я не совсем слежу за тобой. Насколько я понимаю, вы сказали, что он извлекает ключ из строки и использует его для шифрования магического числа (откуда он получает ??), но затем , даже если у вас есть такая же начальная строка, вы не могу снова получить тот же ключ ....? Какие? Я знаю, что я неправильно понимаю, поскольку это не имеет смысла - если с тем же паролем вы не можете получить тот же хэш, очевидно, что bcrypt не будет полезен. - person temporary_user_name; 17.03.2016
comment
Обычно, чтобы зашифровать что-либо с помощью blowfish, вы начинаете с сообщения, которое хотите зашифровать, и специального ключа, которым вы хотите его зашифровать, и конечным результатом является зашифрованное сообщение, которое может быть расшифровано только человеком, который сгенерировал ключ. Если вы знаете исходное сообщение, вы не сможете использовать его, чтобы найти ключ. Поэтому, когда он используется в качестве импровизированного алгоритма хеширования, вы можете использовать строку, которую хотите хэшировать, в качестве ключа, и вы просто используете магическое число (общеизвестную строку) в качестве сообщения, которое вы шифрование. Таким образом, невозможно будет вернуться к хешированной строке. - person thomasrutter; 18.03.2016
comment
Вот как вы превращаете алгоритм шифрования в односторонний хэш. Учитывая, что сообщение всегда является постоянным, это хорошо известная строка, один и тот же ключ шифрования всегда будет приводить к одному и тому же зашифрованному сообщению, но вы не можете отменить его, чтобы вернуть ключ шифрования. - person thomasrutter; 18.03.2016

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

person blowdart    schedule 13.10.2009

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

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

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

person Jonathan Abbey    schedule 18.03.2010
comment
PWDTK sourceforge.net/projects/pwdtknet использует HMAC-SHA512, однако он делает это в течение многих итераций для создания медлительность, известная как Key Stretching, о которой здесь говорили другие. BCrypt лучше, чем один SHA-512, как уже упоминалось, однако, если вы используете SHA-512 в чем-то вроде PBKDF2, тогда вы хорошо защищены (пока вы используете большую крипто-случайную соль и достаточно итераций, чтобы заставить время создайте радужную таблицу) API, который я только что опубликовал, создан мной и будет делать то, что вы хотите в .NET, если это то, для чего вы разрабатываете (для будущих читателей) - person thashiznets; 10.05.2013