EVP_PKEY_DECRYPT(3ssl) OpenSSL EVP_PKEY_DECRYPT(3ssl)

EVP_PKEY_decrypt_init, EVP_PKEY_decrypt_init_ex, EVP_PKEY_decrypt - decriptare folosind un algoritm cu cheie publică

#include <openssl/evp.h>
int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
int EVP_PKEY_decrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,
                     unsigned char *out, size_t *outlen,
                     const unsigned char *in, size_t inlen);

Funcția EVP_PKEY_decrypt_init() inițializează un context de algoritm cu cheie publică utilizând cheia pkey pentru o operație de decriptare.

Funcția EVP_PKEY_decrypt_init_ex() inițializează un context de algoritm cu cheie publică utilizând cheia pkey pentru o operație de decriptare și definește parametrii specifici algoritmului params.

Funcția EVP_PKEY_decrypt() efectuează o operație de decriptare a cheii publice utilizând ctx. Datele care trebuie decriptate sunt specificate utilizând parametrii in și inlen. Dacă out este NULL, atunci dimensiunea minimă necesară a tamponului de ieșire este scrisă în parametrul *outlen.

Dacă out nu este NULL, atunci înainte de apel, parametrul *outlen trebuie să conțină lungimea tamponului out. Dacă apelul are succes, datele decriptate sunt scrise în out și cantitatea de date decriptate este scrisă în *outlen, în caz contrar fiind returnată o eroare.

După apelul către EVP_PKEY_decrypt_init(), pot fi efectuate operații de control specifice algoritmului pentru a defini parametrii corespunzători pentru operație. Aceste operații pot fi incluse în apelul EVP_PKEY_decrypt_init_ex().

Funcția EVP_PKEY_decrypt() poate fi apelată de mai multe ori în același context dacă se efectuează mai multe operații utilizând aceiași parametri.

EVP_PKEY_decrypt_init(), EVP_PKEY_decrypt_init_ex() și EVP_PKEY_decrypt() returnează 1 pentru succes și 0 sau o valoare negativă pentru eșec. În special, o valoare de returnare de -2 indică faptul că operația nu este acceptată de algoritmul cheii publice.

În versiunile OpenSSL anterioare versiunii 3.2.0, atunci când erau utilizate în completarea PKCS#1 v1.5, atât valoarea returnată de EVP_PKEY_decrypt(), cât și outlen furnizau informații utile pentru lansarea unui atac Bleichenbacher împotriva cheii private utilizate. Acestea trebuiau procesate într-un mod care să nu implice canale secundare.

Începând cu versiunea 3.2.0, metoda EVP_PKEY_decrypt() utilizată împreună cu umplerea PKCS#1 v1.5, așa cum este implementată în furnizorul default, implementează mecanismul de respingere implicită (consultați OSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION în provider-asym_cipher(7)). Asta înseamnă că nu returnează o eroare când detectează o eroare în umplere, ci returnează un mesaj generat pseudo-aleatoriu, eliminând necesitatea codului securizat de canal lateral din aplicațiile care folosesc OpenSSL. Dacă OpenSSL este configurat să folosească un furnizor care nu implementează respingerea implicită, codul trebuie să gestioneze în continuare valorile returnate folosind codul fără canal lateral. Gestionarea fără canal secundar a stivei de erori poate fi efectuată fie folosind o pereche de apeluri necondiționate ERR_set_mark(3) și ERR_pop_to_mark(3) , fie folosind apelul ERR_clear_error(3).

Decriptează datele folosind OAEP (pentru cheile RSA):

#include <openssl/evp.h>
#include <openssl/rsa.h>
EVP_PKEY_CTX *ctx;
ENGINE *eng;
unsigned char *out, *in;
size_t outlen, inlen;
EVP_PKEY *key;
/*
 * NB: presupune că key, eng, in, inlen sunt deja configurate și
 * că key este o cheie privată RSA.
 */
ctx = EVP_PKEY_CTX_new(key, eng);
if (!ctx)
    /* A apărut o eroare */
if (EVP_PKEY_decrypt_init(ctx) <= 0)
    /* Eroare */
if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING) <= 0)
    /* Eroare */
/* Determină lungimea memoriei tampon */
if (EVP_PKEY_decrypt(ctx, NULL, &outlen, in, inlen) <= 0)
    /* Eroare */
out = OPENSSL_malloc(outlen);
if (!out)
    /* Eșec malloc */
if (EVP_PKEY_decrypt(ctx, out, &outlen, in, inlen) <= 0)
    /* Eroare */
/* Datele decriptate sunt octeți outlen scrise în memoria tampon de ieșire */

EVP_PKEY_CTX_new(3), EVP_PKEY_encrypt(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_verify_recover(3), EVP_PKEY_derive(3)

Aceste funcții au fost adăugate în OpenSSL 1.0.0.

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