di seguito il PDF del prof. Visconti:
Funzione crittografica che prende in input una funzione crittografica chiamata HMAC che a sua volta prende in input una funzione di hash
piuttosto che memorizzare su disco fisso l’hash della mia password, PBKDF2 non computa l’hash della password ma computa l’hash dell’hash dell’hash… della password
insomma computa l’hash della password milioni di volte. Perche?
<aside> 💡 Siccome l’hash non si può invertire ma si deve calcolare, quando mi loggo devo fare migliaia / milioni di volte questa operazione ma
restituisce in output il risultato di HMAC
io voglio una password da memorizzare che sia di x bit, ma la funzione hash è di soli y bit. Se la eseguo un milione di volte comunque avrò y bit.
Quello che voglio fare è che l’output della mia funzione diviso la lunghezza degli x bit
PBKDF2 prende in input
$$ DK = P BKDF 2(p, s, c, dkLen) $$
La chiave derivata è definita come la concatenazione dei blocchi ddkLen/hLene:
$$ DK = T1||T2|| . . . ||T_{[ddkLen/hLen]} $$
dove
$$ T1 = F unction(p, s, c, 1)\\ T2 = F unction(p, s, c, 2)\\ ...\\ T_{[ddkLen/hLene]} = Function(p, s, c, [dkLen/hLen]) $$
Ogni singolo blocco Ti = Function(p, s, c, i) viene calcolato come
$$ Ti = U1 ⊕ U2 ⊕ ... ⊕ U $$
dove
$$ U_1 = PRF (p, s||i)\\ U_2 = PRF (p, U_1)\\ ...\\ Uc = PRF (p, U_{c−1})\\ $$