Bueno, me gusta corregir algunas cosas sobre SecureRandom. Supongo que mi versión era diferente de la actual, en realidad sí que obtiene sus semillas desde una ubicación bastante impredecible, algo con intervalos de espera de rendimiento de subprocesos. Aún así, siempre sigue reutilizando las mismas 20 semillas una y otra vez, sí, parece imposible en este momento resolverlo y probablemente se deba al hecho de que la mayoría de las personas se rendirán, pero ahora es como una baraja de RNG si alguien está lo suficientemente loco y no lo vuelves a sembrar, todavía pueden descubrir todas las semillas.
La única diferencia entre new Random()
y new SecureRandom()
es cómo se selecciona la semilla en Random; usa milisegundos en SecureRandom; usa nanosegundos, que son mucho más difíciles de predecir, en realidad milisegundos.
Pero solo un millón de intentos adicionales lo recuerdan y sincronizan el generador de números aleatorios.
Debería volver a sembrar su RNG cada pocas llamadas e incluso esto podría predecirse si alguien lo estudia el tiempo suficiente, no puede volver a sembrarlo con un RNG similar, ya que también tiene el defecto. Porque si alguien lo estudia el tiempo suficiente, lo resolverán, aunque este punto es muy delicado y está relacionado con la suerte, pero hay gente que hace esto, solo requiere que los tiempos sean los adecuados.
Aunque sé que no preguntaste sobre new Random()
solo tratas de decir que no es tan seguro como puedes pensar que un mejor generador de números aleatorios usaría polvo de tu RAM, por ejemplo, en cualquier ubicación aleatoria que incluya muchos los factores que las personas externas no pueden entender ... como dónde se carga la VM de Java en la memoria a menos que secuestren su sistema remoto, lo que hace que cualquier cosa que haga no sea segura, jaja.