random(7) Miscellaneous Information Manual random(7)
NOM
random - apercu d'interfaces pour obtenir un caractere aleatoire
DESCRIPTION
Le generateur de nombres aleatoires du noyau repose sur l'entropie
recueillie a partir de pilotes de peripherique et d'autres sources de
bruit environnemental pour ensemencer un generateur de nombres
pseudo-aleatoires (CSPRNG) sur du point de vue cryptographie. Il est
concu pour la securite plutot que pour la rapidite.
Les interfaces suivantes fournissent un acces pour obtenir un resultat
d'un generateur de nombres pseudo-aleatoires du noyau :
- Les peripheriques /dev/urandom et /dev/random, tous deux decrits
dans random(4). Ces peripheriques sont presents dans Linux depuis
les premiers temps et sont aussi disponibles dans beaucoup d'autres
systemes.
- L'appel systeme getrandom(2) specifique a Linux, disponible depuis
Linux 3.17. Cet appel systeme fournit un acces soit a la meme source
que /dev/urandom (appelee la source urandom dans cette page) ou a la
meme source que /dev/random (appelee la source random dans cette
page). Celle par defaut est la source urandom. La source random est
selectionnee avec l'indicateur GRND_RANDOM dans l'appel systeme. La
fonction getentropy(3) avec getrandom(2) fournit une interface
legerement plus portable.
Initialisation de la reserve d'entropie
Le noyau collecte les bits d'entropie a partir de l'environnement.
Lorsque un nombre suffisant de bits a ete collecte, la reserve
d'entropie est consideree comme initialisee.
Choix de la source random
A moins de vouloir generer une clef perenne (et tres vraisemblablement
meme pas dans ce cas), la lecture ne sera probablement pas faite a
partir du peripherique /dev/random ou en employant getrandom(2) avec
l'indicateur GRND_RANDOM. A la place, la lecture sera faite soit a
partir du peripherique /dev/urandom ou en utilisant getrandom(2) sans
l'indicateur GRND_RANDOM. Les cryptosystemes pour la source urandom
sont plutot conservatifs et par consequent devraient etre suffisants
pour toutes les utilisations.
L'inconvenient de GRND_RANDOM et des lectures a partir de /dev/random
est que l'operation peut bloquer pendant une periode indefinie. De
plus, gerer des requetes partiellement remplies pouvant se produire
lors de l'utilisation de GRND_RANDOM ou de la lecture a partir de
/dev/random augmente la complexite du code.
Monte-Carlo et autres applications d'echantillonnage probabiliste
L'utilisation de ces interfaces pour fournir de grandes quantites de
donnees pour les simulations de Monte-Carlo et d'autres programmes ou
algorithmes realisant un echantillonnage probabiliste, sera peu rapide.
De plus, c'est inutile parce que de telles applications n'ont pas
besoin de nombres aleatoires surs du point de vue chiffrement. A la
place, les interfaces decrites dans cette page sont a utiliser pour
obtenir une petite quantite de donnees pour ensemencer un generateur de
nombres pseudo-aleatoires pour ce type d'applications.
Comparaison entre getrandom, /dev/urandom et /dev/random
Le tableau suivant resume le comportement des diverses interfaces qui
peuvent etre utilisees pour obtenir un caractere aleatoire.
GRND_NONBLOCK est un indicateur qui peut etre utilise pour controler le
comportement bloquant de getrandom(2). La derniere colonne du tableau
tient compte du cas pouvant se produire au tout debut du demarrage
quand la reserve d'entropie n'est pas encore initialisee.
+--------------+---------------+------------------+--------------------+
|Interface | Reserve | Comportement de | Comportement si |
| | | blocage | reserve pas encore |
| | | | prete |
+--------------+---------------+------------------+--------------------+
|/dev/random | Reserve | Si entropie trop | Blocage jusqu'a |
| | bloquante | faible, blocage | suffisamment |
| | | jusqu'a assez | d'entropie |
| | | d'entropie | accumulee |
+--------------+---------------+------------------+--------------------+
|/dev/urandom | Sortie CSPRNG | Aucun blocage | CSPRNG non |
| | | | initialise |
| | | | (entropie faible |
| | | | et inadaptee au |
| | | | chiffrement ?) |
+--------------+---------------+------------------+--------------------+
|getrandom() | Identique a | Aucun blocage si | Blocage jusqu'a |
| | /dev/urandom | reserve prete | reserve prete |
+--------------+---------------+------------------+--------------------+
|getrandom() | Identique a | Si entropie trop | Blocage jusqu'a |
|GRND_RANDOM | /dev/random | faible, blocage | reserve prete |
| | | jusqu'a assez | |
| | | d'entropie | |
+--------------+---------------+------------------+--------------------+
|getrandom() | Identique a | Aucun blocage si | EAGAIN |
|GRND_NONBLOCK | /dev/urandom | reserve prete | |
+--------------+---------------+------------------+--------------------+
|getrandom() | Identique a | EAGAIN si manque | EAGAIN |
|GRND_RANDOM + | /dev/random | d'entropie | |
|GRND_NONBLOCK | | disponible | |
+--------------+---------------+------------------+--------------------+
Generation des cles de chiffrement
Le montant de materiel d'ensemencement necessite de generer une cle de
chiffrement egale a la taille effective de la cle. Par exemple, une cle
privee ou Diffie-Hellman de 3072 bits a une taille effective de
128 bits (2^128 operations sont necessaires pour la casser), aussi un
generateur de cle a besoin de seulement 128 bits (16 octets) de
materiel d'ensemencement a partir de /dev/random.
Bien qu'une marge de securite au-dessus de ce minimum soit raisonnable
comme protection contre des defauts d'algorithme de CSPRNG, aucune
primitive cryptographique disponible actuellement ne peut esperer
promettre plus de 256 bits de securite, aussi, si un programme lit plus
de 256 bits (32 octets) de la reserve de caractere aleatoire du noyau
par invocation, ou par intervalle raisonnable de reensemencement (pas
moins d'une minute), cela doit etre pris comme un signe que son
chiffrement n'a pas ete implemente savamment.
VOIR AUSSI
getrandom(2), getauxval(3), getentropy(3), random(4), urandom(4),
signal(7)
TRADUCTION
La traduction francaise de cette page de manuel a ete creee par
Christophe Blaess , Stephan Rafin
, Thierry Vignaud ,
Francois Micaux, Alain Portal , Jean-Philippe
Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas
Huriaux , Nicolas Francois
, Florentin Duneau
, Simon Paillard , Denis Barbier , David Prevot
et Jean-Paul Guillonneau
Cette traduction est une documentation libre ; veuillez vous reporter a
la GNU General Public License version 3
concernant les conditions
de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE.
Si vous decouvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message a .
Pages du manuel de Linux 6.06 31 octobre 2023 random(7)