Diferencia entre java.util.Random y java.security.SecureRandom

Mi equipo recibió un código del lado del servidor (en Java) que genera tokens aleatorios y tengo una pregunta con respecto al mismo:

El propósito de estos tokens es bastante sensible: se utiliza para la identificación de la sesión, los enlaces de restablecimiento de contraseñas, etc. Por lo tanto, deben ser criptográficamente aleatorios para evitar que alguien los adivine o los fuerza bruta. El token es un "largo" por lo que es de 64 bits de largo.

El código utiliza actualmente eljava.util.Random Clase para generar estos tokens. La documentación ([http://docs.oracle.com/javase/7/docs/api/java/util/Random.html◆◆1]) parajava.util.Random establece claramente lo siguiente:

Las instancias de java.util.Random no son criptográficamente seguras. En su lugar, considere usar SecureRandom para obtener un generador de números pseudoaleatorios criptográficamente seguro para que lo utilicen las aplicaciones sensibles a la seguridad.

Sin embargo, la forma en que el código está utilizando actualmentejava.util.Random es esto - crea una instancia deljava.security.SecureRandom clase y luego usa elSecureRandom.nextLong() Método para obtener la semilla que se utiliza para instanciar lajava.util.Randomclase. Entonces usajava.util.Random.nextLong() Método para generar el token.

Así que mi pregunta ahora - ¿Es todavía inseguro dado que lajava.util.Random está siendo sembrado usandojava.security.SecureRandom? ¿Necesito modificar el código para que usejava.security.SecureRandom exclusivamente para generar las fichas?

Actualmente el código de semilla es elRandom una vez en el inicio

Respuestas a la pregunta(7)

Su respuesta a la pregunta