È necessario eseguire il reseeding di OpenSSL CSPRNG se si utilizza RAND_bytes?

1

Ho letto che PRNG sicuro per i criografi (CSPRNG) ha bisogno di un seme casuale per fornire output casuali. Guardando a OpenSSL che sembra essere archiviato da RAND_poll() e i dati casuali vengono recuperati con RAND_bytes(buf, length) .

Ma non sono sicuro di avere tutto a posto che è indicato nella documentazione qui . So che RAND_bytes chiamerà RAND_poll() se non è stato chiamato prima almeno una volta.

Ho anche letto (da qualche altra parte) che un seme non deve essere riutilizzato per un CSPRNG. Ora la mia domanda è: RAND_bytes riutilizza qualsiasi seme? Devo eseguire manualmente il reseeding di OpenSSL per chiamate RAND_bytes distinte utilizzando RAND_bytes(buf, length) ancora e ancora se non voglio riutilizzare il seed?

O RAND_bytes lo gestisce da solo?

    
posta little_planet 08.03.2016 - 14:34
fonte

1 risposta

0

Does RAND_bytes reuse any seed?

Kindof.
Riutilizzare un seme è sbagliato, perché ti darà di nuovo gli stessi numeri casuali. OpenSSL non lo fa. Tuttavia, ti è permesso utilizzare il seme ottenuto dal primo RAND_poll per tutto il tempo che vuoi (il che non è consigliabile) in quanto il PRNG genererà un flusso costante di byte (imprevedibili) basati su questo seme e lo farai solo essere servite parti "successive" nello stream se non è necessario eseguire il resezione.

Dovresti ri-seminare il PRNG il più spesso possibile se hai entropy dati ricchi, ma funzionerà anche (abbastanza sicuro) se non lo fai.

Risposta finale: RAND_bytes (kindof) gestisce questo stesso.

    
risposta data 08.03.2016 - 15:27
fonte

Leggi altre domande sui tag