pbkdf2


Предыдущая | Следующая
PBKDF2
Pbkdf2 nist.png
Разработчики RSA Security[d]

PBKDF2 (англ. Password-Based Key Derivation Function) — стандарт формирования ключа на основе пароля. Является частью PKCS #5 v2.0 (RFC 2898). Заменил PBKDF1, который ограничивал длину порождаемого ключа 160 битами.

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

В Российской Федерации использование функции PBKDF2 регламентируется рекомендациями по стандартизации Р 50.1.111-2016 "Парольная защита ключевой информации"[1], при этом в качестве псевдослучайной функции рекомендуется использовать функцию выработки имитовставки HMAC на основе бесключевой функции хеширования Стрибог (ГОСТ Р 34.11-2012).

Алгоритм[править | править код]

Общий вид вызова PBKDF2:

{\displaystyle DK=PBKDF2(PRF,P,S,c,dkLen)}

Опции алгоритма:

Ход вычислений:

1. l — количество блоков длины hLen в ключе (округление вверх), r — количество байт в последнем блоке:

{\displaystyle l=\lceil (dkLen/hLen)\rceil }
{\displaystyle r=dkLen-(l-1)*hLen}

2. Для каждого блока применить функцию F с параметрами P — мастер пароль, S — соль, c — количество итераций, и номером блока:

{\displaystyle T_{1}=F(P,S,c,1)}
{\displaystyle T_{2}=F(P,S,c,2)}
{\displaystyle ...}
{\displaystyle T_{l}=F(P,S,c,l)}

F определена как операция xor ({\displaystyle \oplus }) над первыми c итерациями функции PRF, примененной к паролю P и объединению соли S и номеру блока, записанному как 4-байтовое целое с первым msb байтом.

{\displaystyle F(P,S,c,i)=U_{1}\oplus U_{2}\oplus ...\oplus U_{c}}
{\displaystyle U_{1}=PRF(P,S||INT(i))}
{\displaystyle U_{2}=PRF(P,U_{1})}
{\displaystyle ...}
{\displaystyle U_{c}=PRF(P,U_{c-1})}

3. Объединение полученных блоков составляет ключ DK. От последнего блока берется r байт.

{\displaystyle DK=T_{1}||T_{2}||...||T_{l}<0..r-1>}

Скорость работы[править | править код]

Одной из задач при создании PBKDF2 было усложнить перебор паролей. Благодаря множеству зацепленных вычислений PRF скорость генерации ключа является небольшой. Например, для WPA-PSK с параметрами[2].

{\displaystyle DK=PBKDF2(HMAC-SHA1,passphrase,ssid,4096,256)}

были достигнуты скорости перебора ключей 70 штук в секунду для Intel Core2 и около 1 тысячи на ПЛИС Virtex-4 FX60[3]. Для сравнения, классические функции хеширования пароля LANMAN имеют скорость перебора около сотен миллионов вариантов в секунду[4].

Использование[править | править код]

Алгоритмы[править | править код]

Системы[править | править код]

Шифрование дисков[править | править код]