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>.