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