RAND(7ssl) OpenSSL RAND(7ssl)

RAND - generatorul aleatoriu OpenSSL

Numerele aleatorii reprezintă o parte vitală a criptografiei, ele fiind necesare pentru a asigura impredictibilitatea în sarcini precum generarea cheilor, crearea „sărurilor” și multe altele. Generatoarele bazate pe software trebuie să fie însămânțate cu numere aleatorii externe înainte de a putea fi utilizate ca generator de numere pseudoaleatorii securizate criptografic (CSPRNG). Disponibilitatea hardware-ului obișnuit cu instrucțiuni speciale și a sistemelor de operare moderne, care pot utiliza elemente precum fluctuația întreruperilor și temporizarea pachetelor de rețea, pot fi surse rezonabile de material de însămânțare.

OpenSSL vine cu o implementare implicită a API-ului RAND care se bazează pe modelul generatorului de biți aleatoriu determinist (DRBG) descris în [NIST SP 800-90A Rev. 1]. Generatorul aleatoriu implicit se va inițializa automat la prima utilizare și va fi complet funcțional fără a fi necesar să fie inițializat („seeded - însămânțat”) în mod explicit. Acesta se însămânțează și se reînsămânțează automat folosind surse aleatorii de încredere furnizate de sistemul de operare.

Ca dezvoltator normal de aplicații, nu trebuie să vă faceți griji cu privire la niciun detaliu, trebuie doar să utilizați RAND_bytes(3) pentru a obține date aleatorii. Acestea fiind spuse, există o regulă importantă pe care trebuie să o respectați: Verificați întotdeauna valoarea de returnare a erorii RAND_bytes(3) și nu luați aleatoriul drept ceva de la sine înțeles. Deși (re)însămânțarea este automată, aceasta poate eșua deoarece nu este disponibilă nicio sursă aleatorie de încredere sau sursa (sursele) de încredere nu furnizează temporar suficient material de însămânțare aleatorie. În acest caz, CSPRNG intră într-o stare de eroare și încetează să mai furnizeze date de ieșire, până când este capabil să se recupereze din eroare prin reînsămânțare. Pentru mai multe detalii privind reînsămânțarea și recuperarea din eroare, a se vedea EVP_RAND(7).

Pentru valorile care trebuie să rămână secrete, puteți utiliza în schimb RAND_priv_bytes(3). Această metodă nu oferă o generare aleatorie „mai bună”, ci utilizează același tip de CSPRNG. Intenția de a utiliza un CSPRNG dedicat exclusiv pentru valorile private este ca niciun rezultat al acestuia să nu fie vizibil pentru un atacator (de exemplu, utilizat ca valoare a sării), pentru a dezvălui cât mai puține informații cu privire la starea sa internă, iar o compromitere a instanței CSPRNG „publice” nu va afecta secretul acestor valori private.

În cazul rar în care implementarea implicită nu vă satisface cerințele speciale, elementele interne RAND implicite pot fi înlocuite cu propriile obiecte EVP_RAND(3).

Modificarea generatorului aleatoriu implicit ar trebui să fie necesară doar în cazuri excepționale și nu este recomandată, cu excepția cazului în care aveți cunoștințe aprofundate despre principiile criptografice și înțelegeți implicațiile modificărilor dvs.

În sfârșit, este posibil ca un furnizor să ocolească configurația RAND implicită pentru RAND_bytes(3) și funcțiile asociate. Un furnizor poate fi specificat ca sursă unică de sămânță aleatorie prin funcția RAND_set1_random_provider(3) sau prin configurare utilizând opțiunea random_provider din config(5). Odată specificat, furnizorul nominalizat va fi utilizat direct la apelarea familiei de funcții RAND_bytes(3).

Metoda RAND implicită a OpenSSL se bazează pe clasele de generatoare de biți aleatorii deterministe (DRBG) EVP_RAND. Un DRBG este un anumit tip de generator de numere pseudoaleatorii securizat criptografic (CSPRNG), care este descris în [NIST SP 800-90A Rev. 1].

RAND_bytes(3), RAND_priv_bytes(3), EVP_RAND(3), RAND_get0_primary(3), config(5), EVP_RAND(7), RAND_set1_random_provider(3).

Drepturi de autor 2018-2025 The OpenSSL Project Authors. Toate drepturile rezervate.

Licențiat sub Licența Apache 2.0 („License”). Nu aveți voie să utilizați acest fișier decât în conformitate cu licența. Puteți obține o copie din fișierul LICENSE din distribuția sursei sau de la https://www.openssl.org/source/license.html.

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.

5 august 2025 3.5.2