Provided by: manpages-fr_3.57d1p1-1_all 

NOM
random, urandom - Périphériques générateurs aléatoires du noyau
SYNOPSIS
#include <linux/random.h>
int ioctl(fd, RNDrequête, param);
DESCRIPTION
Les fichiers spéciaux en mode caractère /dev/random et /dev/urandom (existants depuis Linux 1.3.30)
fournissent une interface avec le générateur de nombres aléatoires du noyau. Le fichier /dev/random a un
numéro de périphérique majeur égal à 1, et un numéro mineur égal à 8. Les numéros du périphérique
/dev/urandom sont 1 pour le majeur, et 9 pour le mineur.
Le générateur de nombres aléatoires regroupe du bruit provenant de son environnement par l'intermédiaire
des pilotes de périphériques et d'autres sources, et le stocke dans un réservoir d'entropie. Le
générateur mémorise également une estimation du nombre de bits de bruit dans son réservoir d'entropie, et
utilise son contenu pour créer des nombres aléatoires.
Lors d'une lecture, le périphérique /dev/random sera limité au nombre de bits de bruit contenus dans le
réservoir d'entropie. /dev/random est particulièrement adapté pour les cas où l'on a ponctuellement
besoin de nombres hautement aléatoires (création de clés par exemple). Lorsque le réservoir d'entropie
est vide, les lectures depuis le périphérique /dev/random seront bloquantes jusqu'à l'obtention de
suffisamment de bruit en provenance de l'environnement.
Lors d'une lecture, /dev/urandom renverra autant d'octets qu'on en demande. Toutefois, s'il n'y a plus
assez de bits disponibles dans le réservoir d'entropie, les valeurs renvoyées pourraient être
théoriquement vulnérables à une cryptanalyse basée sur l'algorithme employé par le pilote. Il n'existe
pas de documentation sur ce type d'attaque dans la littérature publique actuelle, mais cela n'élimine pas
le risque théorique. Si ce risque est important pour votre application, utilisez plutôt /dev/random à la
place.
Écrire dans /dev/random ou /dev/urandom mettra à jour le réservoir d'entropie avec les données écrites,
mais n'augmentera pas le décompte d'entropie. Cela signifie que le contenu lu des deux fichiers sera
affecté, mais que ça ne rendra pas les lectures de /dev/random plus rapides.
Utilisation
Si vous ne savez pas très bien s'il vous faut utiliser /dev/random ou /dev/urandom, alors utilisez ce
dernier. En règle générale, /dev/urandom est à utiliser pour tout sauf les clés GPG/SSL/SSH à longue
durée de vie.
Si un réservoir d'entropie est sauvé d'un redémarrage à l'autre comme recommandé ci-dessous (toutes les
distributions majeures de Linux font cela depuis au plus tard l'an 2000), la sortie est
cryptographiquement sûre vis à vis d'attaquants sans accès local comme superutilisateur, à la condition
que ce fichier soit rechargé au démarrage et suffisant pour les clés de chiffrement de sessions réseau.
Comme la lecture depuis /dev/random peut être bloquante, les utilisateurs l'ouvrent généralement dans un
mode non bloquant (ou en effectuant la lecture avec un délai d'expiration) et fournissent un système de
notification lorsque l'entropie demandée n'est pas immédiatement disponible.
Le générateur de nombres aléatoires du noyau est conçu pour produire une faible quantité de données de
haute qualité destinées à initialiser un générateur de nombres pseudoaléatoires (« cryptographic
pseudo-random number generator » ou CPRNG). Il est conçu pour la sécurité et non la vitesse, et n'est pas
adapté à la génération de grandes quantités de données aléatoires. Les utilisateurs doivent être très
économes sur leur utilisation de /dev/urandom (et /dev/random) : des lectures inutiles de grandes
quantités de données auront un impact négatif sur les autres utilisateurs de ces sources.
La quantité de données d'initialisation nécessaire pour générer une clé de chiffrement est égale à la
taille utile de la clé. Par exemple, une clé privée RSA ou Diffie-Hellman de 3072 bits a une taille utile
de 128 bits (2^128 calculs sont nécessaires pour la casser) et a donc besoin de 128 bits (16 octets)
aléatoires issus de /dev/random.
Bien qu'une marge d'incertitude au-dessus de ce minimum soit acceptable, pour contourner les faiblesses
de l'algorithme du générateur de nombres pseudoaléatoires cryptographique, aucune primitive de
cryptographie ne peut espérer aujourd'hui garantir plus de 256 bits de sécurité. Aussi, si un programme
puise plus de 256 bits (32 octets) dans le réservoir d'entropie du noyau, par invocation ou après un
intervalle de réapprovisionnement raisonnable (au moins une minute), cela laisse supposer que la
cryptographie est maladroitement implémentée.
Configuration
Si votre système ne dispose pas des fichiers /dev/random et /dev/urandom vous pouvez les créer avec les
commandes suivantes :
mknod -m 644 /dev/random c 1 8
mknod -m 644 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom
Lorsqu'un système Linux démarre sans interaction avec un opérateur humain, le réservoir d'entropie peut
se trouver dans un état relativement prévisible. La véritable quantité de bruit dans le réservoir
d'entropie est donc en dessous de son estimation. Afin de contrer ce problème, il est utile de
sauvegarder l'état du réservoir d'entropie lors des arrêts et redémarrages du système. Il est possible
ainsi d'ajouter les lignes suivantes dans les scripts de démarrage appropriés :
echo "Initialisation du générateur de nombres aléatoires"
random_seed=/var/run/random-seed
# Initialise le générateur de nombres aléatoires avec une racine
# mémorisée lors du dernier arrêt (ou redémarrage) du système
# Charge puis sauvegarde 512 octets (taille du réservoir d'entropie).
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
Également, il faut ajouter les lignes suivantes dans un script exécuté lors de l'arrêt du système.
# Initialise le générateur de nombres aléatoires avec une racine
# mémorisée lors du dernier arrêt (ou redémarrage) du système
# Sauvegarde le réservoir d'entropie
echo "Sauvegarde la racine du générateur aléatoire…"
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
Interface /proc
Les fichiers du répertoire /proc/sys/kernel/random (présent depuis 2.3.16) fournissent une interface
supplémentaire au périphérique /dev/random.
Le fichier en lecture seule entropy_avail donne l'entropie disponible. Normalement, elle sera de 4096
(bits), une réserve d'entropie pleine.
Le fichier poolsize donne la taille de la réserve d'entropie. Sa signification dépend des versions du
noyau :
Linux 2.4 : Ce fichier donne la taille de la réserve d'entropie en octets. Normalement, elle sera
de 512 (octets), mais le fichier peut être écrit et peut être modifié à n'importe
quelle valeur pour laquelle un algorithme est disponible. Actuellement, les choix sont
32, 64, 128, 256, 512, 1024, 2048.
Linux 2.6 : Ce fichier est en lecture seule et donne la taille de la réserve d'entropie en bits.
Il contient la valeur 4096.
Le fichier read_wakeup_threshold contient le nombre de bits d'entropie nécessaires pour réveiller les
processus endormis qui attendaient l'entropie en provenance de /dev/random. La valeur par défaut est 64.
Le fichier write_wakeup_threshold contient le nombre de bits d'entropie en dessous duquel on réveillera
les processus ayant effectué un appel à select(2) ou poll(2) pour un accès en écriture à /dev/random. Ces
valeurs peuvent être modifiées en écrivant dans les fichiers.
Les fichiers en lecture seule uuid et boot_id contiennent des chaînes aléatoires comme
6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9. Le premier est généré à chaque lecture, le dernier est généré une
seule fois.
Interface ioctl(2)
Les requêtes ioctl(2) suivantes sont définies sur les descripteurs de fichier connectés à /dev/random ou
/dev/urandom. Toutes les requêtes réalisées interagiront avec l'entrée du réservoir d'entropie et auront
un effet sur /dev/random et /dev/urandom. La capacité CAP_SYS_ADMIN est nécessaire pour toutes les
requêtes sauf RNDGETENTCNT.
RNDGETENTCNT
Récupérer le décompte d'entropie du réservoir d'entrée, le contenu sera le même que celui du
fichier entropy_avail sous proc. Le résultat sera stocké dans l'entier pointé par l'argument.
RNDADDTOENTCNT
Augmenter ou diminuer le décompte d'entropie du réservoir d'entrée de la valeur pointée par
l'argument.
RNDGETPOOL
Supprimée dans Linux 2.6.9.
RNDADDENTROPY
Ajouter de l'entropie supplémentaires au réservoir d'entrée, en augmentant le décompte d'entropie.
C'est différent d'écrire dans /dev/random ou /dev/urandom, qui n'ajoute que des données mais sans
augmenter le décompte d'entropie. La structure suivante est utilisée :
struct rand_pool_info {
int entropy_count;
int buf_size;
__u32 buf[0];
};
Ici, entropy_count est la valeur ajoutée au (ou soustraite du) décompte d'entropie, et buf est le
tampon de taille buf_size qui est ajouté au réservoir d'entropie.
RNDZAPENTCNT, RNDCLEARPOOL
Vider les décomptes d'entropie de tous les réservoirs et ajouter des données système (comme le
temps réel) aux réservoirs.
FICHIERS
/dev/random
/dev/urandom
VOIR AUSSI
mknod(1)
RFC 1750, « Randomness Recommendations for Security »
COLOPHON
Cette page fait partie de la publication 3.57 du projet man-pages Linux. Une description du projet et des
instructions pour signaler des anomalies peuvent être trouvées à l'adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.
Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal
<http://manpagesfr.free.fr/> (2003-2006). Simon Paillard et l'équipe francophone de traduction de
Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
un rapport de bogue sur le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
<section> <page_de_man> ».
Linux 15 mars 2013 RANDOM(4)