Entropiequellen für Linux

9

Angenommen, ich möchte ein Gigabyte oder so zufälliger Daten aus / dev / random, die für ein einmaliges Pad geeignet sind (also ist / dev / urandom out.) Wie setze ich mein / dev / random mit genügend Entropie, um dies zu tun? Ich suche dafür spezielle Befehle und Programme. Ich möchte nichts kaufen. Ich benutze Arch Linux, wenn das einen Unterschied macht.

PyRulez
quelle
Würde ein solches Programm / dev / random nicht zu etwas machen, das das gleiche Problem wie / dev / urandom hat, das Sie nicht verwenden möchten? Oder beziehen Sie sich auf etwas, das von einem Gerät oder über das Netzwerk zusätzliche Entropie erhält?
Anthon
@Anthon Ich spreche von bestimmten Programmen zum Extrahieren von Zufälligkeit aus einer Entropiequelle, wie z. B. Schussrauschen, thermisches Rauschen, einem Gerät usw. Das Programm würde die Zufälligkeit selbst nicht erzeugen.
PyRulez
... zum Beispiel ein Befehl oder ein Programm, das sagt Here — type something:und dann die Zeitdeltas zwischen den Tastenanschlägen mit einer höheren Genauigkeit misst, als ein Mensch steuern kann?
G-Man sagt 'Reinstate Monica'
1
Es erwähnt ein einmaliges Pad als eine von zwei Ausnahmen von der Behauptung, dass _'... fast alle kryptografischen Algorithmen ... "nur" Computersicherheit bieten ". Es sei denn, Sie können etwas zitieren, das ich verpasst habe, wo es heißt, dass einmalige Pads kein Zufall verwenden können?
Nutzlos

Antworten:

4

Zwei Programme, die den Entropiepool ohne zusätzliche Hardware erhöhen können, sind rng-toolsund haveged. rng-toolsVerwendet RNGs, die in modernen CPUs und Chipsätzen verfügbar sind, havegedverwendet moderne CPU-Zufälligkeit (Cache-Verhalten usw.). Beide sind in Arch verfügbar und im Arch-Wiki finden Sie auf einer interessanten Seite. Ich habe nicht versucht, damit ein Gigabyte an Daten zu generieren, aber es sollte in vernünftiger Zeit möglich sein.

Sie schließen den Kauf von allem ausdrücklich aus, aber der Vollständigkeit halber gibt es in LWN einen interessanten Artikel über Entropie mit NeuG , der die Diskussion havegedund verschiedene andere Ansätze enthält. Sie können ein STM8S-Board für NeuG für weniger als 10 US-Dollar oder ein FST-01 für 35 US-Dollar kaufen.

Stephen Kitt
quelle
4

Leider ist / dev / random auch nicht für die Verwendung in einem einmaligen Pad geeignet, zumindest nicht für die Art von einmaligem Pad (mit nachweisbaren Sicherheitsgarantien), die sich die meisten Menschen vorstellen, wenn sie an einmalige Pads denken oder diese implementieren. Die meisten der folgenden Informationen sind aus dem (sehr langen) Artikel unter http://www.2uo.de/myths-about-urandom/ zusammengefasst.

Das Problem ist, dass / dev / random nicht wirklich zufällig ist; Es verwendet ein CSPRNG, um seine Ausgabe zu generieren. Tatsächlich verwendet / dev / random genau das gleiche CSPRNG wie / dev / urandom. Der einzige Unterschied besteht darin, dass / dev / random blockiert, wenn die interne Entropieschätzung nicht ausreicht.

Das Wort "Schätzung" im vorherigen Satz ist der Schlüssel. Die meisten Leute denken, dass diese Schätzung immer genau und perfekt ist, aber in Wirklichkeit ist sie überhaupt nicht genau. In dem Moment, in dem die Schätzung falsch ist, verlieren Sie alle nachweisbaren Sicherheitsgarantien des einmaligen Pads, und alles, was Sie übrig haben, ist Computersicherheit - nicht besser als wenn Sie / dev / urandom verwendet hätten!

