NOM¶
random, urandom - Périphériques générateurs aléatoires
  du noyau
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.
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.
FICHIERS¶
/dev/random
 
/dev/urandom
VOIR AUSSI¶
mknod(1)
 
RFC 1750, « Randomness Recommendations for Security »
COLOPHON¶
Cette page fait partie de la publication 3.44 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> ».