Una funzione di derivazione chiave trasforma alcuni dati segreti in altri dati segreti e viene utilizzata per creare chiavi di dimensioni appropriate da altri tasti che non hanno le dimensioni appropriate. Un esempio di KDF è quello denominato "PRF" all'interno di SSL / TLS : è usato per convertire qualunque chiave condivisa sia stata costruita tra client e server (utilizzando la crittografia RSA o Diffie-Hellman) nelle chiavi simmetriche che verranno utilizzate successivamente per la crittografia simmetrica e il controllo di integrità nella connessione stabilita.
Un KDF basato su password (da cui il nome "PBKDF") è un KDF in cui il materiale sorgente è una "password", cioè un pezzo di dati che viene trattenuto nel cervello di un essere umano e (solitamente) tipizzato su una tastiera dal proprietario del cervello. Questo non è il caso di SSL. Un KDF basato su password viene utilizzato ogni volta che si desidera eseguire la crittografia dei dati "bloccata" da una password. Ad esempio, quando "crittografate" un file con una password (ad esempio "protezione password" in Word o un archivio Zip protetto da password o un portachiavi PGP o chiave privata SSH memorizzato in un file con "protezione passphrase"), puoi essere sicuro che è stato coinvolto un KDF basato su password.
Il lavoro di un KDF basato su password è:
- accetta come input una sequenza di caratteri (di lunghezza semi-arbitraria) e genera una sequenza di bit di lunghezza appropriata per l'algoritmo crittografico previsto (ad esempio 128 bit per la crittografia AES);
- "proteggere" la password contro gli attacchi del dizionario essendo opportunamente lenti e costosi (un utente malintenzionato potrebbe tentare di indovinare la password provando potenziali password, noi vogliamo che ogni processo sia pesante e costoso per lui) e usando un sale (in modo che l'attacco di due file crittografati sia due volte più costoso di un altro).
PBKDF2 assicura la seconda proprietà attraverso un "numero di iterazioni" configurabile e una salt (entrambi i parametri sono in genere memorizzati in un'intestazione pubblica per il file crittografato).
Un uso ambiguo ma comune di PBKDF2 è l'hash delle password. Si tratta di utilizzare l'output PBKDF2 come token di verifica password; una password sarà accettata se la derivazione tramite PBKDF2 darà lo stesso valore. PBKDF2 non è stato inizialmente progettato per questo, ma continua a funzionare in modo accettabile, anche se bcrypt è decisamente migliore (vedi questa risposta ).