Man page - getrandom(2)

Packages contains this manual

Available languages:

en fr pl ru ro

Manual

getrandom

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
NOTES
Nombre maximal d’octets renvoyĂ©s
Interruption par un gestionnaire de signal
BOGUES
VOIR AUSSI
TRADUCTION

NOM

getrandom - obtenir une sĂ©rie d’octets alĂ©atoires

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <sys/random.h>

ssize_t getrandom(void buf [. buflen ], size_t buflen , unsigned int flags );

DESCRIPTION

L’appel systĂšme getrandom () remplit le tampon vers lequel pointe buf avec jusqu’à buflen octets alĂ©atoires. Ces octets peuvent ĂȘtre utilisĂ©s pour alimenter des gĂ©nĂ©rateurs de nombre alĂ©atoire dans l’espace utilisateur ou Ă  des fins de chiffrement.

Par dĂ©faut, getrandom () dessine une entropie Ă  partir d’une source urandom (soit la mĂȘme source que le pĂ©riphĂ©rique /dev/urandom ). Ce comportement peut ĂȘtre modifiĂ© avec le paramĂštre flags .

Si la source urandom a Ă©tĂ© initialisĂ©e, les lectures jusqu’à 256 octets renverront toujours autant d’octets que demandĂ© et ne seront pas interrompues par des signaux. Il n’y a pas une telle garantie pour les tampons plus gros. Par exemple, si l’appel est interrompu par un gestionnaire de signal, il peut renvoyer un tampon partiellement rempli ou Ă©chouer avec l’erreur EINTR .

Si la source urandom n’a pas encore Ă©tĂ© initialisĂ©e, getrandom () se bloquera, sauf si GRND_NONBLOCK est indiquĂ© dans flags .

Le paramÚtre flags est un masque de bit qui peut contenir aucune ou plusieurs des valeurs suivantes unies (OU logique) ensemble :
GRND_RANDOM

Si ce bit est positionnĂ©, les octets alĂ©atoires seront dessinĂ©s Ă  partir de la source random (soit la mĂȘme que le pĂ©riphĂ©rique /dev/random ) au lieu de la source urandom . La source random est limitĂ©e par l’entropie qui peut ĂȘtre rĂ©cupĂ©rĂ©e Ă  partir du bruit de l’environnement. Si le nombre d’octets disponibles dans la source random est infĂ©rieur Ă  celui demandĂ© dans buflen , l’appel ne renvoie que les octets alĂ©atoires disponibles. S’il n’y pas d’octets alĂ©atoires disponibles, le comportement dĂ©pend de la prĂ©sence de GRND_NONBLOCK dans le paramĂštre flags .

GRND_NONBLOCK

Par dĂ©faut, pendant une lecture depuis la source random , getrandom () se bloque si aucun octet alĂ©atoire n’est disponible, tandis que pendant une lecture Ă  partir de la source urandom , il se bloque si la rĂ©serve (pool) d’entropie n’a pas encore Ă©tĂ© initialisĂ©e. Si le paramĂštre GRND_NONBLOCK est positionnĂ©, getrandom () ne se bloque pas dans ces cas, mais il renvoie immĂ©diatement -1 et il positionne errno sur EAGAIN .

VALEUR RENVOYÉE

En cas de succĂšs, getrandom () renvoie le nombre d’octets copiĂ©s dans le tampon buf . Il peut ĂȘtre infĂ©rieur au nombre d’octets demandĂ© par buflen si GRND_RANDOM a Ă©tĂ© indiquĂ© dans flags et qu’il n’y avait pas assez d’entropie dans la source random , ou si l’appel systĂšme a Ă©tĂ© interrompu par un signal.

En cas d’erreur, la valeur de retour est -1 et errno est dĂ©finie pour prĂ©ciser l’erreur.

ERREURS

EAGAIN

L’entropie demandĂ©e n’était pas disponible et getrandom () se serait bloquĂ© si le paramĂštre GRND_NONBLOCK n’avait pas Ă©tĂ© positionnĂ©.

EFAULT

L’adresse à laquelle renvoie buf est en dehors de l’espace d’adressage accessible.

EINTR

L’appel a Ă©tĂ© interrompu par un gestionnaire de signal ; voir la description sur la maniĂšre dont sont gĂ©rĂ©s les appels read (2) interrompus sur des pĂ©riphĂ©riques « lents » avec et sans l’attribut SA_RESTART dans la page de manuel de signal (7).

EINVAL

Un paramÚtre non valable a été indiqué dans flags .

ENOSYS

