PBKDF2 è un funzione di hashing della password (*); usa un numero configurabile di iterazioni (per renderlo il più lento possibile) e un sale (per dissuadere ogni tipo di parallelismo negli attacchi). Per verificare una password, l'hash viene ricalcolato e dovrebbe fornire lo stesso valore. Per eseguire questo ricalcalo, è necessario utilizzare lo stesso numero di iterazioni e lo stesso valore di sale; altrimenti otterrai un output distinto e non ne saprai di più.
Per ogni nuova password registrata viene generato un nuovo salt (ad es. ogni volta che viene creato un nuovo account utente e anche ogni volta che un utente cambia la sua password), quindi deve essere memorizzato insieme al valore hash.
Il conteggio delle iterazioni dovrebbe anche essere memorizzato, perché potrebbe essere modificato in qualche punto. Nel codice a cui si fa riferimento, il conteggio è una costante ( static final
), ma il suo ruolo concettuale è quello di contrastare l'aumento delle prestazioni dei computer nel tempo: si utilizza il numero di iterazioni per rendere ciascuna hashing della password lento come si può tollerare, perché renderà anche lento per l'attaccante. Quando acquisti un nuovo server più veloce, potresti voler aumentare il conteggio delle iterazioni (ad esempio modificando il codice sorgente e ricompilando l'applicazione, con un conteggio maggiore). Tuttavia, in questo caso, non si desidera invalidare le password hash memorizzate esistenti. Pertanto, è necessario sapere, per ogni hash memorizzato, quante iterazioni sono state utilizzate per quel determinato hash. Questo è il motivo per cui il conteggio delle iterazioni viene memorizzato insieme al valore salt e al valore hash stesso.
(*) In senso stretto, una funzione di derivazione della chiave basata su password, ma manteniamo le cose semplici.