Différence entre java.util.Aléatoire et java.de sécurité.SecureRandom

Mon équipe a transmis certains de côté de serveur de code (en Java) qui génère aléatoirement des jetons et j'ai une question concernant le même

Le but de ces jetons est assez sensible - utilisé pour l'id de session, réinitialisation de mot de passe de liens etc. Donc, ils ne doivent être chiffrée de manière aléatoire pour éviter que quelqu'un de deviner ou de la force brute eux faisable. Le jeton est un "long" de sorte qu'il est de 64 bits.

Le code utilise actuellement le java.util.Random classe pour générer ces jetons. La documentation ([http://docs.oracle.com/javase/7/docs/api/java/util/Random.html][1]) pour java.util.Random clairement les états suivants:

Cas de java.util.Aléatoire ne sont pas cryptographique sécurisé. Plutôt considérer l'aide SecureRandom pour obtenir un point de vue cryptographique sécurisé générateur de nombres pseudo aléatoires pour une utilisation par les services de sécurité des applications sensibles.

Cependant, la façon dont le code est actuellement à l'aide de java.util.Random est-ce - qu'Il instancie la java.security.SecureRandom classe et utilise ensuite la SecureRandom.nextLong() méthode pour obtenir de la semence qui est utilisé pour l'instanciation de la java.util.Randomclasse. Ensuite, il utilise java.util.Random.nextLong() méthode pour générer le jeton.

Donc ma question maintenant: Est - il toujours incertain étant donné que la java.util.Random est alimentée à l'aide de java.security.SecureRandom? Ai-je besoin de modifier le code pour qu'il utilise java.security.SecureRandom exclusivement pour générer les jetons?

Actuellement le code de la graine de la Random fois au démarrage

  • Une fois semées, la sortie de java.util.Le hasard est déterministe de la séquence de nombres. Vous ne voudrez pas que.
  • Le code de la graine de la Random fois au démarrage, ou de graines pour chaque jeton? J'espère que ce est une question stupide, mais j'ai pensé que je voudrais vérifier.
  • Random a seulement 48 bits interne de l'état et de répéter après 2^48 appels à nextLong (), ce qui signifie qu'il ne produira pas possible long ou double valeurs.
  • Il y a un autre problème grave. 64bits moyens de 1,84*10^19 combinaisons possibles, ce qui est trop peu pour résister à une attaque sophistiquée. Il y a des machines qui fêlé 56 bits DES code (facteur de 256 moins) avec 90*10^9 clés par seconde en 60 heures. L'utilisation de 128 bits ou deux longs !
InformationsquelleAutor user967973 | 2012-06-15