SecureRandom Self-Seeding

9

Ich habe eine Menge Beispiele über die SecureRandom gefunden Klasse, die wie folgt aussehen:

%Vor%

oder wie folgt:

%Vor%

oder etwas ähnliches.

Beide SecureRandom() und SecureRandom.getInstance(String) Haben Sie diesen Teil in ihrer Dokumentation:

  

Das zurückgegebene SecureRandom -Objekt wurde nicht gesetzt. Um das zurückgegebene Objekt zu initialisieren, rufen Sie die Methode setSeed auf. Wenn setSeed nicht aufgerufen wird, erzwingt der erste Aufruf von nextBytes das SecureRandom -Objekt selbst. Dieses Self-Seeding wird nicht ausgeführt, wenn setSeed zuvor aufgerufen wurde.

Das Random -Objekt wird also nie als Ziel gesetzt Erstellungszeit in den obigen Beispielen. Die Dokumentation von nextInt() (von Die Dokumentation Random class, wird in SecureRandom ) nicht überschrieben:

  

Die Methode nextInt wird von der Klasse Random wie von:

implementiert
%Vor%

Also, es gibt keinen Aufruf an nextBytes Methode, weder die Dokumentation für die next Methode in SecureRandom sagt etwas über das Seeding aus.

Meine Fragen sind: Sind die oben genannten Random Objekte sicher gesetzt? Sind all diese Beispiele falsch oder fehlt mir etwas? Kann ich einen solchen ungesetzten Zufallszahlengenerator sicher verwenden?

Wie in einem Kommentar richtig angemerkt, schauen Sie sich den Quellcode an es scheint, als ob next nextBytes aufruft, daher wird der Startwert initialisiert, dies wird jedoch in der Dokumentation nicht erwähnt.

    
effeffe 09.06.2013, 11:06
quelle

1 Antwort

3

Kann mit Suns JRE ein SecureRandom ohne Seeding verwendet werden? Nein, aus dem Grund @assylias wies in seinem Kommentar darauf hin. nextInt ruft nextBytes auf, wodurch sichergestellt wird, dass SecureRandom gesetzt ist.

Könnte eine alternative Implementierung der Java-Plattform ein SecureRandom bereitstellen, das ohne Seeding verwendet werden könnte, während die dokumentierte Schnittstelle weiterhin eingehalten wird? Ja. Wäre das schlecht? Oh ja. Würde ein Implementierer so dumm sein, so etwas zu tun? Wahrscheinlich nicht. Ist es etwas, über das sich Java-Programmierer Gedanken machen müssen? Nein.

    
Alex D 09.06.2013, 16:16
quelle

Tags und Links