Minha equipe entregou algum código do lado do servidor (em Java) que gera tokens aleatórios e eu tenho uma pergunta sobre o mesmo -
O objetivo desses tokens é bastante sensível - usado para identificação de sessão, links de redefinição de senha, etc. Portanto, eles precisam ser criptograficamente aleatórios para evitar que alguém os adivinhe ou os force brutalmente. O token é um "longo" e, portanto, tem 64 bits.
O código atualmente usa a java.util.Random
classe para gerar esses tokens. A documentação para java.util.Random
afirma claramente o seguinte:
Instâncias de java.util.Random não são criptograficamente seguras. Em vez disso, considere usar o SecureRandom para obter um gerador de números pseudo-aleatórios criptograficamente seguro para uso por aplicativos sensíveis à segurança.
No entanto, a maneira como o código está usando atualmente java.util.Random
é o seguinte: ele instancia a java.security.SecureRandom
classe e, em seguida, usa o SecureRandom.nextLong()
método para obter a semente que é usada para instanciar a java.util.Random
classe. Em seguida, ele usa o java.util.Random.nextLong()
método para gerar o token.
Então, minha pergunta agora - ainda é insegura, dado que o java.util.Random
está sendo semeado usando java.security.SecureRandom
? Preciso modificar o código para que ele use java.security.SecureRandom
exclusivamente para gerar os tokens?
Atualmente, a semente do código é a Random
única vez na inicialização
Random
única vez na inicialização ou semeia um novo para cada token? Felizmente, esta é uma pergunta estúpida, mas pensei em verificar.
long
ou possíveis double
.