2016-11-29 3 views
0

Es gibt eine Menge Fragen, die fragen, ob eine spezifische Initiierung von SecureRandom "gut" ist, aber ich konnte keine Faustregel finden.Was ist der beste Weg, um ein "gutes" SecureRandom zu erstellen?

Was ist der beste Weg, um eine "gute" zufällige SecureRandom zu erstellen?

// Fast 
// Is it a good random? 
SecureRandom secureRandom = new SecureRandom()? 

// Freezes for a few seconds after being used several times - until getting a random enough seed. 
// See http://stackoverflow.com/questions/137212/how-to-solve-performance-problem-with-java-securerandom#comment68934647_137212 
// Is it a good random? 
SecureRandom secureRandom = new SecureRandom(SecureRandom.getSeed(20))? 

// Freezes for a very long time. Waited minutes and still no return :(
SecureRandom secureRandom = new SecureRandom.getInstanceStrong()? 

Other? 

Antwort

0

Ich glaube, dass, wenn Sie spezielle Anforderungen haben, alle von ihnen gut genug sind.

Der Doc für getSeed() sagt:

Diese Methode ist nur für die Abwärtskompatibilität enthalten ist. Dem Aufrufer wird empfohlen, eine der alternativen getInstance-Methoden zu zu verwenden, um ein SecureRandom-Objekt zu erhalten, und dann die generateSeed-Methode zu aufzurufen, um Startwertbyte von diesem Objekt zu erhalten.

Sie können natürlich genau die Anweisungen befolgen, aber ich bin mir nicht sicher, ob es einen Punkt gegenüber Ihren anderen Beispielen gibt.

Ich kann mich nicht erinnern, wo, aber ich habe vor langer Zeit gelesen, dass es vorzuziehen ist, den Algorithmus explizit anzugeben. So mache ich normalerweise

SecureRandom.getInstance("SHA1PRNG") 

für SHA1 Algorithmus; PRNG ist für Pseudozufallszahlengenerator. Während SHA1 für allgemeine kryptografische Zwecke getragen wird, wird mir gesagt, dass es für Zufallszahlen immer noch in Ordnung ist, auch wenn Sie sie für kryptographische Schlüssel verwenden möchten.

Verwandte Themen