Come generare una lunghezza in bit di un numero casuale sicuro è 256 bit utilizzando Java. Qual è la differenza tra:
SecureRandom random = new SecureRandom();
and
SecureRandom prng = SecureRandom.getInstance("SHA1PRNG");
Come generare una lunghezza in bit di un numero casuale sicuro è 256 bit utilizzando Java. Qual è la differenza tra:
SecureRandom random = new SecureRandom();
and
SecureRandom prng = SecureRandom.getInstance("SHA1PRNG");
Con la prima riga, lasci che la JVM usi l'implementazione "sicura casuale" che è registrata come implementazione predefinita in quella JVM, mentre la seconda linea impone l'uso di un'implementazione specifica.
Si consiglia di utilizzare l'impostazione predefinita ( new SecureRandom()
) perché una specifica piattaforma compatibile Java potrebbe avere un provider dedicato che è "migliore" (ad esempio se la piattaforma ha un RNG hardware, la JVM potrebbe essere stata configurata per l'uso con un'implementazione specifica dell'interfaccia SecureRandomSpi
, che ottieni selezionando "provider predefinito" ma non applicando l'utilizzo di "SHA1PRNG"
).
Okay, mi piace correggere alcune cose su SecureRandom. Suppongo che la mia versione fosse diversa da quella corrente, in realtà ottiene i suoi semi da una posizione piuttosto imprevedibile, qualcosa con intervalli di sospensione del thread. Comunque continua sempre a riutilizzare sempre gli stessi 20 semi sì sembra impossibile a questo punto capirlo e probabilmente è dovuto al fatto che la maggior parte della gente si arrenderà, ma ora è come un mazzo di RNG se qualcuno è abbastanza pazzo e non lo ri-semina mai, riescono ancora a capire tutti i semi.
L'unica differenza tra new Random()
e new SecureRandom()
è il modo in cui il seme è selezionato in Random, utilizza millisecondi in SecureRandom, utilizza nanosecondi che sono molto più difficili da prevedere in realtà, quindi millisecondi.
Ma solo 1 milione di tentativi in più o così i loop per capirlo e sincronizzare il generatore di numeri casuali.
Dovresti semplicemente ri-seminare il tuo RNG ogni poche chiamate e anche questo potrebbe essere previsto se qualcuno lo studia abbastanza a lungo da non poter ri-seminarlo con un RNG simile dato che ha anche il difetto. Perché se qualcuno lo studia abbastanza a lungo lo scopriranno anche se è molto delicato questo punto e ha un sacco di fortuna, ma hey ci sono persone che lo fanno, semplicemente richiede i tempi giusti.
Anche se so che non hai chiesto di new Random()
solo cercando di affermare che non è sicuro come si può pensare che un generatore di numeri casuali migliore utilizzi la polvere dalla RAM, ad esempio in qualsiasi posizione casuale che includa molti fattori che persone esterne non riescono a capire ... come se la VM Java sia caricata in memoria a meno che non dirottino il tuo sistema remoto che è ciò che praticamente rende tutto ciò che fai haha non sicuro.