Dovrei usare urandom () o openssl_random_pseudo_bytes ()?

6

Sto sviluppando un sito in PHP 5.4. Quale funzione è meglio usare per generare un salt casuale per la sicurezza della password?

$salt = sha1(openssl_random_pseudo_bytes(23));

o

$seed = '';
$a = @fopen('/dev/urandom','rb');
$seed .= @fread($a,23);
$salt = sha1(seed);

O dovrei semplicemente andare con:

$salt =  openssl_random_pseudo_bytes(40);

o

$salt = '';
$a = @fopen('/dev/urandom','rb');
$salt .= @fread($a,23);
    
posta John 30.12.2012 - 09:51
fonte

2 risposte

7

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?)

    
risposta data 30.12.2012 - 15:58
fonte
3

Nota: questo non risponde esattamente alla domanda.

Cerca di non rotolare la tua crittografia. Dato che stai usando PHP, una grande libreria bcrypt - phpass , è prontamente disponibile che si occuperà dell'aspetto dell'hash delle password, incluso generazione di sali.

    
risposta data 30.12.2012 - 09:54
fonte

Leggi altre domande sui tag