Unterschied zwischen java.util.Random und java.security.SecureRandom
Mein Team hat einen serverseitigen Code (in Java) erhalten, der zufällige Token generiert, und ich habe eine Frage dazu -
Der Zweck dieser Token ist ziemlich heikel - sie werden für Sitzungs-IDs, zum Zurücksetzen von Passwörtern usw. verwendet. Sie müssen daher kryptografisch zufällig sein, damit niemand sie erraten oder brutal erzwingen kann. Das Token ist "long", also 64 Bit lang.
Der Code verwendet derzeit diejava.util.Random
Klasse, um diese Token zu generieren. Die Dokumentation ([http://docs.oracle.com/javase/7/docs/api/java/util/Random.html[1]) zumjava.util.Random
gibt eindeutig Folgendes an:
Instanzen von java.util.Random sind nicht kryptografisch sicher. Verwenden Sie stattdessen SecureRandom, um einen kryptografisch sicheren Pseudozufallszahlengenerator für sicherheitsrelevante Anwendungen zu erhalten.
Die Art und Weise, wie der Code derzeit verwendet wirdjava.util.Random
ist dies - Es instanziiert diejava.security.SecureRandom
Klasse und verwendet dann dieSecureRandom.nextLong()
Methode, um den Startwert zu erhalten, der zum Instanziieren desjava.util.Random
Klasse. Dann nutzt esjava.util.Random.nextLong()
Methode zum Generieren des Tokens.
Also meine Frage jetzt - Ist es angesichts der Tatsache, dass diejava.util.Random
wird ausgesät mitjava.security.SecureRandom
? Muss ich den Code ändern, damit er verwendet wird?java.security.SecureRandom
ausschließlich, um die Token zu generieren?
Derzeit ist der Code-Startwert derRandom
einmal beim Start