Základy kryptografie pro manažery: PBKDF2

Kryptografická funkce PBKDF2 je ideální pro použití v autentizačním schématu, neboť použitá sůl zabraňuje slovníkovému útoku a stretching zase útoku hrubou silou.

PBKDF2  (Password Based Key Derivation Function) je kryptografická funkce, která generuje klíč (derived key, zkr. DK) o požadované délce (derived key length, zkr. dkLen) z hesla (Password, zkr. P) zadaného uživatelem a soli (salt, zkr. S) libovolné délky a to opakováným voláním (iteration count, zkr. c) pseudonáhodné funce (pseudo random function, zkr. PRF), jejímž výstupem je hash o určité délce (hash length, hLen).

DK = PBKDF2 (PRF, P, S, c, dkLen)

Vzhledem k tomu, že hesla zadávaná uživateli jsou zpravidla slabá, doporučuje se používat sůl o minimální délce 128 bitů a provádět alespoň 1000 iterací. Ale můžete klidně provádět i 10.000 nebo 100.000 iterací, vše záleží jen na tom, jak výkonným HW disponujete, protože výpočet klíče trvá určitou dobu a zatěžuje procesor.

Vzhledem k tomu, že výstupem PRF je vždy hash o určité délce hLen, avšak požadavek na délku klíče  dkLen může být vyšší, je zřejmé, že jen s hashováním si nevystačíme, a že zde budou muset proběhnout i jiné operace. V případě, že jako pseudonáhodnou funkci použijeme osvědčenou HMAC-SHA1, kde je hLen = 160 bitů a zároveň požadavek na délku klíče je 192 bitů, je jasné, že dkLen > hLen. Spočteme tedy počet bloků b = dkLen / hLen a výsledek zaokrouhlíme nahoru. Dále spočteme počet bytů posledního bloku r = dkLen – (b – 1) * hLen. V tomto případě nám tedy vyjde b = 2 a r = 32.

V našem příkladě zvolíme jako heslo řetězec „P4$$w0rD“ a jako sůl řetězec „vijMo5er$6g4r1Q6“ a budeme požadovat provedení 1000 iterací a vygenerování klíče o délce 192 bitů za použití a pseudonáhodné funkce HMAC-SHA1. Heslo a sůl nejprve převedeme do hexadecimální soustavy, P = 5034242477307244 a S = 76696a4d6f3565722436673472315136. A jelikož b = 2, tak musíme i vytvořit dvě soli (S1 a S2) a to tak, že k původní soli přidáme číslo bloku kódované jako 4oktetové celé číslo, tzn. S1 = 76696a4d6f356572243667347231513600000001 a S2 = 76696a4d6f356572243667347231513600000002.

Pro každý blok b pak provedeme c iterací. Přičemž při první iteraci předáváme PRF jako parametr hodnotu P a S1, při druhé a další iteraci předáváme PRF jako parametr hodnotu P a výsledek předchozí iterace, což můžeme jednoduše napsat takto: U1 = PRF (P, S1), U2 = PRF (P, U1) … U1000 = PRF (P, U999). Na jednotlivé výstupy z této funkce pak aplikujeme funkci XOR, což můžeme opět jednoduše zapsat takto: K1 = U1 XOR U2 XOR …XOR U1000. Tímto způsobem získáme klíč K1 o délce 160 bitů.

Stejný výpočet provedeme i pro druhý blok. Přičemž při první iteraci předáváme PRF jako parametr hodnotu P a S2, při druhé a další iteraci předáváme PRF jako parametr hodnotu P a výsledek předchozí iterace, což můžeme opět jednoduše napsat takto: U1 = PRF (P, S2), U2 = PRF (P, U1) … U1000 = PRF (P, U999). Na jednotlivé výstupy z této funkce pak aplikujeme funkci XOR, což můžeme opět jednoduše zapsat takto: K2 = U1 XOR U2 XOR …XOR U1000. Tímto způsobem získáme klíč K2 o délce 160 bitů.

Podle toho, kolik jsme měli bloků, máme i řetězců, v našem případě tedy 2. Když spojíme řetězce K1 a K2, získáme řetězec o délce 320 bitů, který ořízneme zleva na požadovanou délku 192 bitů, a dostaneme DK. Způsob, jakým generování klíče probíhá, si můžete vyzkoušet např. zde, kde byla tato funkce implementována v JavaScriptu.

Zdroj: RFC2898, RSA PKCS #5, NIST 800-132

Pokud vás tento článek zaujal, můžete odkaz na něj sdílet.

Štítky:


K článku “Základy kryptografie pro manažery: PBKDF2” se zde nenachází žádný komentář - buďte první.

Diskuse na tomto webu je moderována. Pod článkem budou zobrazovány jen takové komentáře, které nebudou sloužit k propagaci konkrétní firmy, produktu nebo služby. V případě, že chcete, aby z těchto stránek vedl odkaz na váš web, kontaktujte nás, známe efektivnější způsoby propagace.

Přihlášeným uživatelům se tento formulář nezobrazuje - zaregistrujte se.

Jméno:(požadováno)
E-mail:(požadováno - nebude zobrazen)
Web:

Text vaší reakce: