Per la funzione di hash, si desidera utilizzare una funzione per la quale il tipo di piattaforma più efficiente (quello che produrrà più hash calcoli al secondo e per dollaro) è la macchina che si intende utilizzare (cioè un PC) . Questo perché sei in una corsa agli armamenti con l'attaccante e l'attaccante può acquistare altri tipi di hardware per ottenere un vantaggio su di te (come una GPU). Le GPU sono molto buone con l'aritmetica a 32 bit, ma non con l'aritmetica a 64 bit, mentre un PC (in modalità a 64 bit) sarà piuttosto veloce in quest'ultimo.
Quindi, usa una funzione di hash che gira su operazioni aritmetiche a 64 bit. Questo indica SHA-512 .
PBKDF2 è una funzione di derivazione della chiave : produce un output di dimensioni configurabili. Per l'hashing della password, si desidera che le dimensioni siano sufficientemente grandi da impedire attacchi generici di preimage (ovvero, tentare password casuali fino a quando non viene trovata una corrispondenza), quindi questo avrebbe bisogno, ad esempio, di almeno 80 bit di output. Se solo per rendere la sicurezza più convincente per gli incauti, e anche per l'estetica, scegli la potenza successiva di 2: un output a 128 bit . Non è utile andare oltre.
Il sale deve essere unico - il più unico possibile. Un modo semplice per raggiungere valori salini unici è generare sali con un PRNG crittografico strong : la probabilità di riutilizzare un valore salato sarà sufficientemente bassi da essere trascurati se questi sali casuali sono abbastanza grandi e "abbastanza grandi" significa "128 bit". Quindi utilizza sali a 128 bit casuali .
Personalmente, preferisco bcrypt su PBKDF2 per l'hashing della password.