Provided by: manpages-de_2.5-1_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. (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)