Provided by: manpages-de_4.19.0-7_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. Seit Linux 5.6 wird  der  Schalter  O_NONBLOCK
       ignoriert,   da   /dev/random   nicht   mehr  länger  blockieren  wird  (außer  im  frühen
       Systemstartprozess). Wenn open(2) in älteren Versionen 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 byte zurückliefern (340 byte vor Linux 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 Linux  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«

Ü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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 ⟨debian-l10n-german@lists.debian.org⟩.