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

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