PBKDF2

PBKDF2
Разработчики 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:

D K = P B K D F 2 ( P R F , P , S , c , d k L e n ) {\displaystyle DK=PBKDF2(PRF,P,S,c,dkLen)}

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

  • PRF — псевдослучайная функция, с выходом длины hLen
  • P — мастер-пароль
  • S — соль (salt)
  • c — количество итераций, положительное целое число
  • dkLen — желаемая длина ключа (не более ( 2 32 {\displaystyle 2^{32}}  — 1) * hLen)
  • Выходной параметр: DK — сгенерированный ключ длины dkLen

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

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

l = ( d k L e n / h L e n ) {\displaystyle l=\lceil (dkLen/hLen)\rceil }
r = d k L e n ( l 1 ) h L e n {\displaystyle r=dkLen-(l-1)*hLen}

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

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

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

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

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

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

Скорость работы

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

D K = P B K D F 2 ( H M A C S H A 1 , p a s s p h r a s e , s s i d , 4096 , 256 ) {\displaystyle DK=PBKDF2(HMAC-SHA1,passphrase,ssid,4096,256)}

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

Использование

Алгоритмы

  • Используется как первая и последняя стадия в адаптивной криптографической функции формирования ключа на основе пароля scrypt. Данная функция была специально разработана для приложений, где вычисление PBKDF2 оказывается слишком быстрым.

Системы

  • Wi-Fi Protected Access (WPA и WPA2)
  • Microsoft Windows Data Protection API (DPAPI)[5]
  • Шифрование в формате OpenDocument (OpenOffice.org)
  • Схема шифрования AES в WinZip[6][7]
  • LastPass для хеширования паролей[8]
  • 1Password для хеширования паролей
  • Roboform для хеширования паролей
  • Apple iOS мобильная операционная система, для защиты пользовательских кодов доступа и паролей

Шифрование дисков

Примечания

  1. Р 50.1.111-2016 Информационная технология. Криптографическая защита информации. Парольная защита ключевой информации.  (неопр.) Росстандарт (2016). Дата обращения: 10 апреля 2018. Архивировано 11 апреля 2018 года.
  2. WPA key calculation: From passphrase to hex  (неопр.). Дата обращения: 4 марта 2012. Архивировано 29 апреля 2015 года.
  3. OpenCiphers  (неопр.). Дата обращения: 5 мая 2011. Архивировано 15 апреля 2018 года.
  4. OpenCiphers  (неопр.). Дата обращения: 5 мая 2011. Архивировано 10 марта 2018 года.
  5. Windows Data Protection Архивировано 16 апреля 2007 года.
  6. WinZip — AES Coding Tips for Developers  (неопр.). Дата обращения: 5 мая 2011. Архивировано 4 апреля 2018 года.
  7. BRG Main SIte
  8. LastPass Security Notification  (неопр.). Дата обращения: 5 мая 2011. Архивировано 19 мая 2012 года.
  9. nsa.org is registered with pairNIC.com  (неопр.). Дата обращения: 18 апреля 2013. Архивировано 15 марта 2007 года.

Литература

  • RFC 2898, стр. 9—11
  • NIST Special Publication 800-132. Recommendation for Password-Based Key Derivation. // NIST


Перейти к шаблону «Хеш-алгоритмы»
Общего назначения
Криптографические
Функции формирования ключа
Контрольное число (сравнение)
Применение хешей