/dev/random
/dev/random
ist unter vielen unixoiden Betriebssystemen eine zeichenorientierte virtuelle Gerätedatei, über das Programme auf einen systemweiten Zufallszahlengenerator von hoher Qualität zugreifen können. Da für netzwerkorientierte Systeme wie Unix Kryptographie-Dienste und damit Zufallszahlen eine bedeutende Rolle spielen, kommt dieser Datei und dem dahinterstehenden Treiber eine wichtige Bedeutung zu.
Der Zufallsgenerator sammelt Umgebungsrauschen von Gerätetreibern und anderen Quellen in einem Entropie-„Pool“. Der Generator speichert auch eine Abschätzung über die Anzahl der Bits im Entropie-Pool. Aus diesem „Pool“ werden die Zufallszahlen generiert. Beim Lesen gibt /dev/random
nur solange Zufallszahlen zurück, bis die abgeschätzte Entropiemenge erschöpft ist; dann blockieren Lesezugriffe auf /dev/random
, bis zusätzliches Umgebungsrauschen erhalten wurde.[1][2] /dev/random
sollte ausreichend sein für Anwendungszwecke, die auf eine sehr hohe Qualität der Zufälligkeit angewiesen sind, wie etwa Verschlüsselung (beispielsweise One-Time-Pads oder Schlüsselerzeugung). Aus Geschwindigkeitsgründen wird in der Praxis oft nur der „Seed“ eines Pseudo-Zufallszahlengenerators von /dev/random
gelesen (z. B. in OpenSSL, PGP und GnuPG).
Der aktuelle Füllstand des Entropie-Pools lässt sich unter Linux aus der Datei /proc/sys/kernel/random/entropy_avail
ermitteln. Eine Ausgabe der Datei liefert die verfügbare Entropie in Bit, wobei das Maximum von 4096 Bit einem vollständig gefüllten „Pool“ entspricht.
/dev/urandom
Aus /dev/urandom
(von engl. unlimited random(ness)) können wie aus /dev/random
Zufallszahlen gelesen werden. /dev/urandom
blockiert jedoch nicht, wenn eine definierte Entropieschwelle unterschritten wird. In diesem Fall kann nicht ganz ausgeschlossen werden, dass es einem Angreifer gelingt, die erzeugten Pseudozufallszahlen im Nachhinein zu berechnen.[3]
Standardisierung
/dev/random
(wie auch /dev/urandom
) ist weder im Filesystem Hierarchy Standard 2.3 noch in der Single UNIX Specification 3.0 spezifiziert. Der Linux-Kernel stellte 1994 als erstes Betriebssystem ein /dev/random
-Gerät bereit, woraufhin andere unixoide Betriebssysteme nachzogen,[4][5] so zum Beispiel FreeBSD 2.2 ab Juni 2000[6] oder Solaris 9 ab 2002.[7]
Implementierungen
In FreeBSD findet ein auf dem Yarrow-Algorithmus basierender Generator Verwendung[8]. AIX verwendet seit AIX 5.2 ebenfalls eine Yarrow-Implementation.[9]
In Linux verhält sich /dev/random
seit 2020 wie /dev/urandom
, da dessen Zufallszahlen mittlerweile als praktikabel selbst für kryptographische Zwecke angesehen werden.[10]
Verbesserung der Entropie
Über Software, wie z. B. timer_entropyd
, haveged
, randomsound
, lässt sich die Entropie verbessern sowie der Entropie-Pool vergrößern, damit mehr Zufallszahlen zur Verfügung stehen. Mit der GNU-Software rng-tools
lassen sich unter Linux und ähnlichen Betriebssystemen physikalische Zufallszahlengeneratoren einbinden.[11]
Siehe auch
Literatur
- Dokumentation und Analyse des Linux-Pseudozufallszahlengenerators Eine Studie im Auftrag des Bundesamtes für Sicherheit in der Informationstechnik (BSI); Dezember 2013
Einzelnachweise
- ↑ Linux manpage random(4)
- ↑ Solaris 10 manpage random(7d) (Memento vom 16. Februar 2009 im Internet Archive)
- ↑ http://linux.die.net/man/4/urandom
- ↑ /dev/random – Everything2.com. Abgerufen am 11. September 2021.
- ↑ Jack Lloyd: On Syllable's /dev/random. 9. Dezember 2008, abgerufen am 11. September 2021 (englisch).
- ↑ http://svn.freebsd.org/viewvc/base/head/sys/dev/random/randomdev.c?view=log
- ↑ Archivlink (Memento vom 31. Juli 2009 im Internet Archive)
- ↑ random(4) BSD Kernel Interfaces Manual. Abgerufen am 21. April 2013 (englisch).
- ↑ AIX 5.2 /dev/random and /dev/urandom devices. Abgerufen am 21. April 2013 (englisch).
- ↑ Jake Edge: Removing the Linux /dev/random blocking pool. In: LWN.net. 7. Januar 2020, abgerufen am 26. Juni 2021 (englisch).
- ↑ Archivlink (Memento vom 21. September 2013 im Internet Archive)