CMS_DECRYPT(3ssl) OpenSSL CMS_DECRYPT(3ssl)

CMS_decrypt, CMS_decrypt_set1_pkey_and_peer, CMS_decrypt_set1_pkey, CMS_decrypt_set1_password - decriptarea conținutului dintr-o structură de date CMS envelopedData

#include <openssl/cms.h>
int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert,
                BIO *dcont, BIO *out, unsigned int flags);
int CMS_decrypt_set1_pkey_and_peer(CMS_ContentInfo *cms,
                EVP_PKEY *pk, X509 *cert, X509 *peer);
int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert);
int CMS_decrypt_set1_password(CMS_ContentInfo *cms,
                              unsigned char *pass, ossl_ssize_t passlen);

CMS_decrypt() extrage conținutul decriptat dintr-o structură CMS EnvelopedData sau AuthEnvelopedData. Utilizează CMS_decrypt_set1_pkey() pentru a decripta conținutul cu cheia privată a destinatarului pkey dacă pkey nu este NULL. În acest caz, se recomandă furnizarea certificatului asociat în cert - a se vedea NOTELE de mai jos. out este un BIO în care se scrie conținutul, iar flags este un set opțional de fanioane. Dacă pkey este NULL, funcția presupune că decriptarea a fost deja efectuată (de exemplu, utilizând CMS_decrypt_set1_pkey() sau CMS_decrypt_set1_password()) și furnizează doar conținutul, cu excepția cazului în care cert, dcont și out sunt, de asemenea, NULL. Parametrul dcont este utilizat în cazurile rare în care conținutul criptat este detașat. În mod normal, acesta va fi stabilit la NULL.

CMS_decrypt_set1_pkey_and_peer() decriptează structura CMS_ContentInfo cms utilizând cheia privată pkey, certificatul corespunzător cert, care este recomandat, dar poate fi NULL, și certificatul inițiatorului (opțional) peer. În caz de succes, înregistrează și în cms cheia de decriptare pkey, iar apoi ar trebui să urmeze "CMS_decrypt(cms, NULL, NULL, dcont, out, flags)". Această apelare eliberează orice cheie de decriptare stocată în cms.

CMS_decrypt_set1_pkey() este identică cu CMS_decrypt_set1_pkey_and_peer(), cu peer fiind NULL.

CMS_decrypt_set1_password() decriptează structura CMS_ContentInfo cms utilizând secretul pass cu lungimea passlen. Dacă operația are succes, înregistrează în cms cheia de decriptare utilizată, iar apoi trebuie urmată de "CMS_decrypt(cms, NULL, NULL, dcont, out, flags)". Această apelare eliberează orice cheie de decriptare stocată în cms.

Although the recipients certificate is not needed to decrypt the data it is needed to locate the appropriate (of possible several) recipients in the CMS structure.

Dacă cert este definit ca NULL, sunt încercați toți destinatarii posibili. Acest caz este însă problematic. Pentru a contracara atacul MMA (atacul lui Bleichenbacher asupra umplerii PKCS #1 v1.5 RSA), sunt încercați toți destinatarii, indiferent dacă reușesc sau nu. Dacă niciun destinatar nu reușește, se utilizează o cheie simetrică aleatorie pentru a decripta conținutul: acest lucru va genera de obicei date fără sens și poate (dar nu este garantat) să returneze în final doar o eroare de umplere. Dacă CMS_decrypt() a returnat doar o eroare atunci când toate cheile criptate ale destinatarilor nu au reușit să decripteze, un atacator ar putea utiliza acest lucru într-un atac de sincronizare. Dacă este activat fanionul special CMS_DEBUG_DECRYPT, comportamentul de mai sus este modificat și este returnată o eroare dacă nicio cheie criptată a destinatarului nu poate fi decriptată fără a genera o cheie aleatorie de criptare a conținutului. Aplicațiile ar trebui să utilizeze acest fanion cu extremă prudență, în special în cazul porților de acces automate, deoarece acestea pot fi expuse atacurilor.

Este posibil să se determine cheia corectă a destinatarului prin alte mijloace (de exemplu, căutându-le într-o bază de date) și definindu-le în avans în structura CMS utilizând funcțiile utilitare CMS, cum ar fi CMS_set1_pkey(), sau utilizând CMS_decrypt_set1_password() dacă destinatarul are o cheie simetrică. În aceste cazuri, atât cert cât și pkey trebuie definite ca NULL.

Pentru a procesa tipurile KEKRecipientInfo, CMS_set1_key() sau CMS_RecipientInfo_set0_key() și CMS_RecipientInfo_decrypt() trebuie apelate înainte de CMS_decrypt(), iar cert și pkey trebuie definite ca NULL.

Următoarele fanioane pot fi transmise în parametrul flags.

Dacă fanionul CMS_TEXT este activat, anteturile MIME pentru tipul "text/plain" sunt șterse din conținut. Dacă conținutul nu este de tip "text/plain", atunci este returnată o eroare.

CMS_decrypt(), CMS_decrypt_set1_pkey_and_peer(), CMS_decrypt_set1_pkey() și CMS_decrypt_set1_password() returnează fie 1 pentru succes, fie 0 pentru eșec. Eroarea poate fi obținută din ERR_get_error(3).

Partea set1_ din aceste nume de funcții este înșelătoare și ar trebui să se citească mai bine: with_.

Lipsa procesării într-o singură trecere și necesitatea de a păstra toate datele în memorie, așa cum se menționează în CMS_verify(), se aplică și în cazul CMS_decrypt().

ERR_get_error(3), CMS_encrypt(3)

CMS_decrypt_set1_pkey_and_peer() și CMS_decrypt_set1_password() au fost adăugate în OpenSSL 3.0.

Drepturi de autor 2008-2020 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