random(7) Miscellaneous Information Manual random(7) NOM random – aperçu d’interfaces pour obtenir un caractère aléatoire DESCRIPTION Le générateur de nombres aléatoires du noyau repose sur l’entropie re- cueillie à partir de pilotes de périphérique et d’autres sources de bruit environnemental pour ensemencer un générateur de nombres pseudo-aléatoires (CSPRNG) sûr du point de vue cryptographie. Il est conçu pour la sécurité plutôt que pour la rapidité. Les interfaces suivantes fournissent un accès pour obtenir un résultat d’un générateur de nombres pseudo-aléatoires du noyau : • Les périphériques /dev/urandom et /dev/random, tous deux décrits dans random(4). Ces périphériques sont présents dans Linux depuis les premiers temps et sont aussi disponibles dans beaucoup d’autres systèmes. • L’appel système getrandom(2) spécifique à Linux, disponible depuis Linux 3.17. Cet appel système fournit un accès soit à la même source que /dev/urandom (appelée la source urandom dans cette page) ou à la même source que /dev/random (appelée la source random dans cette page). Celle par défaut est la source urandom. La source random est sélectionnée avec l’indicateur GRND_RANDOM dans l’appel système. La fonction getentropy(3) avec getrandom(2) fournit une interface légè- rement plus portable. Initialisation de la réserve d’entropie Le noyau collecte les bits d’entropie à partir de l’environnement. Lorsque un nombre suffisant de bits a été collecté, la réserve d’entro- pie est considérée comme initialisée. Choix de la source random À moins de vouloir générer une clef pérenne (et très vraisemblablement même pas dans ce cas), la lecture ne sera probablement pas faite à par- tir du périphérique /dev/random ou en employant getrandom(2) avec l’in- dicateur GRND_RANDOM. À la place, la lecture sera faite soit à partir du périphérique /dev/urandom ou en utilisant getrandom(2) sans l’indi- cateur GRND_RANDOM. Les cryptosystèmes pour la source urandom sont plu- tôt conservatifs et par conséquent devraient être suffisants pour toutes les utilisations. L’inconvénient de GRND_RANDOM et des lectures à partir de /dev/random est que l’opération peut bloquer pendant une période indéfinie. De plus, gérer des requêtes partiellement remplies pouvant se produire lors de l’utilisation de GRND_RANDOM ou de la lecture à partir de /dev/random augmente la complexité du code. Monte-Carlo et autres applications d’échantillonnage probabiliste L’utilisation de ces interfaces pour fournir de grandes quantités de données pour les simulations de Monte-Carlo et d’autres programmes ou algorithmes réalisant un échantillonnage probabiliste, sera peu rapide. De plus, c’est inutile parce que de telles applications n’ont pas be- soin de nombres aléatoires sûrs du point de vue chiffrement. À la place, les interfaces décrites dans cette page sont à utiliser pour ob- tenir une petite quantité de données pour ensemencer un générateur de nombres pseudo-aléatoires pour ce type d’applications. Comparaison entre getrandom, /dev/urandom et /dev/random Le tableau suivant résume le comportement des diverses interfaces qui peuvent être utilisées pour obtenir un caractère aléatoire. GRND_NON- BLOCK est un indicateur qui peut être utilisé pour contrôler le compor- tement bloquant de getrandom(2). La dernière colonne du tableau tient compte du cas pouvant se produire au tout début du démarrage quand la réserve d’entropie n’est pas encore initialisée. ┌──────────────┬──────────────┬────────────────┬────────────────────┐ │Interface │ Réserve │ Comportement │ Comportement si │ │ │ │ de blocage │ réserve pas encore │ │ │ │ │ prête │ ├──────────────┼──────────────┼────────────────┼────────────────────┤ │/dev/random │ Réserve blo- │ Si entropie │ Blocage jusqu’à │ │ │ quante │ trop faible, │ suffisamment d’en- │ │ │ │ blocage │ tropie accumulée │ │ │ │ jusqu’à assez │ │ │ │ │ d’entropie │ │ ├──────────────┼──────────────┼────────────────┼────────────────────┤ │/dev/urandom │ Sortie CS- │ Aucun blocage │ CSPRNG non initia- │ │ │ PRNG │ │ lisé (entropie │ │ │ │ │ faible et inadap- │ │ │ │ │ tée au chiffrement │ │ │ │ │ ?) │ ├──────────────┼──────────────┼────────────────┼────────────────────┤ │getrandom() │ Identique à │ Aucun blocage │ Blocage jusqu’à │ │ │ /dev/urandom │ si réserve │ réserve prête │ │ │ │ prête │ │ ├──────────────┼──────────────┼────────────────┼────────────────────┤ │getrandom() │ Identique à │ Si entropie │ Blocage jusqu’à │ │GRND_RANDOM │ /dev/random │ trop faible, │ réserve prête │ │ │ │ blocage │ │ │ │ │ jusqu’à assez │ │ │ │ │ d’entropie │ │ ├──────────────┼──────────────┼────────────────┼────────────────────┤ │getrandom() │ Identique à │ Aucun blocage │ EAGAIN │ │GRND_NONBLOCK │ /dev/urandom │ si réserve │ │ │ │ │ prête │ │ ├──────────────┼──────────────┼────────────────┼────────────────────┤ │getrandom() │ Identique à │ EAGAIN si │ EAGAIN │ │GRND_RANDOM + │ /dev/random │ manque d’en- │ │ │GRND_NONBLOCK │ │ tropie dispo- │ │ │ │ │ nible │ │ └──────────────┴──────────────┴────────────────┴────────────────────┘ Génération des clés de chiffrement The amount of seed material required to generate a cryptographic key equals the effective key size of the key. For example, a 3072-bit RSA or Diffie-Hellman private key has an effective key size of 128 bits (it requires about 2^128 operations to break) so a key generator needs only 128 bits (16 bytes) of seed material from /dev/random. Bien qu’une marge de sécurité au-dessus de ce minimum soit raisonnable comme protection contre des défauts d’algorithme de CSPRNG, aucune pri- mitive cryptographique disponible actuellement ne peut espérer pro- mettre plus de 256 bits de sécurité, aussi, si un programme lit plus de 256 bits (32 octets) de la réserve de caractère aléatoire du noyau par invocation, ou par intervalle raisonnable de réensemencement (pas moins d’une minute), cela doit être pris comme un signe que son chiffrement n’a pas été implémenté savamment. VOIR AUSSI getrandom(2), getauxval(3), getentropy(3), random(4), urandom(4), si- gnal(7) TRADUCTION La traduction française de cette page de manuel a été créée par Chris- tophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <ste- phan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, Fran- çois Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Gué- rard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.cou- lon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centra- liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <si- mon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@de- bian.org>, David Prévot <david@tilapin.org> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr> Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à ⟨debian-l10n-french@lists.debian.org⟩. Pages du manuel de Linux 6.03 10 février 2023 random(7)
Generated by dwww version 1.15 on Sat Jun 29 01:39:59 CEST 2024.