Wenn Sie die Entropieschätzung nur ein wenig falsch machen, wird Ihr einmaliges Pad nicht nur ein bisschen unsicher. Die nachweisbare Sicherheitsgarantie eines einmaligen Pads ist alles oder nichts.

Die Prämisse dieser Frage ist, dass die Probleme mit / dev / random durch Hinzufügen von mehr Entropie "behoben" werden können. Leider ist diese Prämisse falsch. Eine böswillige Entropiequelle ist viel schlimmer als gar keine Entropie, da Entropiequellen häufig Zugriff auf interne Daten haben und diese Daten mithilfe der RNG-Ausgabe verdeckt exportieren können - siehe http://blog.cr.yp.to/20140205-entropy .html für eine vollständige Diskussion (zu lang, um sie hier zusammenzufassen). Insbesondere eine Hardware-Entropiequelle (wie von mehreren anderen Antworten empfohlen) ist aus Sicherheitsgründen eine sehr schlechte Wahl, da diese Hardware in der besten Position ist, um böswillige Dinge zu tun, und im Wesentlichen nicht zu prüfen ist.

djao
quelle
Ich habe nicht gesagt, dass ich es mit mehr Entropie reparieren würde, ich brauchte nur mehr für einen größeren Schlüssel. Das ist jedoch ein guter Punkt, wenn es fehlerhaft ist. Können Sie Alternativen empfehlen?
PyRulez
1
Dies ist eine gute Antwort, mit Ausnahme des letzten Teils über Hardwarequellen. Hardware-Entropiequellen sind der einzige zuverlässige und überprüfbare Weg, um Entropie zu erhalten. Sie (oder jemand, dem Sie vertrauen) müssen die Quelle prüfen. Dazu müssen Sie über Konstruktionsinformationen verfügen und überprüfen, ob der Herstellungsprozess die Konstruktionsinformationen berücksichtigt. Sie können sogar Entropiequellen kombinieren, sodass das Ergebnis in Ordnung ist, wenn mindestens eine davon in Ordnung ist (NB, Sie müssen sie dafür korrekt kombinieren).
Gilles 'SO - hör auf böse zu sein'
Gilles, lies den zweiten Link, den ich gepostet habe. Es ist völlig falsch zu behaupten, dass wenn mindestens eine Entropiequelle in Ordnung ist, das Ergebnis in Ordnung ist. Der gesamte Zweck dieses Links besteht darin, diese falsche Behauptung zu widerlegen!
Djao
Darüber hinaus reicht es nicht aus, die Quelle und den Herstellungsprozess zu prüfen. Sie müssen Ihr individuelles Gerät prüfen, um sicherzustellen, dass Ihr Gerät gemäß dem Herstellungsprozess hergestellt wurde. Dies ist eine viel schwierigere Aufgabe als die analoge Aufgabe in der Software, bei der lediglich eine Prüfsumme überprüft wird.
Djao
Was Alternativen betrifft: Es gibt keine alternative magische Möglichkeit, 1 GB zufällige Daten von einem PC zu erhalten. Sie würden dafür ein Hardwaregerät benötigen (aber achten Sie dann darauf, was ich über die Schwierigkeit der Hardware sagte). Wenn Sie bereit waren, / dev / random zu verwenden, ist / dev / urandom genauso gut. Es ist nicht schlechter als / dev / random für alle kryptografischen Anwendungen.
Djao
3

Eine HW-Komponente scheint die beste Idee zu sein. Es gibt einige HW-Generator-ICs, aber Sie müssen ihnen vertrauen, wenn sie kommen.