La fonction enveloppe de la glibc pour getrandom () a dĂ©terminĂ© que le noyau sous-jacent n’implĂ©mente pas cet appel systĂšme.

STANDARDS

Linux.

HISTORIQUE

Linux 3.17, glibc 2.25.

NOTES

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

Contrairement Ă  /dev/random et Ă  /dev/urandom , getrandom () n’implique pas d’utiliser des noms de chemin ou des descripteurs de fichier. Ainsi, getrandom () peut ĂȘtre utile dans les cas oĂč chroot (2) rend invisibles les noms de chemin /dev , et oĂč une application (comme un dĂ©mon qui dĂ©marre) ferme un descripteur de fichier pour un de ces fichiers ouverts par une bibliothĂšque.

Nombre maximal d’octets renvoyĂ©s

À partir de Linux 3.19, les limites suivantes s’appliquent :

-

Pendant une lecture Ă  partir d’une source urandom , un maximum de 32Mi-1 octets est renvoyĂ© par un appel getrandom () sur des systĂšmes oĂč int a une taille de 32 bits.

-

Lors d’une lecture Ă  partir d’une source random , un maximum de 512 octets est renvoyĂ©.

Interruption par un gestionnaire de signal

Lors de la lecture Ă  partir d’une source urandom ( GRND_RANDOM n’est pas positionnĂ©), getrandom () se bloquera jusqu’à ce que la rĂ©serve (pool) d’entropie soit initialisĂ©e (sauf si l’attribut GRND_NONBLOCK a Ă©tĂ© indiquĂ©). Si une demande est faite pour lire un grand nombre d’octets (plus de 256), getrandom () se bloquera jusqu’à ce que ces octets soient gĂ©nĂ©rĂ©s et transfĂ©rĂ©s de la mĂ©moire du noyau vers buf . Lors d’une lecture Ă  partir d’une source random ( GRND_RANDOM est positionnĂ©), getrandom () se bloquera jusqu’à ce que des octets alĂ©atoires soient disponibles (sauf si l’attribut GRND_NONBLOCK a Ă©tĂ© indiquĂ©).

Quand un appel getrandom () se bloque pendant la lecture Ă  partir d’une source urandom du fait d’une interruption par un gestionnaire de signal, le comportement dĂ©pend de l’état d’initialisation du tampon d’entropie et de la taille de la requĂȘte, buflen . Si la rĂ©serve d’entropie n’est pas encore initialisĂ©e, l’appel Ă©choue avec l’erreur EINTR . Si cette rĂ©serve d’entropie a Ă©tĂ© initialisĂ©e et si la taille de la requĂȘte est importante ( buflen > 256), soit l’appel rĂ©ussit, en renvoyant un tampon partiellement rempli, soit il Ă©choue avec l’erreur EINTR . Si la rĂ©serve d’entropie a Ă©tĂ© initialisĂ©e et si la taille demandĂ©e est petite ( buflen <= 256), getrandom () n’échouera pas avec EINTR . Il renverra plutĂŽt tous les octets demandĂ©s.

Pendant une lecture avec une source random , les requĂȘtes bloquantes de n’importe quelle taille peuvent ĂȘtre interrompues par un gestionnaire de signal (l’appel Ă©choue avec l’erreur EINTR ).

L’utilisation de getrandom () pour lire de petits tampons (<= 256 octets) Ă  partir d’une source urandom est le cas d’utilisation privilĂ©giĂ©.

Le traitement particulier des petites valeurs de buflen a Ă©tĂ© conçu Ă  des fins de compatibilitĂ© avec le getentropy (3) d’OpenBSD, qui est aujourd’hui gĂ©rĂ© par la glibc.

L’utilisateur de getrandom () doit toujours vĂ©rifier la valeur renvoyĂ©e, pour savoir si une erreur s’est produite ou si moins d’octets que le nombre demandĂ© ont Ă©tĂ© renvoyĂ©s. Au cas oĂč GRND_RANDOM n’est pas indiquĂ© et oĂč buflen est infĂ©rieur ou Ă©gal Ă  256, il ne devrait jamais y avoir de renvoi d’un nombre d’octets infĂ©rieur Ă  celui demandĂ©, mais un programmeur prudent le vĂ©rifiera quand mĂȘme.

BOGUES

À partir de Linux 3.19, le bogue suivant existe :

-

Selon la charge du processeur, getrandom () ne réagit pas aux interruptions avant de lire tous les octets demandés.

VOIR AUSSI

getentropy (3), random (4), urandom (4), random (7), signal (7)

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> et Jean-Philippe MENGUAL <jpmengual@debian.org>

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 .