Nell'esaminare la memoria del nostro database di password hash con sali, noto un alto tasso di collisioni saline, cioè, ci sono troppi casi in cui due righe di tabella hanno lo stesso sale memorizzato.
Una soluzione è iniziare immediatamente a generare sali "migliori" man mano che memorizziamo nuove password salate e hash.
-
Eseguiamo PHP 5.3 in produzione. Ciò significa che probabilmente non possiamo usare librerie che dicono che richiedono PHP 5.4+. (Dico "probabilmente" perché la nostra integrazione con CentOS include alcune funzionalità di PHP 5.4. Stiamo studiando la compatibilità di varie librerie.)
-
Al momento non disponiamo di libsodium.
-
Abbiamo entrambe le estensioni PHP mcrypt e openssl installate e abilitate.
-
Ho letto tutti i post sul blog di Scott su Paragonie. Il più rilevante è Come generare in modo sicuro stringhe e interi casuali in PHP .
Credo che la mia migliore opzione per creare una password salt in queste circostanze sia usare mcrypt per ottenere i byte da / dev / urandom:
$salt = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)
supponendo che 16 byte siano appropriati per il sale. La documentazione di PHP non dice nemmeno se quel primo parametro è in byte! Ma sembra essere così.
Abbiamo poche decine di milioni di utenti, quindi consentire 100 milioni di sali dovrebbe essere ragionevole.
Dati i miei limiti, qualcuno può suggerire un approccio migliore rispetto a prendere 16 byte casuali da / dev / urandom tramite l'estensione mcrypt?
Per essere sicuri, stiamo anche lavorando ad altri aggiornamenti per ottenere una migliore disponibilità delle biblioteche, hashing più strong, ecc. Questo è al di fuori dello scopo di questa domanda.