PBKDF2

Матеріал з testwiki
Версія від 07:14, 28 листопада 2024, створена imported>InternetArchiveBot (Виправлено джерел: 1; позначено як недійсні: 0.) #IABot (v2.0.9.5)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

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

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

Алгоритм

Загальний вигляд виклику PBKDF2:

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=(dkLen/hLen)
r=dkLen(l1)*hLen

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

T1=F(P,S,c,1)
T2=F(P,S,c,2)
...
Tl=F(P,S,c,l)

F визначена як операція xor () над першими c ітераціями функції PRF, застосованої до паролю P і об'єднання солі S і номера блоку, записаного як 4-байтове ціле з першим msb байтом.

F(P,S,c,i)=U1U2...Uc
U1=PRF(P,S||INT(i))
U2=PRF(P,U1)
...
Uc=PRF(P,Uc1)

3. Об'єднання отриманих блоків становить ключ DK. Від останнього блоку береться r байт.

DK=T1||T2||...||Tl<0..r1>

Швидкість роботи

Одним із завдань при створенні PBKDF2 було ускладнити перебір паролів. Завдяки множині зчеплених обчислень PRF швидкість генерації ключа є невисокою. Наприклад, для WPA-PSK з параметрами[1]:

DK=PBKDF2(HMACSHA1,passphrase,ssid,4096,256)

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

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

Алгоритми

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

Системи

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

  • 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

Примітки

Шаблон:Reflist

Шаблон:Геш-функції та коди аутентифікації повідомлення