Столкновения PBKDF2-HMAC

Oct 28 2020

Попытка понять хорошо известное свойство этих коллизий при использовании с SHA1, SHA256 и т. Д., Когда заданный ключ больше, чем размер блока функции дайджеста. В этих случаях меньшее из коллизий будет иметь размер 20 символов для SHA1 и 32 для SHA256 (1/2 длины шестнадцатеричного дайджеста), поэтому означает ли это, что перебором PBKDF2-HMAC-SHA1 злоумышленнику нужно только учитывать парольные фразы из 20 символов или меньше? И поэтому 32 или меньше при использовании SHA256? Действительно ли длинные парольные фразы бессмысленны? Благодарю.

Ответы

3 fgrieu Oct 28 2020 at 15:02

«грубая сила PBKDF2-HMAC-SHA1» не касается коллизий (по крайней мере, если нацелен один хэш или если на входе хеша пароля есть соль ). Это атака прообраз .

Хэш-код SHA-1 составляет 160 бит. Это 20 байт (не символы; это разные понятия и почему у нас есть кодировки символов ). Это может занять$2^{160}$ценности. Выходные данные PBKDF2-HMAC-SHA-1 имеют параметризуемый размер, который может быть меньше (путем усечения) или больше (по существу, путем агрегирования 20-байтовых результатов), но для параметра часто устанавливается значение 20 байтов, и мы предполагаем, что .

Означает ли это, что для грубой силы PBKDF2-HMAC-SHA-1 злоумышленнику нужно учитывать только парольные фразы из 20 символов или меньше?

Нет . Это означает, что случайное значение размера хэша имеет вероятность$2^{-160}$чтобы соответствовать заданному хешу. Практическое следствие состоит в том, что попытки наугад безнадежны.

Пароли часто ограничиваются подмножеством ASCII примерно из 95 символов, поэтому существует около $2^{131.714}$пароли не более 20 таких символов (большинство из них ровно 20 символов). Если PBKDF2 параметризован для выполнения 1000 хэшей SHA-1 для каждого PBKDF2 (что является самой низкой параметризацией, когда-либо учитываемой по его определению, и стало совершенно недостаточным), хеширование половины этих паролей потребует более$2^{140}$ хеши, что закончилось $2^{40}$(в миллион миллионов) раз больше, чем потрачено человечеством на добычу биткойнов. Это просто не вариант.

Поиск паролей обычно не перебирает все возможные пароли, состоящие более чем из нескольких символов; обычно ≈6 из ≈70 символов (только очень мощные злоумышленники могут атаковать все комбинации из 10 символов даже при небольшом растяжении пароля / ключа ). Что делает поиск паролей, так это пробует пароли, которые люди могут выбрать правдоподобно, что примерно снижает вероятность их выбора.