Un rand di glibc è sicuro per una chiave di accesso?

9

La stessa domanda di È un rand da / dev / urandom secure per un tasto di accesso , ma con la funzione rand di glibc anziché /dev/urandom . E quale sarebbe un generatore di semi sufficientemente sicuro?

    
posta Robin Green 01.07.2011 - 14:55
fonte

2 risposte

14

No. Il PRNG nelle tipiche librerie C è progettato per la velocità, non per la sicurezza. Di solito è appropriato per simulazioni numeriche e giochi (in implementazioni di buona qualità - ci sono implementazioni là fuori, per lo più vecchie, dove non è appropriato per nulla), ma non per la crittografia. Un PRNG crittografico deve essere imprevedibile, ovvero un utente malintenzionato che genera una serie di numeri non deve essere in grado di fare una buona indovina al prossimo numero. La tipica libreria C PRNG si impegna per la velocità e le buone proprietà statistiche ma non per l'imprevedibilità.

A partire da Glibc 2.7, rand e amici usano un lineare PRNG congruenziale o un registro spostamento lineare feedback a seconda della lunghezza seme disponibile.

Per generare materiale chiave o qualsiasi altro numero casuale coinvolto nella crittografia (comprese cose non segrete come nonce che tuttavia devono essere imprevedibili), ottenere tutti i bit da un RNG di qualità crypto. Il /dev/urandom di Linux (o qualsiasi altro unix che ha /dev/urandom ) va bene per quello. Devi usarlo per ogni byte di ogni chiave; usarlo come seme della libreria C PRNG non è buono (ci sarebbe una strong correlazione tra le chiavi). Una libreria come OpenSSL è un'altra scelta; probabilmente utilizzerà /dev/urandom sotto il cofano come seme, ma potrebbe essere un po 'più veloce se generi grandi volumi di dati casuali.

    
risposta data 01.07.2011 - 15:25
fonte
5

No! rand() è totalmente insicuro. L'utilizzo di rand() per questo scopo ha causato principali vulnerabilità nei principali sistemi .

Usa solo /dev/urandom .

    
risposta data 02.07.2011 - 09:11
fonte

Leggi altre domande sui tag