Ich weiß aus Erfahrung, dass das Lesen aus / dev / random-Blöcken, wenn dem Entropiepool des Linux-Kernels die Entropie ausgeht. Außerdem habe ich viele Artikel und Blogeinträge gesehen, die besagen, dass java.security.SecureRandom unter Linux / dev / random als Entropiequelle verwendet und somit blockiert, wenn dem Kernel-Entropie-Pool die Entropie ausgeht.
Ich kann jedoch kein Experiment erstellen, bei dem SecureRandom blockiert wird. Umgekehrt scheint es einfach zu sein, einen einfachen Bash-Einzeiler zu erhalten, der von / dev / random bis block liest.
Hier ist der Java-Code, den ich für diese Experimente verwende:
import java.security.SecureRandom; öffentliche Klasse A {public static void main (String [] args) {SecureRandom sr = new SecureRandom (); int out = 0; für (int i = 0; i < 1<<20; i ++) {out ^ = sr.nextInt (); } System.out.println (out); }}
Es werden etwas mehr als 1.000.000 zufällige 32-Bit-Ganzzahlen generiert. Das sollten 2 ^ (20 + log2 (32)) = 2 ^ 25 Bits oder 2 ^ 22 (etwas mehr als 4 Millionen) Byte Entropie sein, oder? Es blockiert jedoch nie. Es endet immer in ungefähr 1,2 Sekunden, egal ob ich mit der Maus wackle oder nicht.
Der von mir verwendete Bash-Einzeiler ist:
head -c 100 / dev / zufällig | xxd
Dies blockiert leicht. Solange ich meine Hand von Maus und Tastatur fern halte, bleibt sie einige Minuten lang stehen und tut nichts. Und ich bitte nur um 100 Byte Entropie.
Sicher fehlt mir hier etwas. Könnte jemand erklären, was los ist?
Danke!