Man page - urandom(4)

Packages contains this manual

Available languages:

en fr es it pl ja ru ro de

Manual

random

NOM
SYNOPSIS
DESCRIPTION
Utilisation
Configuration
/proc interfaces
Interface ioctl(2)
FICHIERS
NOTES
BOGUES
VOIR AUSSI
TRADUCTION

NOM

random, urandom — PĂ©riphĂ©riques gĂ©nĂ©rateurs de nombres alĂ©atoires du noyau

SYNOPSIS

#include <linux/random.h>

int ioctl( fd , RND requĂȘ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 pour 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. Le fichier /dev/urandom a un numéro de périphérique majeur égal à 1 et à 9 pour le périphérique 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.

Les noyaux Linux 3.17 et postérieurs fournissent une interface getrandom (2) plus sûre et plus simple qui ne requiert aucun fichier spécial. Consulter le manuel de getrandom (2) pour plus de détails.

Lors de sa lecture, le pĂ©riphĂ©rique /dev/urandom renvoie des octets alĂ©atoires en utilisant un gĂ©nĂ©rateur de nombres pseudoalĂ©atoires nourri Ă  partir du rĂ©servoir d’entropie. Les lectures Ă  partir de ce pĂ©riphĂ©rique ne sont pas bloquantes (c’est-Ă -dire qu’un « yield » n’est pas imposĂ© au CPU), mais peuvent entrainer un dĂ©lai notable lors de requĂȘtes d’un grand montant de donnĂ©es.

Lors d’une lecture au tout dĂ©but du dĂ©marrage (boot), /dev/urandom peut renvoyer des donnĂ©es avant que le rĂ©servoir d’entropie n’ait Ă©tĂ© initialisĂ©. Si cela Ă  de l’importance dans votre application, utilisez plutĂŽt getrandom (2) ou /dev/random .

Le pĂ©riphĂ©rique /dev/random est une interface patrimoniale qui remonte aux temps oĂč les primitives de chiffrement utilisĂ©es dans les implĂ©mentations de /dev/urandom n’étaient pas d’une grande fiabilitĂ©. Il renvoyait des octets alĂ©atoires seulement pour un nombre estimĂ© de bits de bruit rĂ©cent dans le rĂ©servoir d’entropie, en bloquant si nĂ©cessaire. /dev/random est adaptĂ© pour les applications qui nĂ©cessitent une haute qualitĂ© d’imprĂ©visibilitĂ© et qui peuvent supporter des dĂ©lais indĂ©terminĂ©s.

Si le rĂ©servoir d’entropie est vide, les lectures dans /dev/random bloqueront jusqu’à ce que du bruit environnemental supplĂ©mentaire soit accumulĂ©. Depuis Linux 5.6, le drapeau O_NONBLOCK est ignorĂ© car /dev/random ne bloquera pas sauf pendant le tout dĂ©but du dĂ©marrage. Dans les versions prĂ©cĂ©dentes, si open (2) est appelĂ© pour /dev/random avec le drapeau O_NONBLOCK , un appel ultĂ©rieur Ă  read (2) ne bloquera pas si le nombre requis d’octets n’est pas disponible. À la place, les octets disponibles sont renvoyĂ©s. Si aucun octet n’est disponible, read (2) renverra -1 et errno sera dĂ©fini Ă  EAGAIN .

Le drapeau O_NONBLOCK n’a aucun effet lors de l’ouverture de /dev/urandom . Lors de l’appel read (2) pour le pĂ©riphĂ©rique /dev/urandom , des lectures jusqu’à 256 octets renverront autant d’octets que nĂ©cessaires et ne seront pas interrompues par un gestionnaire de signal. Les lectures avec un tampon dĂ©passant cette limite peuvent renvoyer un nombre d’octets insuffisant ou Ă©chouer avec l’erreur EINTR si elles sont interrompues par un gestionnaire de signal.

Depuis Linux 3.16, un appel read (2) pour /dev/urandom renverra au plus 32 Mo. Un appel read (2) pour /dev/random renverra au plus 512 octets (340 octets avant Linux 2.6.12).

É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 cela ne rendra pas les lectures de /dev/random plus rapides.

Utilisation

Le pĂ©riphĂ©rique /dev/random est une interface patrimoniale et /dev/urandom est prĂ©fĂ©rĂ© et suffisant dans tous les cas d’utilisation Ă  l’exception des applications qui requiĂšrent des donnĂ©es alĂ©atoires au tout dĂ©but du dĂ©marrage. Pour celles-ci, getrandom (2) doit ĂȘtre utilisĂ© Ă  la place, car il crĂ©era un blocage jusqu’à ce que le rĂ©servoir d’entropie soit initialisĂ©.

Si un fichier d’ensemencement est sauvegardĂ© d’un redĂ©marrage Ă  l’autre comme recommandĂ© ci-dessous (toutes les distributions majeures de Linux font cela depuis au moins l’an 2000), la sortie est chiffrĂ©e de maniĂšre sĂ»re vis-Ă -vis d’attaquants sans accĂšs local comme superutilisateur, Ă  la condition que ce fichier soit rechargĂ© lors du dĂ©marrage et parfaitement adaptĂ© 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.

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 666 /dev/random c 1 8
mknod -m 666 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom

Lorsqu’un systĂšme Linux dĂ©marre sans trop d’interaction avec un opĂ©rateur, le rĂ©servoir d’entropie peut se trouver dans un Ă©tat relativement prĂ©visible. Cela rĂ©duit la quantitĂ© rĂ©elle de bruit dans le rĂ©servoir d’entropie en dessous de la quantitĂ© nĂ©cessaire estimĂ©e. Afin de contrer cet effet, il est utile de sauvegarder les informations du rĂ©servoir d’entropie lors des arrĂȘts et redĂ©marrages du systĂšme. Pour rĂ©aliser cela, ajoutez les lignes suivantes dans le script de dĂ©marrage appropriĂ© exĂ©cutĂ© lors de la sĂ©quence de dĂ©marrage du systĂšme Linux :

echo "Initialisation du générateur de nombres aléatoires..."
random_seed=/var/run/random-seed
# Transmission d’une graine alĂ©atoire de dĂ©marrage en dĂ©marrage
# Chargement puis sauvegarde de tout le 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 ] && bits=$(cat $poolfile) || bits=4096
bytes=$(expr $bits / 8)
dd if=/dev/urandom of=$random_seed count=1 bs=$bytes

Également, ajoutez les lignes suivantes dans le script appropriĂ© exĂ©cutĂ© lors de l’extinction du systĂšme Linux.

# Transmission d’une graine alĂ©atoire de dĂ©marrage en dĂ©marrage
# Sauvegarde du rĂ©servoir d’entropie en entier
echo "Sauvegarde de la graine aléatoire..."
random_seed=/var/run/random-seed
touch $random_seed
chmod 600 $random_seed
poolfile=/proc/sys/kernel/random/poolsize
[ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096
bytes=$(expr $bits / 8)
dd if=/dev/urandom of=$random_seed count=1 bs=$bytes

Dans les exemples ci-dessus, il est assumĂ© que Linux 2.6.0, ou versions suivantes, est utilisĂ©, oĂč /proc/sys/kernel/random/poolsize renvoie la taille du rĂ©servoir d’entropie en bits (voir ci-dessous).

/proc interfaces

Les fichiers du répertoire /proc/sys/kernel/random (présent depuis Linux 2.3.16) fournissent des informations supplémentaires à propos du périphérique /dev/random .
entropy_avail

Ce fichier en lecture seule donne l’entropie disponible, en bits. Ce sera un nombre dans l’intervalle 0−4096.

poolsize

Ce fichier donne la taille de la rĂ©serve d’entropie. Sa sĂ©mantique varie selon les 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 est Ă©ditable et peut ĂȘtre modifiĂ© Ă  n’importe quelle valeur pour laquelle un algorithme est disponible. Actuellement, les choix sont 32, 64, 128, 256, 512, 1024 ou 2048.

Linux 2.6 et suivants :

Ce fichier est en lecture seule et donne la taille de la rĂ©serve d’entropie en bits . Il contient la valeur 4096.

read_wakeup_threshold

Ce fichier fournit le nombre de bits d’entropie requis pour rĂ©veiller les processus endormis en attente d’entropie de /dev/random . La valeur par dĂ©faut est 64.

write_wakeup_threshold

Ce fichier fournit 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.

uuid et boot_id

Ces fichiers en lecture seule fournissent des chaßnes aléatoires comme 6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9. Le premier est ré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Ă©mentaire au rĂ©servoir d’entrĂ©e en augmentant le dĂ©compte d’entropie. Cela diffĂšre de l’écriture dans /dev/random ou /dev/urandom qui ajoute 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

NOTES

Pour un aperçu et une comparaison des interfaces utilisables pour produire de l’alĂ©atoire, voir random (7).

BOGUES

Lors du tout dĂ©but du dĂ©marrage (boot), des lectures dans /dev/urandom peuvent renvoyer des donnĂ©es avant que le rĂ©servoir d’entropie n’ait Ă©tĂ© initialisĂ©.

VOIR AUSSI

mknod (1), getrandom (2), random (7)

RFC 1750, « Randomness Recommendations for Security »

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.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.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier <cedric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 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 .