Mon équipe a reçu un code côté serveur (en Java) qui génère des jetons aléatoires et j'ai une question à ce sujet -
Le but de ces jetons est assez sensible - utilisé pour l'identifiant de session, les liens de réinitialisation de mot de passe, etc. Ils doivent donc être cryptographiquement aléatoires pour éviter que quelqu'un ne les devine ou les force brutalement. Le jeton est un "long" donc il est long de 64 bits.
Le code utilise actuellement la java.util.Random
classe pour générer ces jetons. La documentation de java.util.Random
indique clairement ce qui suit:
Les instances de java.util.Random ne sont pas cryptographiquement sécurisées. Envisagez plutôt d'utiliser SecureRandom pour obtenir un générateur de nombres pseudo-aléatoires cryptographiquement sécurisé à utiliser par les applications sensibles à la sécurité.
Cependant, la façon dont le code utilise actuellement java.util.Random
est la suivante: il instancie la java.security.SecureRandom
classe, puis utilise la SecureRandom.nextLong()
méthode pour obtenir la valeur de départ utilisée pour instancier la java.util.Random
classe. Ensuite, il utilise une java.util.Random.nextLong()
méthode pour générer le jeton.
Donc, ma question maintenant - est-il encore peu sûr étant donné que le java.util.Random
semis est utilisé java.security.SecureRandom
? Dois-je modifier le code afin qu'il utilise java.security.SecureRandom
exclusivement pour générer les jetons?
Actuellement, la graine de code est Random
une fois au démarrage
Random
une fois au démarrage, ou en amène-t-il un nouveau pour chaque jeton? J'espère que c'est une question stupide, mais j'ai pensé vérifier.
long
ou les double
valeurs.