Как bcrypt более перспективен для будущего, чем увеличение количества итераций SHA? - PullRequest
12 голосов
/ 22 июля 2011

Я исследовал хеширование bcrypt и, конечно, одно из больших преимуществ схемы - ее адаптивность.Однако, как это может быть адаптивнее, чем просто увеличивать количество итераций, которые вы выполняете над хешем SHA-1?Скажем, вместо хэширования значения SHA-1 1000 раз вы увеличиваете его до 10000 итераций.Разве это не достижение той же цели?Что делает bcrypt более адаптивным?

Ответы [ 6 ]

19 голосов
/ 24 июля 2011

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

bcrypt имеет (небольшое) преимущество перед PBKDF2-с-SHA-1 в этом bcrypt получен из блочного шифра Blowfish .Смысл в том, чтобы иметь много итераций, сделать обработку пароля медленной и, в частности, медленной для злоумышленника.Мы допускаем , что эта функция выполняется медленно для нормальных, честных систем, потому что она препятствует широкому подбору пароля.Но злоумышленник может использовать аппаратное обеспечение, которое не используется обычной системой, например, программируемый графический процессор GPU , который значительно ускоряет вычисления, которые хорошо подходят для такого типа оборудования.Blowfish и bcrypt используют таблицы поиска на основе ОЗУ (таблицы, которые были изменены во время обработки);с такими таблицами легко работать с процессором общего назначения, но довольно сложно на GPU;таким образом, bcrypt несколько препятствует улучшению обработки злоумышленником с помощью графического процессора.Это бонус, который делает bcrypt более привлекательным для хранения паролей, чем PBKDF2.

4 голосов
/ 25 июля 2011

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

3 голосов
/ 22 июля 2011

Ваш вариант немного не указан.Вы не сказали, как объединить пароль и соль в схему хеширования.Неправильное выполнение этого может привести к уязвимости.Преимущество bcrypt (и других стандартных KDF) состоит в том, что это хорошо указано.

Если вы посмотрите на PBKDF2 в обычном режиме HMAC-SHA1, это очень похоже на то, что вы предлагаете.

1 голос
/ 22 июля 2011

Как отмечалось в другом ответе, механизм итерации хеш-функции очень важен, потому что он может неожиданно ослабить алгоритм или все же не предотвратить некоторые атаки компромисса времени и памяти.

Именно поэтому PBKDF2 - вашдруг.Это подробно описано в RFC 2898 .PBKDF2 также ориентирован на будущее, поскольку он не зависит от конкретного алгоритма хеширования.Например, можно поменять MD5 для SHA3, когда SHA3 завершен с помощью NIST.

Кроме того, небольшой улов на будущее.Bcrypt будет работать до тех пор, пока вы защищаете парольную фразу « от 8 до 56 символов ».Важно помнить, что вашему будущему когда-нибудь понадобятся более длинные фразы по какой-то причине.

1 голос
/ 22 июля 2011

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

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

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

0 голосов
/ 22 июля 2011

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

(частично цитируется http://en.wikipedia.org/wiki/Bcrypt)

...