RAND_BYTES(3ssl) OpenSSL RAND_BYTES(3ssl)

RAND_bytes, RAND_priv_bytes, RAND_bytes_ex, RAND_priv_bytes_ex, RAND_pseudo_bytes, RAND_set1_random_provider - generează date aleatorii

#include <openssl/rand.h>
int RAND_bytes(unsigned char *buf, int num);
int RAND_priv_bytes(unsigned char *buf, int num);
int RAND_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num,
                  unsigned int strength);
int RAND_priv_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num,
                       unsigned int strength);
int RAND_set1_random_provider(OSSL_LIB_CTX *ctx, OSSL_PROVIDER *p);

Următoarea funcție a fost depreciată de la OpenSSL 1.1.0 și poate fi ascunsă complet prin definirea OPENSSL_API_COMPAT cu o valoare de versiune adecvată, a se vedea openssl_user_macros(7):

int RAND_pseudo_bytes(unsigned char *buf, int num);

RAND_bytes() generează num octeți aleatori utilizând un generator pseudoaleatoriu criptografic securizat (CSPRNG) și îi stochează în buf. buf NU TREBUIE să fie NULL.

RAND_priv_bytes() are aceeași semantică ca RAND_bytes(). Este destinată utilizării pentru generarea de valori care trebuie să rămână private. Dacă se utilizează metoda RAND_METHOD implicită, această funcție utilizează o instanță PRNG „privată” separată, astfel încât compromiterea instanței PRNG „publice” să nu afecteze confidențialitatea acestor valori private, așa cum este descris în RAND(7) și EVP_RAND(7).

RAND_bytes_ex() și RAND_priv_bytes_ex() sunt identice cu RAND_bytes() și RAND_priv_bytes(), cu excepția faptului că ambele acceptă parametrii suplimentari strength și ctx. Octeții generați vor avea o putere de securitate de cel puțin strength biți. DRBG utilizat pentru operație este DRBG public sau privat asociat cu ctx specificat. Parametrul poate fi NULL, caz în care se utilizează contextul implicit al bibliotecii (vezi OSSL_LIB_CTX(3). Dacă metoda RAND_METHOD implicită a fost modificată, atunci, din motive de compatibilitate, se va utiliza metoda RAND_METHOD, iar DRBG-ul contextului bibliotecii va fi ignorat.

RAND_set1_random_provider() specifică un furnizor, prov, care va fi utilizat de contextul bibliotecii ctx pentru toate apelurile generate de mai sus, în locul sursei DRBG și entropie încorporate. Treceți NULL pentru furnizor pentru a dezactiva funcționalitatea furnizorului aleatoriu. În acest caz, vor fi utilizate DRBG-urile încorporate și sursa de entropie. Această apelare nu trebuie considerată sigură pentru fire de execuție.

În mod implicit, OpenSSL CSPRNG acceptă un nivel de securitate de 256 biți, cu condiția să se poată autoalimenta dintr-o sursă de entropie de încredere. Pe toate platformele principale acceptate de OpenSSL (inclusiv platformele de tip Unix și Windows), OpenSSL este configurat să alimenteze automat CSPRNG la prima utilizare, folosind generatorul aleatoriu al sistemului de operare.

Dacă sursa de entropie eșuează sau nu este disponibilă, CSPRNG va intra într-o stare de eroare și va refuza să genereze octeți aleatori. Din acest motiv, este important să verificați întotdeauna valoarea de returnare a erorii pentru RAND_bytes() și RAND_priv_bytes() și să nu considerați caracterul aleatoriu ca fiind ceva de la sine înțeles.

Pe alte platforme, este posibil să nu existe o sursă de entropie de încredere disponibilă sau OpenSSL să fi fost configurat în mod explicit pentru a utiliza surse de entropie diferite. Dacă aveți îndoieli cu privire la calitatea sursei de entropie, nu ezitați să întrebați furnizorul sistemului de operare sau să postați o întrebare pe GitHub sau pe lista de discuții openssl-users.

RAND_bytes() și RAND_priv_bytes() returnează 1 în caz de succes, -1 dacă nu sunt acceptate de metoda RAND curentă sau 0 în cazul altor erori. Codul de eroare poate fi obținut prin ERR_get_error(3).

RAND_set1_random_provider() returnează 1 în caz de succes și 0 în caz de eșec.

RAND_add(3), RAND_bytes(3), RAND_priv_bytes(3), ERR_get_error(3), RAND(7), EVP_RAND(7)

  • RAND_pseudo_bytes() a fost depreciată în OpenSSL 1.1.0; utilizați în schimb RAND_bytes().
  • Funcția RAND_priv_bytes() a fost adăugată în OpenSSL 1.1.1.
  • Funcțiile RAND_bytes_ex() și RAND_priv_bytes_ex() au fost adăugate în OpenSSL 3.0.
  • Funcția RAND_set1_random_provider() a fost adăugată în OpenSSL 3.5.

Drepturi de autor 2000-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