Zwei wahrscheinlich gute Lösungen bestehen darin, Komponenten dazu zu bringen, Rauschen zu erzeugen. Zwei Hauptlösungen scheinen die Temperaturverschiebung und das mit einer Diode erzeugte Avanche-Rauschen zu sein (siehe http://web.archive.org/web/20061117145903/http://willware.net:8080/hw-rng.html ).

Da die Komponenten wie Kreisel und Beschleunigungsmesser sinnvoller geworden sind, kann es auch eine gute Lösung sein, sie mit höchster Empfindlichkeit arbeiten zu lassen und ihren LSB-Wert zu verwenden, aber AFAIK niemand hat sie geprüft.

Ist lustig, da es viel Papier über NOT do RNG gibt, aber keine offene und verifizierte HW-Implementierung

Lesto
quelle
2

Sie könnten pycsprng.py verwenden . Kryptografisch sicher? Ich bin mir nicht ganz sicher, aber ich hätte gerne ein Peer-Review.

python pycsprng.py | pv | dd of=data.file bs=1024 count=1000

Die Pipe to pvist optional und hilft Ihnen nur zu wissen, wie viele Daten übertragen wurden.

Möglicherweise stellen Sie fest, dass größere Blockgrößen (bs) die Leistung erhöhen. Sie müssen die Anzahl anpassen, um keine zu große Datei zu generieren, wenn Sie die Blockgröße erhöhen.

Daryl Tucker
quelle
3
Das nutzt nur /dev/urandom...
Stephen Kitt
1
pycsprng.pyist buchstäblich ein 10-SLOC-Skript, von dem Zufälligkeit herrührt os.urandom. Die Ärzte sagen, dass "die zurückgegebenen Daten für kryptografische Anwendungen unvorhersehbar genug sein sollten [...] Auf einem UNIX-ähnlichen System wird dies abgefragt /dev/urandom" . Es funktioniert tatsächlich (es ist jedoch eine veraltete Quelle) und Security.SE sagt, dass es für Krypto in Ordnung ist .
Gronostaj
Keine einmalige Krypto!
PyRulez
0

Was Sie von einem analogen Mikrofonkanal erhalten, wenn Sie kein Mikrofon anschließen, ist normalerweise nur statisch. Pipe das durch bzip2, zum Beispiel zum Aufhellen, mische es mit einer anderen Zufallsquelle (urandom oder einer anderen Mikrofonbuchse), leite das Ergebnis vielleicht für ein gutes Maß durch openssl und was du bekommst, sollte ziemlich zufällig sein.

Es wäre jedoch schwierig, harte und schnelle Sicherheitseigenschaften über die Zufälligkeit des Ergebnisses nachzuweisen.

Johannes Bauer
quelle
0

Wenn Sie den Linux-Kernel 2.6.9 oder neuer in einem amd64 / x86_64-Prozessor, einer virtuellen oder physischen Umgebung verwenden, können Sie ncomputers.org/pandom als echten Zufallszahlengenerator ausprobieren, der eine Entropie von 8 KiB / s von 64 Ubits / 64 Bit bietet/dev/random

Beispielausgabe

ncomputer
quelle
Links kaputt, konnte kein Backup finden.
slm
0

Um 100 MB von Hardware generierter Zufallsdaten zu generieren, können Sie:

  • Nehmen Sie mit dem eingebauten Mikrofon Ihres Computers (verfügbar auf einem Laptop) 20 Minuten Audio (96 kHz, 16 Bit, Mono) auf. Sie erhalten eine ~ 220 MB WAV-Datei.

  • Verwerfen Sie die nicht nützlichen Bits und mischen Sie die Bits der Binärdaten (viele Möglichkeiten, dies zu tun) mit etwas Mathematik

  • Exportieren Sie die gemischten Bits als ~ 100 MB Binärdatei

Hier ist ein Artikel dazu: Ein Versuch, mit Audio (und dem eingebauten Mikrofon Ihres Computers) echte Entropie und zufällige Daten zu erzeugen .

Basj
quelle