Wie oft entnimmt / dev / urandom eine Stichprobe aus / dev / random?

15

Es sei denn, ich bin total verwirrt und das macht es nicht.

Ich möchte wissen, ob / dev / urandom an Entropie gewinnt oder nicht, wenn ich ein Hardware-RNG nehme und dessen Entropie in / dev / random einstecke.

Wenn ich also die Entropie von / dev / random um X Bits / Sek. Erhöhen würde (das heißt, mit / dev / random können Sie nach der Injektion X Bits / Sek. Abtasten), würde dann die Entropie mehr auf urandom übertragen?


quelle
2
2uo.de/myths-about-urandom und blog.cloudflare.com/… (insbesondere die Grafik unter blog.cloudflare.com/content/images/image01.png ) sind zwar nicht sehr relevant, können aber hilfreich sein.
user1686
Wenn Sie ein echtes Hardware-RNG hätten, könnten Sie es direkt verwenden.
Michael Hampton

Antworten:

25

Es ist nicht wirklich genau zu sagen, dass /dev/urandomProben aus /dev/random. Stattdessen werden die beiden Pools von derselben Entropiequelle unterstützt. Wenn die Entropiezahl der Pools Null erreicht, werden sie erneut aus dem gemeinsam genutzten Eingabepool entnommen. Wenn Sie also die Kernel-Eingabe-Entropie in irgendeiner Weise angeben, kann diese entweder für /dev/randomoder verwendet werden /dev/urandom, je nachdem, was gelesen wird.

Allerdings /dev/urandom ist auch die Häufigkeit begrenzt , mit der eine Nachsaat verlangt werden kann. Standardmäßig kann es nur einmal alle 60 Sekunden wiederholt werden.

In der Praxis spielt das keine Rolle, denn solange der Pool anfangs mit mindestens 128 Bit Entropie besetzt ist, müsste für die Vorhersage einer Ausgabe nicht nur die vorherigen Ausgaben angezeigt werden, sondern auch die verwendeten Algorithmen, einschließlich mindestens des Vorabbildungswiderstands, gebrochen werden von SHA-1 ( das ungebrochen bleibt ).

otus
quelle
7

Das hängt von der Implementierung ab. Aber in der Regel /dev/randomund /dev/urandomziehen Sie Entropie aus dem gleichen Pool, so wird es.

Diagramm von https://blog.cloudflare.com/ensuring-randomness-with-linuxs-random-number-generator/

David Schwartz
quelle
4

In Linux werden alle Daten, die entweder in / dev / random oder / dev / urandom geschrieben wurden, sowohl in den blockierenden Pool (Zufallsquelle für / dev / random) als auch in den nicht blockierenden Pool (Zufallsquelle für / dev / urandom) kopiert.

Schauen Sie sich einfach die Funktion random_write an .

In / dev / random geschriebene Daten werden jedoch vom internen Entropieschätzer nicht gezählt (schließlich kann es vorkommen, dass ein lokaler Gegner versucht, / dev / zero oder eine andere nicht zufällige Quelle nur nach / dev / random umzuleiten) Wenn Sie / dev / random blockieren, hilft es nicht, nur nach / dev / random zu schreiben.

In Linux schreibe nach / dev / random (oder / dev / urandom, kein Unterschied), lese aber immer aus / dev / urandom (sobald es gesetzt ist - eigentlich ist der beste Weg, den neuen Systemaufruf getrandom zu verwenden ).

Ich weiß nicht, wie es in anderen Unices funktioniert.

JJZ
quelle