PBKDF2

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

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

Алгоритм

Загальний вигляд виклику 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 — 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-байтове ціле з першим msb байтом.

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 з параметрами[1]:

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[2]. Для порівняння, класичні функції хешування паролю LANMAN мають швидкість перебору близько сотень мільйонів варіантів в секунду[3].

Використання

Алгоритми

Використовується як перша і остання стадія в адаптивній криптографічній функції формування ключа на основі пароля scrypt. Дана функція була спеціально розроблена для додатків, де обчислення PBKDF2 виявляється занадто швидким.

Системи

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

Шифрування дисків

  • FileVault (macOS)[8]
  • FreeOTFE (Windows і КПК)
  • LUKS — Unified Linux Key Setup (Linux)
  • TrueCrypt (Windows, Linux, macOS)
  • VeraCrypt (Windows, Linux, macOS)
  • DiskCryptor (Windows)
  • Cryptographic disk (NetBSD)
  • GEOM ELI модуль для ОС FreeBSD
  • Шифрування softraid з OpenBSD
  • EncFS (Linux) з версії v1.5.0

Примітки

  1. WPA key calculation: From passphrase to hex. Архів оригіналу за 29 квітня 2015. Процитовано 3 квітня 2018.
  2. OpenCiphers. Архів оригіналу за 15 квітня 2018. Процитовано 3 квітня 2018.
  3. OpenCiphers. Архів оригіналу за 10 березня 2018. Процитовано 3 квітня 2018.
  4. Windows Data Protection [Архівовано 2007-04-16 у Wayback Machine.]
  5. WinZip® - AES Coding Tips for Developers. Архів оригіналу за 4 квітня 2018. Процитовано 3 квітня 2018.
  6. BRG Main SIte
  7. LastPass : The last password you'll have to remember: LastPass Security Notification. Архів оригіналу за 19 травня 2012. Процитовано 3 квітня 2018.
  8. nsa.org is registered with pairNIC.com (PDF). Архів оригіналу (PDF) за 15 березня 2007. Процитовано 18 квітня 2013. {{cite web}}: Вказано більш, ніж один |deadlink= та |deadurl= (довідка)
  • п
  • о
  • р
Загальні функції
  • MD5 (скомпрометована)
  • SHA-1 (скомпрометована)
  • SHA-2
  • SHA-3
  • BLAKE2
Фіналісти SHA-3
  • BLAKE
  • Grøstl[en]
  • JH[en]
  • Skein
  • Keccak (переможець)
Інші функції
  • BLAKE3[en]
  • CubeHash[en]
  • ECOH[en]
  • FSB[en]
  • Fugue[en]
  • ГОСТ 34.311-95[ru]
  • HAS-160[en]
  • HAVAL
  • Купина
  • LSH[en]
  • Lane[en]
  • MASH-1[en]
  • MASH-2[en]
  • MD2
  • MD4
  • MD6
  • MDC-2[en]
  • N-Hash
  • RIPEMD[en] (128 160 256[ru])
  • RadioGatún[en]
  • SIMD[en]
  • SM3[en]
  • SWIFFT
  • Shabal[en]
  • Snefru[en]
  • Streebog[en]
  • Tiger
  • VSH[en]
  • Whirlpool
Гешування паролів/
розтягування ключів[en]
  • Argon2
  • Balloon[en]
  • Bcrypt
  • Catena[en]
  • crypt
  • LM hash[en]
  • Lyra2[en]
  • Makwa[en]
  • PBKDF2
  • Scrypt
  • yescrypt[en]
Формування ключа
  • HKDF[en]
  • KDF1/KDF2
Коди автентифікації
повідомлення
  • CBC-MAC
  • DAA[en]
  • GMAC
  • HMAC
  • NMAC[en]
  • OMAC[en]/CMAC[en]
  • PMAC[en]
  • Poly1305[en]
  • SipHash[en]
  • UMAC[en]
  • VMAC[en]
Режими аутентифікованого
шифрування
  • CCM[en]
  • ChaCha20-Poly1305[en]
  • CWC[en]
  • EAX[en]
  • GCM
  • IAPM[en]
  • OCB[en]
Контрольні сумми та
некриптографічні[en]
функції
Атаки (огляд[en])
Конструкції
Стандартизація
  • CAESAR Competition[en]
  • CRYPTREC
  • NESSIE
  • NIST SHA-3
  • Password Hashing Competition[en]
Використання