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 příspěvek zaujal, sdílejte ho!
Email this to someone
email
Share on LinkedIn
Linkedin
Tweet about this on Twitter
Twitter
Share on Facebook
Facebook
Print this page
Print

Š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: