Provided by: manpages-ro_4.28.0-2_all 

NUME
random, urandom - dispozitive sursă de numere aleatoare în nucleu
SINOPSIS
#include <linux/random.h>
int ioctl(fd, RNDrequest, param);
DESCRIERE
Fișierele de caractere speciale /dev/random și /dev/urandom (prezente începând cu Linux 1.3.30) oferă o
interfață cu generatorul de numere aleatoare al nucleului. Fișierul /dev/random are numărul de
dispozitiv major 1 și numărul de dispozitiv minor 8. Fișierul /dev/urandom are numărul de dispozitiv
major 1 și numărul de dispozitiv minor 9.
Generatorul de numere aleatoare adună zgomotul din mediul înconjurător de la controlorii de dispozitiv și
alte surse într-un fond de entropie. Generatorul păstrează, de asemenea, o estimare a numărului de biți
de zgomot din fondul de entropie. Din acest fond de entropie sunt create numere aleatoare.
Linux 3.17 și versiunile ulterioare oferă interfața getrandom(2), mai simplă și mai sigură, care nu
necesită fișiere speciale; consultați pagina de manual getrandom(2) pentru detalii.
Atunci când este citit, dispozitivul /dev/urandom returnează octeți aleatori folosind un generator de
numere pseudo-aleatoare alimentat din fondul de entropie. Citirile de pe acest dispozitiv nu se blochează
(adică nu se cedează procesorul), dar pot suferi o întârziere apreciabilă atunci când se solicită
cantități mari de date.
Atunci când este citit în timpul pornirii inițiale, /dev/urandom poate returna date înainte ca fondul de
entropie să fie inițializat. Dacă acest lucru reprezintă un motiv de îngrijorare în aplicația
dumneavoastră, utilizați în schimb getrandom(2) sau /dev/random.
Dispozitivul /dev/random este o interfață moștenită care datează dintr-o perioadă în care primitivele
criptografice utilizate în implementarea /dev/urandom nu erau de încredere pe scară largă. Acesta va
returna octeți aleatori numai în limita numărului estimat de biți de zgomot proaspăt din fondul de
entropie, blocându-se dacă este necesar. /dev/random este potrivit pentru aplicațiile care au nevoie de
aleatorism de înaltă calitate și care își pot permite întârzieri nedeterminate.
Atunci când fondul de entropie este gol, citirile de pe /dev/random se vor bloca până când se adună
zgomotul ambiental suplimentar. Începând cu Linux 5.6, indicatorul O_NONBLOCK este ignorat, deoarece
/dev/random nu se va mai bloca decât în timpul procesului de pornire inițială. În versiunile anterioare,
dacă open(2) este apelat pentru /dev/random cu indicatorul O_NONBLOCK, un read(2) ulterior nu se va bloca
dacă numărul de octeți solicitat nu este disponibil. În schimb, sunt returnați octeții disponibili. Dacă
nu este disponibil niciun octet, read(2) va returna -1, iar errno va fi stabilită la EAGAIN.
Fanionul O_NONBLOCK nu are niciun efect la deschiderea /dev/urandom. Atunci când se apelează read(2)
pentru dispozitivul /dev/urandom, citirile de până la 256 de octeți vor returna atâția octeți câți sunt
solicitați și nu vor fi întrerupte de un gestionar de semnal. Citirile cu o memorie tampon peste această
limită pot returna un număr de octeți mai mic decât cel solicitat sau pot eșua cu eroarea EINTR, dacă
sunt întrerupte de un gestionar de semnal.
Începând cu Linux 3.16, un read(2) din /dev/urandom va returna cel mult 32 Mo. Un read(2) de la
/dev/random va returna cel mult 512 octeți (340 de octeți înainte de Linux 2.6.12).
Scrierea în /dev/random sau /dev/urandom va actualiza fondul de entropie cu datele scrise, dar acest
lucru nu va duce la un număr mai mare de entropie. Acest lucru înseamnă că va avea un impact asupra
conținutului citit din ambele fișiere, dar nu va face ca citirile din /dev/random să fie mai rapide.
Utilizare
Interfața /dev/random este considerată o interfață moștenită, iar /dev/urandom este preferată și
suficientă în toate cazurile de utilizare, cu excepția aplicațiilor care necesită caracter aleatoriu în
timpul pornirii inițiale; pentru aceste aplicații, trebuie să se utilizeze în schimb getrandom(2),
deoarece se va bloca până când fondul de entropie este inițializat.
În cazul în care un fișier de semințe este salvat în timpul repornirii, așa cum se recomandă mai jos,
fișierul de ieșire este securizat criptografic împotriva atacatorilor fără acces root local, imediat ce
este reîncărcat în secvența de pornire și este perfect adecvat pentru cheile de sesiune de criptare a
rețelei; (toate distribuțiile majore de Linux au salvat fișierul de semințe în timpul repornirii cel
puțin din anul 2000). Deoarece citirile din /dev/random se pot bloca, utilizatorii vor dori, de obicei,
să îl deschidă în mod neblocat (sau să efectueze o citire cu temporarizare) și să ofere un fel de
notificare utilizatorului dacă entropia dorită nu este disponibilă imediat.
Configurare
Dacă sistemul dumneavoastră nu are deja create /dev/random și /dev/urandom, acestea pot fi create cu
următoarele comenzi:
mknod -m 666 /dev/random c 1 8
mknod -m 666 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom
Atunci când un sistem Linux pornește fără prea multă interacțiune cu operatorul, fondul de entropie poate
fi într-o stare destul de previzibilă. Acest lucru reduce cantitatea reală de zgomot din fondul de
entropie sub valoarea estimată. Pentru a contracara acest efect, este utilă transmiterea informațiilor
privind fondul de entropie pe parcursul opririlor și pornirilor. Pentru a face acest lucru, adăugați
liniile la un script corespunzător care este executat în timpul secvenței de pornire a sistemului Linux:
echo "Se inițializează generatorul de numere aleatorii..."
random_seed=/var/run/random-seed
# Transmite o sămânță aleatorie de la o pornire la alta
# Încarcă și apoi salvează întregul fond entropic
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
De asemenea, adăugați următoarele linii într-un script corespunzător care se execută în timpul închiderii
sistemului Linux:
# Transmite o sămânță aleatorie de la oprire la pornire
# Salvează întregul fond de entropie
echo "Se salvează semințele aleatorii..."
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
În exemplele de mai sus, presupunem Linux 2.6.0 sau o versiune ulterioară, unde
/proc/sys/kernel/random/poolsize returnează dimensiunea fondului de entropie în biți (a se vedea mai
jos).
Interfețe „/proc”
Fișierele din directorul /proc/sys/kernel/random (prezent din Linux 2.3.16) oferă informații suplimentare
despre dispozitivul /dev/random:
entropy_avail
Acest fișier doar pentru citire oferă entropia disponibilă, în biți. Acesta va fi un număr cuprins
între 0 și 4096.
poolsize
Acest fișier indică dimensiunea fondului de entropie. Semantica acestui fișier variază în funcție
de versiunile nucleului:
Linux 2.4:
Acest fișier indică dimensiunea fondului de entropie în octeți. În mod normal, acest fișier
va avea valoarea 512, dar poate fi inscripționat și poate fi modificat la orice valoare
pentru care este disponibil un algoritm. Alegerile sunt 32, 64, 128, 256, 512, 1024 sau
2048.
Linux 2.6 și versiunile ulterioare:
Acest fișier este numai pentru citire și oferă dimensiunea fondului de entropie în biți.
Acesta conține valoarea 4096.
read_wakeup_threshold
Acest fișier conține numărul de biți de entropie necesar pentru trezirea proceselor care așteaptă
entropie de la /dev/random. Valoarea implicită este de 64.
write_wakeup_threshold
Acest fișier conține numărul de biți de entropie sub care sunt trezite procesele care fac un
select(2) sau poll(2) pentru acces în scris la /dev/random. Aceste valori pot fi modificate prin
scrierea în fișiere.
uuid and boot_id
Aceste fișiere doar pentru citire conțin șiruri aleatorii precum
6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9. Primul este generat din nou la fiecare citire, iar cel de-al
doilea a fost generat o singură dată.
interfața ioctl(2)
Următoarele cereri ioctl(2) sunt definite în descriptorii de fișiere conectați fie la /dev/random, fie la
/dev/urandom. Toate cererile efectuate vor interacționa cu fondul de entropie de intrare, având un impact
atât asupra /dev/random, cât și asupra /dev/urandom. Capacitatea CAP_SYS_ADMIN este necesară pentru toate
cererile, cu excepția RNDGETENTCNT.
RNDGETENTCNT
Obține numărul de entropie al fondului de intrare; conținutul va fi același cu cel al fișierului
entropy_avail din cadrul proc. Rezultatul va fi stocat în numărul întreg indicat de argument.
RNDADDTOENTCNT
Mărește sau descrește numărul de entropie al fondului de intrare cu valoarea indicată de argument.
RNDGETPOOL
Eliminată în Linux 2.6.9.
RNDADDENTROPY
Adaugă o cantitate suplimentară de entropie la fondul de intrare, crescând numărul de entropie.
Acest lucru diferă de scrierea în /dev/random sau /dev/urandom, care adaugă doar câteva date, dar
nu mărește numărul de entropie. Se utilizează următoarea structură:
struct rand_pool_info {
int entropy_count;
int buf_size;
__u32 buf[0];
};
Aici entropy_count este valoarea adăugată la (sau scăzută din) numărul de entropie, iar buf este
memoria tampon de dimensiunea buf_size care se adaugă la fondul de entropie.
RNDZAPENTCNT
RNDCLEARPOOL
Anulează numărul de entropie al tuturor unităților și adaugă unele date de sistem (cum ar fi
timpul real) la aceste unități.
FIȘIERE
/dev/random
/dev/urandom
NOTE
Pentru o prezentare generală și o comparație a diverselor interfețe care pot fi utilizate pentru a obține
caracterul aleatoriu, a se vedea random(7).
ERORI
În timpul pornirii inițiale, citirile din /dev/urandom pot returna date înainte ca fondul de entropie să
fie inițializat.
CONSULTAȚI ȘI
mknod(1), getrandom(2), random(7)
RFC 1750, "Randomness Recommendations for Security"
TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu
<remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o
versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO
RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
ro@lists.sourceforge.net.
Pagini de manual de Linux 6.9.1 2 mai 2024 random(4)