Man page - random(4)
Packages contains this manual
- shm_overview(7)
- nss(5)
- proc_mtrr(5)
- intro(7)
- tcp(7)
- iso_8859-9(7)
- armscii-8(7)
- proc_kpagecount(5)
- initrd(4)
- mouse(4)
- proc_stat(5)
- x25(7)
- proc_interrupts(5)
- fifo(7)
- repertoiremap(5)
- icmp(7)
- futex(7)
- feature_test_macros(7)
- lp(4)
- bpf-helpers(7)
- epoll(7)
- proc_sys_dev(5)
- namespaces(7)
- proc_sysrq-trigger(5)
- proc_bus(5)
- cp1251(7)
- proc_pid_maps(5)
- proc_sys_vm(5)
- proc_pid_projid_map(5)
- st(4)
- proc_pid(5)
- issue(5)
- pid_namespaces(7)
- unicode(7)
- inode(7)
- hosts.equiv(5)
- iso-8859-13(7)
- proc_fb(5)
- proc_modules(5)
- proc_pid_autogroup(5)
- keyrings(7)
- sysvipc(7)
- proc_kmsg(5)
- cgroups(7)
- latin6(7)
- proc_pid_uid_map(5)
- unix(7)
- proc_pid_io(5)
- pts(4)
- packet(7)
- ld-linux.so(8)
- tzselect(8)
- iconv(1)
- proc_pid_syscall(5)
- proc_pid_net(5)
- proc_pid_pagemap(5)
- tty(4)
- proc_profile(5)
- standards(7)
- proc_pid_mounts(5)
- filesystems(5)
- iso-8859-15(7)
- locale(5)
- iso_8859_3(7)
- xattr(7)
- iso-8859-2(7)
- proc_uptime(5)
- persistent-keyring(7)
- credentials(7)
- proc_pid_timers(5)
- utmpx(5)
- vcsa(4)
- proc_pid_exe(5)
- proc_net(5)
- proc_timer_stats(5)
- ip(7)
- proc_pid_fd(5)
- ptmx(4)
- user_namespaces(7)
- resolv.conf(5)
- url(7)
- iso_8859_5(7)
- iso_8859-8(7)
- urn(7)
- process-keyring(7)
- proc_pid_auxv(5)
- proc_ksyms(5)
- proc_ide(5)
- veth(4)
- ldd(1)
- proc_swaps(5)
- landlock(7)
- proc_vmstat(5)
- system_data_types(7)
- cp1252(7)
- lirc(4)
- proc_kpageflags(5)
- random(7)
- precedence(7)
- cpuset(7)
- proc_pid_ns(5)
- acct(5)
- latin4(7)
- proc_pid_cgroup(5)
- proc_cpuinfo(5)
- iso_8859-2(7)
- proc_keys(5)
- charsets(7)
- pldd(1)
- proc_pid_stat(5)
- rtnetlink(7)
- netlink(7)
- ram(4)
- mem(4)
- iso-8859-6(7)
- proc_key-users(5)
- iso_8859_15(7)
- fanotify(7)
- proc_sys_net(5)
- sysfs(5)
- math_error(7)
- latin1(7)
- proc_pid_root(5)
- nptl(7)
- proc_cgroups(5)
- proc_iomem(5)
- proc_pid_statm(5)
- sem_overview(7)
- hier(7)
- full(4)
- proc_pid_status(5)
- proc_pid_cwd(5)
- proc_pid_cpuset(5)
- proc_scsi(5)
- uri(7)
- proc_diskstats(5)
- iso_8859_6(7)
- latin2(7)
- latin5(7)
- man-pages(7)
- ld.so(8)
- uts_namespaces(7)
- proc_pid_mountstats(5)
- intro(3)
- proc_pid_seccomp(5)
- proc_pid_wchan(5)
- attributes(7)
- symlink(7)
- mount_namespaces(7)
- charmap(5)
- tis-620(7)
- iso-8859-10(7)
- getent(1)
- proc_buddyinfo(5)
- ttytype(5)
- rtc(4)
- proc_malloc(5)
- suffixes(7)
- sln(8)
- signal(7)
- proc_sys_abi(5)
- signal-safety(7)
- time_namespaces(7)
- proc_pid_comm(5)
- raw(7)
- gai.conf(5)
- proc_crypto(5)
- locale(1)
- iso-8859-3(7)
- motd(5)
- proc_meminfo(5)
- iso-8859-8(7)
- protocols(5)
- proc_pid_map_files(5)
- pthreads(7)
- null(4)
- proc(5)
- zdump(8)
- socket(7)
- proc_sys_kernel(5)
- ddp(7)
- memusagestat(1)
- hd(4)
- iso-8859-14(7)
- shells(5)
- pipe(7)
- glob(7)
- proc_self(5)
- network_namespaces(7)
- utmp(5)
- proc_kcore(5)
- nsswitch.conf(5)
- sd(4)
- iso-8859-5(7)
- iso_8859_16(7)
- man(7)
- iso_8859-6(7)
- dir_colors(5)
- mq_overview(7)
- vsock(7)
- ascii(7)
- thread-keyring(7)
- fs(5)
- proc_pid_attr(5)
- proc_sys_debug(5)
- proc_sys(5)
- proc_pid_cmdline(5)
- pty(7)
- services(5)
- cgroup_namespaces(7)
- securetty(5)
- netdevice(7)
- iso_8859_13(7)
- host.conf(5)
- proc_pid_setgroups(5)
- proc_slabinfo(5)
- sock_diag(7)
- iso_8859-14(7)
- iso-8859-11(7)
- iso_8859_11(7)
- operator(7)
- regex(7)
- wavelan(4)
- proc_sys_fs(5)
- nologin(5)
- proc_pci(5)
- koi8-r(7)
- erofs(5)
- intro(2)
- utf8(7)
- proc_kallsyms(5)
- proc_sysvipc(5)
- queue(7)
- proc_sys_sunrpc(5)
- intro(5)
- latin8(7)
- mtrace(1)
- ipc_namespaces(7)
- dsp56k(4)
- iso_8859_4(7)
- proc_pid_smaps(5)
- proc_cmdline(5)
- rpc(5)
- proc_tty(5)
- proc_version(5)
- smartpqi(4)
- proc_pid_timerslack_ns(5)
- aio(7)
- session-keyring(7)
- resolver(5)
- slabinfo(5)
- wtmp(5)
- iso_8859_9(7)
- proc_locks(5)
- mailaddr(7)
- proc_pid_oom_score(5)
- kmem(4)
- iconvconfig(8)
- iso_8859-7(7)
- glibc(7)
- hostname(7)
- proc_thread-self(5)
- ipv6(7)
- iso_8859_7(7)
- proc_kpagecgroup(5)
- core(5)
- time(7)
- units(7)
- proc_dma(5)
- loop(4)
- address_families(7)
- zero(4)
- intro(4)
- procfs(5)
- iso_8859-4(7)
- vdso(7)
- tmpfs(5)
- iso-8859-16(7)
- iso_8859_10(7)
- user-session-keyring(7)
- libc(7)
- proc_fs(5)
- koi8-u(7)
- latin3(7)
- proc_tid_children(5)
- proc_pid_limits(5)
- proc_pid_coredump_filter(5)
- iso_8859-15(7)
- arp(7)
- urandom(4)
- iso_8859-10(7)
- hpsa(4)
- proc_pid_environ(5)
- boot(7)
- ftm(7)
- ld-linux(8)
- proc_driver(5)
- loop-control(4)
- iso_8859-16(7)
- proc_filesystems(5)
- tzfile(5)
- sprof(1)
- proc_pid_task(5)
- proc_pid_oom_score_adj(5)
- proc_mounts(5)
- iso-8859-4(7)
- iso_8859-1(7)
- utf-8(7)
- iso_8859-13(7)
- intro(6)
- proc_timer_list(5)
- rtld-audit(7)
- iso_8859-3(7)
- group(5)
- sched(7)
- proc_pid_clear_refs(5)
- hosts(5)
- iso_8859-11(7)
- numa(7)
- iso_8859_2(7)
- locale(7)
- iso-8859-1(7)
- fuse(4)
- proc_tid(5)
- proc_execdomains(5)
- proc_pid_mountinfo(5)
- intro(8)
- iso_8859_8(7)
- proc_loadavg(5)
- proc_pid_oom_adj(5)
- re_format(7)
- iso_8859_14(7)
- zic(8)
- bootparam(7)
- inotify(7)
- posixoptions(7)
- proc_partitions(5)
- iso-8859-9(7)
- proc_pid_mem(5)
- networks(5)
- proc_sys_user(5)
- udp(7)
- proc_zoneinfo(5)
- latin10(7)
- proc_pid_fdinfo(5)
- proc_pid_stack(5)
- memusage(1)
- spufs(7)
- pkeys(7)
- path_resolution(7)
- proc_ioports(5)
- intro(1)
- ldconfig(8)
- msr(4)
- svipc(7)
- port(4)
- proc_pid_personality(5)
- cciss(4)
- latin9(7)
- capabilities(7)
- localedef(1)
- vcs(4)
- iso_8859-5(7)
- elf(5)
- proc_sys_proc(5)
- console_codes(4)
- random(4)
- iso-8859-7(7)
- termcap(5)
- cpuid(4)
- environ(7)
- string_copying(7)
- proc_pid_gid_map(5)
- queue(3)
- termio(7)
- user-keyring(7)
- complex(7)
- latin7(7)
- proc_config.gz(5)
- udplite(7)
- kernel_lockdown(7)
- proc_devices(5)
- proc_apm(5)
- iso_8859_1(7)
- proc_pid_numa_maps(5)
apt-get install manpages
Available languages:
en fr es it pl ja ru ro deManual
random
NOMSYNOPSIS
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 .