bionic (4) random.4.gz

Provided by: manpages-fr_3.65d1p1-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.65 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> ».