Подтвердить что ты не робот

Как bcrypt дает больше будущих доказательств, чем увеличение количества итераций SHA?

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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