Ho letto che, generalmente, some implementations of SecureRandom may produce true random numbers.L'implementazione Android di SecureRandom produce numeri casuali veri?
In particolare, il Android docs dire
istanze di questa classe genera un seme iniziale utilizzando una sorgente di entropia, come/dev/urandom
ma significa produrrà numeri casuali veri (cioè, piuttosto che numeri pseudo-casuali)?
E se uso SecureRandom in Android in questo modo ...
SecureRandom sr = new SecureRandom();
... Riceverò un'uscita veramente casuale ogni volta che io chiamo sr.nextBoolean()
?
O è probabile che l'output sia più (o meno?) Casuale se io, invece, ottengo l'output facendo ciò ogni volta: new SecureRandom().nextBoolean()
?
Questo non è * necessariamente * vero in quanto alcuni dispositivi Android non dispongono dell'hardware per generare un numero casuale * true *. Per quanto riguarda i dispositivi * con * che l'hardware userà, non lo assumerei, anche se il kernel Linux potrebbe caricare un modulo che ottiene numeri casuali veri da tale hardware. – hexafraction
AFAIK tutte le implementazioni utilizzano forme diverse o hashing algoritmico. Pur avendo buone proprietà matematiche, non sono veramente casuali. –
Da [Blog degli sviluppatori Android] (http://android-developers.blogspot.com/2013/08/some-securerandom-thoughts.html): * "Abbiamo ora stabilito che le applicazioni che utilizzano Java Cryptography Architecture (JCA) per la generazione di chiavi, la firma o la generazione di numeri casuali potrebbero non ricevere valori crittografici forti sui dispositivi Android a causa dell'inadeguata inizializzazione del PRNG sottostante ... "*. Dopodiché, credo che AOSP passi al generatore di OpenSSL. Il cambiamento si è verificato in [Jelly Bean] (http://android-developers.blogspot.com/2013/02/security-enhancements-in-jelly-bean.html). – jww