CMS_decrypt(3) Déchiffrer le contenu d'une structure CMS envelopedData

SYNOPSIS


#include <openssl/cms.h>
int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, BIO *dcont, BIO *out, unsigned int flags);

DESCRIPTION

CMS_decrypt() extrait et déchiffre le contenu d'une structure CMS EnvelopedData. pkey est la clef privée du destinataire, cert est le certificat du destinataire, out est un BIO pour y écrire le contenu et flags est un ensemble d'attributs facultatifs.

Le paramètre dcont est utilisé dans le rare cas où le contenu chiffré est détaché. Il sera normalement défini à NULL.

NOTES

OpenSSL_add_all_algorithms() (ou équivalent) devrait être appelée avant d'utiliser cette fonction, sinon des erreurs à propos d'algorithmes inconnus vont survenir.

Bien que le certificat des destinataires ne soit pas nécessaire pour déchiffrer les données, il est nécessaire pour localiser les (éventuellement nombreux) destinataires appropriés dans la structure CMS.

Si cert est défini à NULL, tous les destinataires possibles sont essayés. Ce cas est cependant problématique. Pour repousser l’attaque MMA (attaque de Bleichenbacher sur le remplissage RSA v1.5 de PKCS #1), tous les destinataires sont essayés qu’ils réussissent ou pas. Si aucun destinataire ne réussit, alors une clef symétrique aléatoire est utilisée pour déchiffrer le contenu : il n’en sort généralement rien d’intéressant et pourrait (mais ce n’est pas garanti) au final ne renvoyer qu’une erreur de remplissage. Si CMS_decrypt() ne renvoie qu’une erreur quand toutes les clefs chiffrées des destinataires ont échoué à déchiffrer, un attaquant pourrait utiliser cela dans une attaque temporelle. Si l’attribut spécial CMS_DEBUG_DECRYPT est défini, alors le comportement précédent est modifié et une erreur est renvoyée si aucune clef chiffrée de destinataire ne peut être déchiffrée sans générer de clef de chiffrement de contenu aléatoire. Les applications ne devrait utiliser cet attribut qu’avec d’extrêmes précautions, en particulier dans les passerelles automatisées, car cela peut les laisser ouvertes aux attaques.

Il est possible de déterminer la clef adéquate de destinataire par d'autres moyens (par exemple en les cherchant dans une base de données) et de les définir au préalable dans la structure CMS en utilisant des fonctions d'utilitaires CMS comme CMS_set1_pkey(). Dans ce cas, cert et pkey devraient tous deux être définis à NULL.

Pour traiter les types KEKRecipientInfo, CMS_set1_key() ou CMS_RecipientInfo_set0_key() et CMS_ReceipientInfo_decrypt() devraient être appelées avant CMS_decrypt() et cert et pkey être définis à NULL.

Les attributs suivants peuvent être passés dans le paramètre flags.

Si l'attribut CMS_TEXT est défini, les en-têtes MIME pour le type text/plain sont supprimés du contenu. Si le contenu n'est pas de type text/plain, alors une erreur est renvoyée.

VALEURS DE RETOUR

CMS_decrypt() renvoie 1 en cas de réussite et 0 en cas d'échec. L'erreur peut être obtenue à l'aide de ERR_get_error(3).

BOGUES

L'absence de traitement en une seule passe et la nécessité de garder toutes les données en mémoire, comme c'est mentionnée dans CMS_verify(), s'appliquent aussi à CMS_decrypt().

HISTORIQUE

CMS_decrypt() a été ajoutée dans OpenSSL 0.9.8

TRADUCTION

La traduction de cette page de manuel est maintenue par les membres de la liste <debian-l10n-french AT lists DOT debian DOT org>. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le paquet manpages-fr-extra.