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.
Beim Lesen wird das Gerät
/dev/random nur zufällige Bytes
innerhalb der geschätzten Zahl der Rausch-Bits im Entropie-Pool
zurückgeben.
/dev/random sollte für Anwendungen geeignet
sein, die einen hohen Grad von Zufälligkeit erfordern. Das sind
beispielsweise die einmalige Erzeugung von Schlüsseln oder
»Pads«. Wenn der Entropie-Pool leer ist, werden Lesezugriffe auf
/dev/random blockiert, bis weiteres Umgebungsrauschen gesammelt wurde.
Ein Lesevorgang vom Gerät
/dev/urandom blockiert das Warten auf
weitere Entropie nicht. Als Ergebnis sind bei unzureichender Entropie im
Entropie-Pool die zurückgegebenen Werte theoretisch anfällig
für einen Angriff auf die kryptographischen Algorithmen, die der
Treiber anwendet. In der verfügbaren (nicht geheimen) Literatur findet
sich kein Wissen über solche Angriffe, aber deren Existenz ist
theoretisch möglich. Wenn das für Ihre Anwendung problematisch
ist, verwenden Sie stattdessen
/dev/random.
Writing to
/dev/random or
/dev/urandom will update the entropy
pool with the data written, but this will not result in a higher entropy
count. This means that it will impact the contents read from both files, but
it will not make reads from
/dev/random faster.
Verwendung¶
Wenn Sie unsicher sind, ob Sie
/dev/random oder
/dev/urandom
verwenden sollten, dann ist wahrscheinlich letzteres das Richtige für
Sie. Als allgemeine Regel sollte
/dev/urandom für alles
außer langlebige GPG/SSL/SSH-Schlüssel verwendet werden.
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.
Der Kernel-Zufallszahlen-Generator wurde entwickelt, um eine kleine Menge von
qualitativ hochwertigem Seed (»Saatgut«) für die
Initialisierung eines kryptographischen Pseudo-Zufallszahlengenerators (CPRNG)
zu erzeugen. Er ist auf Sicherheit und nicht auf Geschwindigkeit ausgelegt.
Für die Erzeugung großer Mengen von Zufallsdaten ist er nicht
geeignet. Anwender sollten sehr sparsam bei der Entnahme von Seed aus
/dev/urandom (und
/dev/random) sein; der Verbrauch
unnötig großer Datenmengen von diesem Gerät wird eine
negative Auswirkung auf die Mitbenutzer des Geräts haben.
Die erforderliche Menge an Seed für die Erstellung eines kryptografischen
Schlüssels entspricht der effektiven Größe des
Schlüssels. Zum Beispiel hat eine 3072-Bit-RSA oder ein privater
Diffie-Hellman-Schlüssel eine effektive Schlüssellänge
von 128 Bit (es werden etwa 2^128 Operationen benötigt, um den
Schlüssel zu knacken brechen). Somit muss ein Schlüsselgenerator
nur 128 Bit (16 Byte) von Seed aus
/dev/random entnehmen.
Während ein Sicherheitszuschlag über dieses Minimum heraus
sinnvoll ist, um sich gegen Mängel im CPRNG-Algorithmus abzusichern,
kann keine heute verfügbare kryptographische Primitive mehr als 256 Bit
an Sicherheit. Wenn also ein Programm mehr als 256 Bit (32 Byte) pro Aufruf
oder angemessenem Regenerierungsintervall (mindestens eine Minute) aus dem
Entropiepool liest, sollte das als Zeichen genommen werden, dass seine
Kryptographie
ungeschickt implementiert 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 644 /dev/random c 1 8
mknod -m 644 /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 folgende 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 ] && bytes=`cat $poolfile` || bytes=512
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 sichern
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 ] && bytes=`cat $poolfile` || bytes=512
dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
/proc-Schnittstelle¶
Die Dateien im Verzeichnis
/proc/sys/kernel/random (verfügbar seit
2.3.16) stellen eine zusätzliche Schnittstelle zu
/dev/random
zur Verfügung.
Die nur lesbare Datei
entropy_avail gibt die verfügbare Entropie
an. Normalerweise ist das 4096 (Bits), ein voller Entropie-Pool.
Die Datei
poolsize gibt die Größe des Entropiepools 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:
- Diese Datei ist nur lesbar und enthält die Größe des
Entropie-Pools in Bits. Sie enthält den Wert 4096.
Die Datei
read_wakeup_threshold gibt die erforderliche Entropie (in Bits)
an, um »schlafend« auf Entropie aus
/dev/random wartende
Prozesse zu »wecken«. Der Standardwert ist 64. Die Datei
write_wakeup_threshold 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.
Die nur lesbaren Dateien, die
uuid und
boot_id 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¶
The following
ioctl(2) requests are defined on file descriptors connected
to either
/dev/random or
/dev/urandom. All requests performed
will interact with the input entropy pool impacting both
/dev/random
and
/dev/urandom. The
CAP_SYS_ADMIN capability is required for
all requests except
RNDGETENTCNT.
- RNDGETENTCNT
- Retrieve the entropy count of the input pool, the contents will be the
same as the entropy_avail file under proc. The result will be
stored in the int pointed to by the argument.
- RNDADDTOENTCNT
- Increment or decrement the entropy count of the input pool by the value
pointed to by the argument.
- RNDGETPOOL
- Entfernt in Linux 2.6.9
- RNDADDENTROPY
- Add some additional entropy to the input pool, incrementing the entropy
count. This differs from writing to /dev/random or
/dev/urandom, which only adds some data but does not increment the
entropy count. The following structure is used:
-
struct rand_pool_info {
int entropy_count;
int buf_size;
__u32 buf[0];
};
- Here entropy_count is the value added to (or subtracted from) the
entropy count, and buf is the buffer of size buf_size which
gets added to the entropy pool.
- RNDZAPENTCNT, RNDCLEARPOOL
- Zero the entropy count of all pools and add some system data (such as wall
clock) to the pools.
DATEIEN¶
/dev/random
/dev/urandom
SIEHE AUCH¶
mknod(1)
RFC 1750, »Randomness Recommendations for Security«
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.74 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
http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard
Schauer <Martin.E.Schauer@gmx.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 <debian-l10n-german@lists.debian.org>.