Provided by: manpages-de_2.5-1_all 

BEZEICHNUNG
random, urandom - Kernel-Geräte zur Erzeugung von Zufallszahlen
ÜBERSICHT
#include <linux/random.h>
int ioctl(fd, RNDrequest, param);
BESCHREIBUNG
Die zeichenorientierten Gerätedateien /dev/random und /dev/urandom (seit Linux 1.3.30 vorhanden) sind
eine Schnittstelle zum kernelinternen Zufallszahlengenerator. Die Datei /dev/random hat die
Major-Gerätenummer 1 und die Minor-Gerätenummer 8. Die Datei /dev/urandom hat die Major-Gerätenummer 1
und die Minor-Gerätenummer 9.
Der Zufallszahlengenerator sammelt das Umgebungs-»Rauschen« von Gerätetreibern und anderen Quellen in
einem Entropie-Pool. Der Generator merkt sich seine Schätzung der Anzahl der Rausch-Bits im
Entropie-Pool. Aus diesem Entropie-Pool von Zufallszahlen werden erzeugt.
Linux 3.17 und neuer stellt die einfachere und sichere Schnittstelle getrandom(2) zur Verfügung, die
keine besonderen Dateien benötigt; siehe die Handbuchseite von getrandom(2) für Details.
Beim Lesen aus dem Gerät /dev/urandom werden mittels eines Pseudozufallszahlengenerators, dessen Seed aus
dem Entropie-Pool stammt, zufällige Bytes zurückgeliefert. Lesevorgänge aus diesem Gerät blockieren nicht
(d.h. die CPU kriecht nicht), können aber zu einer merkbaren Verzögerung führen, wenn große Mengen an
Daten angefordert werden.
Beim Lesen aus /dev/urandom während der frühen Systemstartphase könnten Daten zurückgeliefert werden, die
vor dem Zeitpunkt der Initialisierung des Entropie-Pools stammen. Falls dies für Ihre Anwendung ein
Problem sein könnte, verwenden Sie stattdessen getrandom(2) oder /dev/random.
Das Gerät /dev/random ist eine historische Schnittstelle, die zu einem Zeitpunkt entstand, als den
kryptographischen Primitiven, die in der Implementierung von /dev/urandom verwendet werden, nicht
durchgehend vertraut wurde. Sie liefert nur so viele zufällige Bits zurück, wie schätzungsweise an Bits
durch frisches Rauschen in den Entropie-Pool kommen und blockiert, falls notwendig. /dev/random ist für
Anwendungen geeignet, die Zufall hoher Güte benötigen und zwischenzeitliche Verzögerungen verkraften
können.
Wenn der Entropie-Pool leer ist, werden Lesezugriffe auf /dev/random blockiert, bis weiteres
Umgebungsrauschen gesammelt wurde. Wenn open(2) mit dem Schalter O_NONBLOCK für /dev/random aufgerufen
wird, werden folgende read(2) nicht blockieren, falls die angeforderte Anzahl an Bytes nicht verfügbar
ist. Stattdessen werden die verfügbaren Bytes zurückgeliefert. Falls kein Byte verfügbar ist, wird
read(2) -1 zurückliefern und errno auf EAGAIN gesetzt werden.
Der Schalter O_NONBLOCK hat beim Öffnen von /dev/urandom keinen Effekt. Beim Aufruf von read(2) für das
Gerät /dev/urandom werden Leseanforderungen von bis zu 256 bytes so viele Bytes wie angefordert
zurückliefern und werden nicht durch einen Signal-Handler unterbrochen. Leseanforderungen mit mehr als
dieser Anzahl könnten weniger als die angeforderte Anzahl an Bytes zurückliefern oder mit dem Fehler
EINTR fehlschlagen, falls sie durch einen Signal-Handler unterbrochen wurden.
Seit Linux 3.16 wird ein read(2) aus /dev/urandom höchstens 32 MB zurückliefern. Ein read(2) aus
/dev/random wird höchstens 512 Bytes zurückliefern (340 Bytes unter Linux-Kerneln vor Version 2.6.12).
Durch Schreiben nach /dev/random oder /dev/urandom wird der Entropie-Pool mit den geschriebenen Daten
aktualisiert, aber dies führt nicht zu einer höheren Entropie. Das bedeutet, dass dies die Inhalte der
von beiden Dateien gelesenen Dateien beeinflusst, aber die Lesevorgänge aus /dev/random nicht
beschleunigt.
Verwendung
Die Schnittstelle /dev/random wird als historische Schnittstelle betrachtet und /dev/urandom wird
bevorzugt und als ausreichend für alle Anwendungsfälle angesehen. Die einzige Ausnahme sind Anwendungen,
die Zufall während der frühen Systemstartphase benötigen. Für diese Anwendungen muss stattdessen
getrandom(2) verwandt werden, da es blockiert, bis der Entropie-Pool initialisiert ist.
Es wird empfohlen, eine Seed-Datei über Neustarts des Systems hinweg zu speichern. (Alle gängigen
Linux-Distributionen tun das seit spätestens dem Jahr 2000). Dann ist die Ausgabe des
Zufallszahlengenerators kryptografisch sicher gegen Angreifer ohne lokalen Root-Zugriff, sobald die
Seed-Datei während der Boot-Sequenz neu geladen wird, und völlig ausreichend für Sitzungs-Schlüssel bei
Netzwerk-Verschlüsselung. Da Lesezugriffe auf /dev/random blockieren können, werden die Nutzer in der
Regel sie im nicht blockierenden Modus öffnen (oder für den Lesezugriff eine Zeitschranke setzen) und
eine Art von Benachrichtigung des Benutzers realisieren wollen, wenn die gewünschte Entropie nicht sofort
verfügbar ist.
Konfiguration
Wenn auf Ihrem System /dev/random und /dev/urandom nicht schon vorhanden sind, können sie mit den
folgenden Befehlen erzeugt werden:
mknod -m 666 /dev/random c 1 8
mknod -m 666 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom
Wenn ein Linux-System wenig Benutzerinteraktion während des Systemstarts hat, kann der Entropie-Pool in
einem ziemlich vorhersehbaren Zustand sein. Dadurch verringert sich die tatsächliche Höhe des Rauschens
im Entropie-Pool unter die Schätzung. Um diesem Effekt entgegenzuwirken, kann man Informationen über den
Entropie-Pool über Stillstandszeiten und Systemstarts hinweg zu übernehmen. Dazu fügen Sie die Zeilen in
ein geeignetes Skript ein, das während das des Hochfahrens des Linux-Systems ausgeführt wird:
echo "Initialisierung des Zufallszahlengenerators …"
random_seed=/var/run/random-seed
# Seed über einen Neustart hinweg sichern
# den gesamten Entropie-Pool laden und dann sichern
if [ -f $random_seed ]; then
cat $random_seed >/dev/urandom
else
touch $random_seed
fi
chmod 600 $random_seed
poolfile=/proc/sys/kernel/random/poolsize
[ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096
bytes=$(expr $bits / 8)
dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
Fügen Sie ebenfalls in einem passenden Skript, das beim Herunterfahren des Linux-Systems ausgeführt wird,
die folgenden Zeilen ein:
# Seed über einen Neustart hinweg sichern
# den gesamten Entropie-Pool sichernl
echo "Seed wird gesichert …"
random_seed=/var/run/random-seed
touch $random_seed
chmod 600 $random_seed
poolfile=/proc/sys/kernel/random/poolsize
[ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096
bytes=$(expr $bits / 8)
dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
In dem obigen Beispiel nehmen wir Linux 2.6.0 oder neuer an, wobei /proc/sys/kernel/random/poolsize die
Größe des Entropie-Pools in Bits zurückliefert (siehe unten).
/proc-Schnittstellen
Die Dateien im Verzeichnis /proc/sys/kernel/random (verfügbar seit 2.3.16) stellen zusätzliche
Informationen über das Gerät /dev/random zur Verfügung.
entropy_avail
Die nur lesbare Datei gibt die verfügbare Entropie in Bits an. Dies ist eine Zahl im Bereich 0 bis
4096.
poolsize
Diese Datei gibt die Größe des Entropie-Pools an. Die Semantik dieser Datei variiert mit den
Kernel-Versionen:
Linux 2.4:
Diese Datei gibt die Größe des Entropie-Pools in Bytes an. Normalerweise wird diese Datei
den Wert 512 haben. In sie kann aber geschrieben werden und auf jeden Wert geändert werden,
für den ein Algorithmus verfügbar ist. Als möglichkeite Werte stehen 32, 64, 128, 256, 512,
1024 oder 2048 zur Verfügung.
Linux 2.6 und neuer:
Diese Datei ist nur lesbar und enthält die Größe des Entropie-Pools in Bits. Sie enthält
den Wert 4096.
read_wakeup_threshold
Diese Datei gibt die erforderliche Entropie (in Bits) an, um »schlafend« auf Entropie aus
/dev/random wartende Prozesse zu »wecken«. Der Standardwert ist 64.
write_wakeup_threshold
Diese Datei gibt die Entropie-Schwelle in Bits an, unterhalb derer Prozesse aufgeweckt werden, die
ein select(2) oder ein poll(2) für den schreibenden Zugriff auf /dev/random ausführen. Diese Werte
können geändert werden, indem in die Dateien geschrieben wird.
uuid und boot_id
Diese nur lesbaren Dateien enthalten zufällige Zeichenketten wie
6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9. Die erstere wird bei jedem Lesezugriff neu erzeugt, die
letztere nur einmal.
ioctl(2)-Schnittstelle
Die folgenden ioctl(2)-Anfragen sind in mit entweder /dev/random oder /dev/urandom verbundenen
Datei-Deskriptoren definiert. Alle ausgeführten Anfragen werden mit dem Eingabe-Entropie-Pool
wechselwirken und damit auf /dev/random und /dev/urandom auswirken. Die Capability CAP_SYS_ADMIN wird für
alle Anfragen außer RNDGETENTCNT benötigt.
RNDGETENTCNT
Ermittelt die Entropieanzahl des Eingabe-Pools, der Inhalt wird identisch zudem der Datei
entropy_avail unter Proc sein. Das Ergebnis wird in dem Int gespeichert, auf den das zweite
Argument zeigt.
RNDADDTOENTCNT
Erhöht oder erniedrigt die Entropianzahl in dem Eingabe-Pool um den Wert, auf den das Argument
zeigt.
RNDGETPOOL
Entfernt in Linux 2.6.9
RNDADDENTROPY
Fügt zusätzliche Entropie in den Eingabe-Pool hinzu, erhöht damit die Entropiezahl. Dies
unterscheidet sich vom Schreiben nach /dev/random oder /dev/urandom, bei dem nur Daten hinzugefügt
werden, aber nicht die Entropiezahl erhöht wird. Die folgende Struktur wird verwandt:
struct rand_pool_info {
int entropy_count;
int buf_size;
__u32 buf[0];
};
Hierbei ist entropy_count der Wert, der zu der Entropiezahl hinzugefügt (oder davon entfernt) wird
und buf der Puffer der Größe buf_size, der zum Entropie-Pool hinzugefügt wird.
RNDZAPENTCNT, RNDCLEARPOOL
Nullt die Entropiezahl aller Pools und fügt einige Sytemdaten (wie die Uhrzeit) zu den Pools
hinzu.
DATEIEN
/dev/random
/dev/urandom
ANMERKUNGEN
Für einen Überblick und Vergleich über die verschiedenen Schnittstellen, die zum Erhalten von
Zufälligkeit verwandt werden können, siehe random(7).
FEHLER
Während der frühen Systemstartphase können Lesezugriffe auf /dev/urandom Daten zurückliefern, die vor der
Initialisierung des Entropie-Pools erzeugt wurden.
SIEHE AUCH
mknod(1), getrandom(2), random(7)
RFC 1750, »Randomness Recommendations for Security«
KOLOPHON
Diese Seite ist Teil der Veröffentlichung 4.15 des Projekts Linux-man-pages. Eine Beschreibung des
Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden
sich unter https://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer
<Martin.E.Schauer@gmx.de>, Helge Kreutzmann <debian@helgefjell.de> und Dr. Tobias Quathamer
<toddy@debian.org> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer
bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an
<debian-l10n-german@lists.debian.org>.
Linux 15. September 2017 RANDOM(4)