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.Randomclasse para gerar esses tokens. A documentação para java.util.Randomafirma 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.SecureRandomclasse e, em seguida, usa o SecureRandom.nextLong()método para obter a semente que é usada para instanciar a java.util.Randomclasse. 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.Randomestá sendo semeado usando java.security.SecureRandom? Preciso modificar o código para que ele use java.security.SecureRandomexclusivamente 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.
longou possíveis double.