Il modo giusto per generare un salt per l'hashing della password è: non farlo da solo. Utilizzare una libreria che già fa la cosa correttamente. Vedi @ Risposta di Terry per i puntatori.
Per la tua domanda esatta, succede che openssl_random_pseudo_bytes()
si affidi al PRNG interno di OpenSSL, che a sua volta si nutre di cosa la piattaforma sottostante fornisce, cioè dev/urandom
, quindi è sicura. A rigor di termini, dovresti usare il secondo parametro di quella funzione per verificare se OpenSSL ha trovato una strong fonte di casualità sulla piattaforma locale (vedi the documentation ), ma in pratica, finché OpenSSL gira su una piattaforma simile a Unix o simile a Windows, le cose andranno bene. Quindi non importa, per sicurezza, se chiami openssl_random_pseudo_bytes()
o leggi /dev/urandom
te stesso. Per motivi di manutenzione, preferirei il primo, che è più semplice (una sola chiamata) e più portabile (funzionerà anche su Windows, mentre la lettura di /dev/urandom
non lo farà).
In entrambi i casi, l'applicazione di SHA-1 sull'output di openssl_random_pseudo_bytes()
o /dev/urandom
è totalmente inutile. Il buon PRNG produce già byte casuali uniformemente imprevedibili (e se il tuo PRNG non è buono, allora perché lo stai usando?)