Mi equipo recibió un código del lado del servidor (en Java) que genera tokens aleatorios y tengo una pregunta sobre lo mismo:
El propósito de estos tokens es bastante sensible: se usa para identificación de sesión, enlaces de restablecimiento de contraseña, etc. Por lo tanto, deben ser criptográficamente aleatorios para evitar que alguien los adivine o los fuerce de manera bruta. El token es "largo", por lo que tiene 64 bits de largo.
El código actualmente usa la java.util.Randomclase para generar estos tokens. La documentación para java.util.Randomestablece claramente lo siguiente:
Las instancias de java.util.Random no son criptográficamente seguras. Considere en su lugar utilizar SecureRandom para obtener un generador de números pseudoaleatorios criptográficamente seguro para uso de aplicaciones sensibles a la seguridad.
Sin embargo, la forma en que el código está usando actualmente java.util.Randomes la siguiente: crea una instancia de la java.security.SecureRandomclase y luego usa el SecureRandom.nextLong()método para obtener la semilla que se usa para crear instancias de la java.util.Randomclase. Luego usa el java.util.Random.nextLong()método para generar el token.
Entonces mi pregunta ahora: ¿sigue siendo inseguro dado que java.util.Randomse está sembrando java.security.SecureRandom? ¿Necesito modificar el código para que se use java.security.SecureRandomexclusivamente para generar los tokens?
Actualmente, la semilla del código es la Randomúnica en el inicio
Randomuna vez al inicio, o genera una nueva para cada token? Con suerte, esta es una pregunta estúpida, pero pensé en comprobarlo.
longo doublevalores.