Mescolare le due funzioni non sarebbe di grande aiuto. Bcrypt e PBKDF2 hanno entrambi un costo configurabile: si suppone di impostare il numero di iterazioni al valore massimo che è ancora tollerabile nella propria situazione, dato l'hardware disponibile e i vincoli ambientali (ad esempio la pazienza media dell'utente). Se si desidera utilizzare entrambe le funzioni insieme, devono condividere lo stesso budget della CPU; in altre parole, dovresti ridurre il numero di iterazioni rispetto a quello che useresti in entrambe le funzioni.
Quindi non ottieni qualcosa di più strong in questo modo; invece, ottieni un livello di sicurezza che è una media di ciò che avresti ottenuto con Bcrypt da solo o con PBKDF2 da solo.
La combinazione di due funzioni di hash o funzioni simili insieme è buona per evitare un errore catastrofico, se si scopre che è rotto; ma, supponendo che sia Bcrypt che PBKDF2 siano forti, e la domanda riguarda principalmente le prestazioni (sia bcrypt che PBKDF2 stanno facendo una ricerca esaustiva più lenta, quindi questo è tutto sulle prestazioni). Per una lentezza ottimale, combinare bcrypt e PBKDF2 è non una buona idea.
Per la scelta tra bcrypt e PBKDF2, vedi questa risposta precedente . Per riassumere:
-
Bcrypt è migliore se il tuo hardware è simile al PC (cioè ha diversi kilobyte di RAM con accesso rapido). È più difficile per l'attaccante ottimizzare la ricerca esauriente con una GPU, se si utilizza bcrypt, rispetto a PBKDF2.
-
PBKDF2 ha la benedizione del NIST (è Approvato, con una grande "A"). Il NIST non dice nulla su bcrypt.
-
Bcrypt emette 192 bit, che va bene per un token di verifica password, o se hai solo bisogno di 192 bit (o meno) di materiale chiave derivato da password. D'altra parte, PBKDF2 è una funzione di derivazione della chiave e può produrre quanti più bit desideri, il che è positivo se tu bisogno di più di 192 bit di materiale chiave.