.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1997 John S. Kallal (kallal@voicenet.com) .\" .\" %%%LICENSE_START(GPLv2+_DOC_ONEPARA) .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" %%%LICENSE_END .\" .\" Some changes by tytso and aeb. .\" .\" 2004-12-16, John V. Belmonte/mtk, Updated init and quit scripts .\" 2004-04-08, AEB, Improved description of read from /dev/urandom .\" 2008-06-20, George Spelvin , .\" Matt Mackall .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH RANDOM 4 "15. September 2017" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG random, urandom \- Kernel\-Geräte zur Erzeugung von Zufallszahlen .SH ÜBERSICHT #include .PP \fBint ioctl(\fP\fIfd\fP\fB, RND\fP\fIrequest\fP\fB, \fP\fIparam\fP\fB);\fP .SH BESCHREIBUNG Die zeichenorientierten Gerätedateien \fI/dev/random\fP und \fI/dev/urandom\fP (seit Linux 1.3.30 vorhanden) sind eine Schnittstelle zum kernelinternen Zufallszahlengenerator. Die Datei \fI/dev/random\fP hat die Major\-Gerätenummer 1 und die Minor\-Gerätenummer 8. Die Datei \fI/dev/urandom\fP hat die Major\-Gerätenummer 1 und die Minor\-Gerätenummer 9. .PP 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. .PP Linux 3.17 und neuer stellt die einfachere und sichere Schnittstelle \fBgetrandom\fP(2) zur Verfügung, die keine besonderen Dateien benötigt; siehe die Handbuchseite von \fBgetrandom\fP(2) für Details. .PP Beim Lesen aus dem Gerät \fI/dev/urandom\fP 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. .PP .\" This is a real problem; see .\" commit 9b4d008787f864f17d008c9c15bbe8a0f7e2fc24 Beim Lesen aus \fI/dev/urandom\fP 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 \fBgetrandom\fP(2) oder \fI/dev/random\fP. .PP Das Gerät \fI/dev/random\fP ist eine historische Schnittstelle, die zu einem Zeitpunkt entstand, als den kryptographischen Primitiven, die in der Implementierung von \fI/dev/urandom\fP 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. \fI/dev/random\fP ist für Anwendungen geeignet, die Zufall hoher Güte benötigen und zwischenzeitliche Verzögerungen verkraften können. .PP Wenn der Entropie\-Pool leer ist, werden Lesezugriffe auf \fI/dev/random\fP blockiert, bis weiteres Umgebungsrauschen gesammelt wurde. Wenn \fBopen\fP(2) mit dem Schalter \fBO_NONBLOCK\fP für \fI/dev/random\fP aufgerufen wird, werden folgende \fBread\fP(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 \fBread\fP(2) \-1 zurückliefern und \fIerrno\fP auf \fBEAGAIN\fP gesetzt werden. .PP Der Schalter \fBO_NONBLOCK\fP hat beim Öffnen von \fI/dev/urandom\fP keinen Effekt. Beim Aufruf von \fBread\fP(2) für das Gerät \fI/dev/urandom\fP 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 \fBEINTR\fP fehlschlagen, falls sie durch einen Signal\-Handler unterbrochen wurden. .PP .\" commit 79a8468747c5f95ed3d5ce8376a3e82e0c5857fc .\" SEC_XFER_SIZE in drivers/char/random.c Seit Linux 3.16 wird ein \fBread\fP(2) aus \fI/dev/urandom\fP höchstens 32\ MB zurückliefern. Ein \fBread\fP(2) aus \fI/dev/random\fP wird höchstens 512 Bytes zurückliefern (340 Bytes unter Linux\-Kerneln vor Version 2.6.12). .PP Durch Schreiben nach \fI/dev/random\fP oder \fI/dev/urandom\fP 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 \fI/dev/random\fP nicht beschleunigt. .SS Verwendung Die Schnittstelle \fI/dev/random\fP wird als historische Schnittstelle betrachtet und \fI/dev/urandom\fP 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 \fBgetrandom\fP(2) verwandt werden, da es blockiert, bis der Entropie\-Pool initialisiert ist. .PP .\" Es wird empfohlen, eine Seed\-Datei über Neustarts des Systems hinweg zu speichern. 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. (Alle gängigen Linux\-Distributionen haben spätestens seit dem Jahr 2000 die Seed\-Datei über Neustarts hinweg gespeichert). Da Lesezugriffe auf \fI/dev/random\fP 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. .SS Konfiguration Wenn auf Ihrem System \fI/dev/random\fP und \fI/dev/urandom\fP nicht schon vorhanden sind, können sie mit den folgenden Befehlen erzeugt werden: .PP .in +4n .EX mknod \-m 666 /dev/random c 1 8 mknod \-m 666 /dev/urandom c 1 9 chown root:root /dev/random /dev/urandom .EE .in .PP 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: .PP .in +4n .EX 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 .EE .in .PP Fügen Sie ebenfalls in einem passenden Skript, das beim Herunterfahren des Linux\-Systems ausgeführt wird, die folgenden Zeilen ein: .PP .in +4n .EX # 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 .EE .in .PP .\" In dem obigen Beispiel nehmen wir Linux 2.6.0 oder neuer an, wobei \fI/proc/sys/kernel/random/poolsize\fP die Größe des Entropie\-Pools in Bits zurückliefert (siehe unten). .SS /proc\-Schnittstellen Die Dateien im Verzeichnis \fI/proc/sys/kernel/random\fP (verfügbar seit 2.3.16) stellen zusätzliche Informationen über das Gerät \fI/dev/random\fP zur Verfügung. .TP \fIentropy_avail\fP Die nur lesbare Datei gibt die verfügbare Entropie in Bits an. Dies ist eine Zahl im Bereich 0 bis 4096. .TP \fIpoolsize\fP Diese Datei gibt die Größe des Entropie\-Pools an. Die Semantik dieser Datei variiert mit den Kernel\-Versionen: .RS .TP Linux 2.4: Diese Datei gibt die Größe des Entropie\-Pools in \fIBytes\fP 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. .TP Linux 2.6 und neuer: Diese Datei ist nur lesbar und enthält die Größe des Entropie\-Pools in \fIBits\fP. Sie enthält den Wert 4096. .RE .TP \fIread_wakeup_threshold\fP Diese Datei gibt die erforderliche Entropie (in Bits) an, um »schlafend« auf Entropie aus \fI/dev/random\fP wartende Prozesse zu »wecken«. Der Standardwert ist 64. .TP \fIwrite_wakeup_threshold\fP Diese Datei gibt die Entropie\-Schwelle in Bits an, unterhalb derer Prozesse aufgeweckt werden, die ein \fBselect\fP(2) oder ein \fBpoll\fP(2) für den schreibenden Zugriff auf \fI/dev/random\fP ausführen. Diese Werte können geändert werden, indem in die Dateien geschrieben wird. .TP \fIuuid\fP und \fIboot_id\fP .\" 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. .SS ioctl(2)\-Schnittstelle Die folgenden \fBioctl\fP(2)\-Anfragen sind in mit entweder \fI/dev/random\fP oder \fI/dev/urandom\fP verbundenen Datei\-Deskriptoren definiert. Alle ausgeführten Anfragen werden mit dem Eingabe\-Entropie\-Pool wechselwirken und damit auf \fI/dev/random\fP und \fI/dev/urandom\fP auswirken. Die Capability \fBCAP_SYS_ADMIN\fP wird für alle Anfragen außer \fBRNDGETENTCNT\fP benötigt. .TP \fBRNDGETENTCNT\fP Ermittelt die Entropieanzahl des Eingabe\-Pools, der Inhalt wird identisch zudem der Datei \fIentropy_avail\fP unter Proc sein. Das Ergebnis wird in dem Int gespeichert, auf den das zweite Argument zeigt. .TP \fBRNDADDTOENTCNT\fP Erhöht oder erniedrigt die Entropianzahl in dem Eingabe\-Pool um den Wert, auf den das Argument zeigt. .TP \fBRNDGETPOOL\fP Entfernt in Linux 2.6.9 .TP \fBRNDADDENTROPY\fP Fügt zusätzliche Entropie in den Eingabe\-Pool hinzu, erhöht damit die Entropiezahl. Dies unterscheidet sich vom Schreiben nach \fI/dev/random\fP oder \fI/dev/urandom\fP, bei dem nur Daten hinzugefügt werden, aber nicht die Entropiezahl erhöht wird. Die folgende Struktur wird verwandt: .IP .in +4n .EX struct rand_pool_info { int entropy_count; int buf_size; __u32 buf[0]; }; .EE .in .IP Hierbei ist \fIentropy_count\fP der Wert, der zu der Entropiezahl hinzugefügt (oder davon entfernt) wird und \fIbuf\fP der Puffer der Größe \fIbuf_size\fP, der zum Entropie\-Pool hinzugefügt wird. .TP \fBRNDZAPENTCNT\fP, \fBRNDCLEARPOOL\fP Nullt die Entropiezahl aller Pools und fügt einige Systemdaten (wie die Uhrzeit) zu den Pools hinzu. .SH DATEIEN \fI/dev/random\fP .br \fI/dev/urandom\fP .SH ANMERKUNGEN Für einen Überblick und Vergleich über die verschiedenen Schnittstellen, die zum Erlangen von Zufall verwandt werden können, siehe \fBrandom\fP(7). .SH FEHLER .\" .SH AUTHOR .\" The kernel's random number generator was written by .\" Theodore Ts'o (tytso@athena.mit.edu). Während der frühen Systemstartphase können Lesezugriffe auf \fI/dev/urandom\fP Daten zurückliefern, die vor der Initialisierung des Entropie\-Pools erzeugt wurden. .SH "SIEHE AUCH" \fBmknod\fP(1), \fBgetrandom\fP(2), \fBrandom\fP(7) .PP RFC\ 1750, »Randomness Recommendations for Security« .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 5.10 des Projekts Linux\-\fIman\-pages\fP. 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/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer , Dr. Tobias Quathamer und Helge Kreutzmann erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE 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 die .MT debian-l10n-german@\:lists.\:debian.\:org Mailingliste der Übersetzer .ME .