Provided by: manpages-ro_4.27.0-1_all bug

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)