Provided by: manpages-de_4.13-4_all bug

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. 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 /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 Systemdaten (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  Erlangen  von  Zufall
       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  5.10  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>,    Dr.    Tobias    Quathamer    <toddy@debian.org>   und   Helge   Kreutzmann
       <debian@helgefjell.de> 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 die
       Mailingliste der Übersetzer.

Linux                                          15. September 2017                                      RANDOM(4)