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)