Ich habe Informationen gefunden, die /proc/sys/kernel//random/entropy_avail
die Anzahl der verfügbaren Bits in angeben /dev/random
. Ich wollte überprüfen, ob der nächste Messwert von /dev/random
blockiert wird, und mein naiver Ansatz bestand darin, nur die entropy_avail
Anzahl der erforderlichen Zufallsbits zu vergleichen, aber es funktioniert nicht gut. Als ich ein einfaches dummes Experiment machte, stellte ich fest, dass die Entropie gepuffert ist. Der 64-Bit-Entropiepuffer liefert 6 Bytes zufälliger Daten.
Ich habe die entropy_avail über diesen einfachen Befehl überwacht:
while true
do
cat /proc/sys/kernel//random/entropy_avail
sleep 1
done
Und ich habe versucht, ein zufälliges Byte per Befehl zu erhalten
dd if=/dev/random bs=1 count=1 > /dev/null
Der dd
Befehl wird blockiert, wenn die Entropie 63 oder weniger beträgt. Wenn die Entropie 64 erreicht und ich ein Byte lese, sinkt die Entropie auf 0, aber ich kann weitere 5 Bytes lesen, ohne zu blockieren. Dann dd
Blöcke wieder bis Entropie erreicht 64.
Was ist die genaue Bedeutung von entropy_avail und wie kann ich die tatsächliche Anzahl verfügbarer Zufallsbits ermitteln?
Antworten:
entropy_avail
gibt nicht die Anzahl der verfügbaren Bits an/dev/random
. Es zeigt die Entropieschätzung des Kernels im RNG-Zustand an, der die Leistung erbringt/dev/random
. Diese Entropieschätzung ist mathematisch gesehen eine ziemlich bedeutungslose Größe; Linux blockiert jedoch,/dev/random
wenn die Entropieschätzung zu niedrig ist.Ein Programm, das aus
/dev/random
Blöcken liest , bis der Wert in/proc/sys/kernel/random/entropy_avail
größer als wird/proc/sys/kernel/random/read_wakeup_threshold
. Das Lesen von/dev/random
verbraucht Entropie mit einer Rate von 8 Bits pro Byte.Aber trotzdem solltest du nicht benutzen
/dev/random
. Sie sollten verwenden/dev/urandom
, das genauso sicher ist, auch zum Generieren von kryptografischen Schlüsseln , und das nicht blockiert. Das Generieren von Zufallszahlen verbraucht keine Entropie: Sobald das System über genügend Entropie verfügt, ist es gut für die Lebensdauer des Universums. Das Betriebssystem speichert einen RNG-Startwert in einer Datei. Sobald das System einmal genug Entropie hat, hat es auch nach einem Neustart genug Entropie.Die einzigen Fälle, in denen dies
/dev/urandom
nicht sicher ist, sind auf einem frisch installierten System, das zum ersten Mal gestartet wird, auf einem Live-System, das gerade gestartet wurde (das Generieren von kryptografischen Schlüsseln aus einem Live-System ist also keine gute Idee!) Oder auf einem frisch installierten System. Booted Embedded Device, das weder über ein Hardware-RNG noch über einen dauerhaften Speicher verfügt. Warten Sie auf solchen Systemen, bis Sie/dev/random
einverstanden sind, 16 Bytes herauszulassen, um sicherzustellen, dass der Entropiepool aufgebaut ist. Dann verwenden/dev/urandom
.quelle
entropy_avail
> 128?/dev/random
, indem Sie blockierenderead
Anrufe verwenden. Zu diesem Zeitpunkt ist bekannt, dass der Entropiepool ausgesät ist und Sie/dev/urandom
sicher verwenden können.bogomips
Situation nicht ähnlich zu sein ./dev/{u,}random
der Entropiequellen generiert wird, vollständig fehlerhaft ist. Wenn Sie davon ausgehen, dass das, was Sie mit dieser Entropie machen, wahrscheinlich auch sowieso völlig kaputt ist. Wenn Sie die Details erfahren