+++ to secure your transactions use the Bitcoin Mixer Service +++

 

RFC3570 page - 15 - Housley

Groupe de travail Réseau

R. Housley

Request for Comments : 3370

RSA Laboratories

RFC rendues obsolètes : 2630, 3211

août 2002

Catégorie : En cours de normalisation

Traduction Claude Brière de L'Isle



Algorithmes de la syntaxe de message cryptographique (CMS)



Statut du présent mémoire

Le présent document spécifie un protocole Internet en cours de normalisation pour la communauté de l'Internet. Il appelle à la discussion et à des suggestions pour son amélioration. Prière de se référer à l'édition actuelle des "Normes officielles des protocoles de l'Internet" (STD 1) pour connaître l'état de normalisation et le statut de ce protocole. La distribution du présent mémoire n'est soumise à aucune restriction.


Notice de copyright Notice

Copyright (C) The Internet Society (2002). Tous droits réservés


Résumé

Le présent document décrit les conventions pour utiliser plusieurs algorithmes cryptographiques avec la syntaxe de message cryptographique (CMS, Cryptographic Message Syntax). La CMS est utilisée pour la signature numérique, le résumé, l'authentification, ou le chiffrement de contenus de messages arbitraires.


Table des matières

1. Introduction 1

1.1 Changements par rapport à la RFC2630 2

1.2 Terminologie 2

2. Algorithmes de résumé de message 2

2.1 SHA-1 2

2.2 MD5 2

3. Algorithmes de signature 3

3.1 DSA 3

3.2 RSA 3

4. Algorithmes de gestion de clé 4

4.1 Algorithmes d'accord de clé 4

4.2 Algorithmes de transport de clé 6

4.3 Algorithmes de clé symétrique de chiffrement de clé 6

4.4 Algorithmes de déduction de clé 8

5. Algorithmes de chiffrement du contenu 8

5.1 Triple-DES CBC 8

6. Algorithmes de code d'authentification de message 9

6.1 HMAC avec SHA-1 9

7. Module ASN.1 9

8. Références 11

9. Considérations pour la sécurité 12

10. Remerciements 14

11 Adresse de l'auteur 14

12. Déclaration complète de droits de reproduction 14


1. Introduction


La syntaxe de message cryptographique (CMS) [RFC3369] est utilisée pour signer numériquement, résumer, authentifier, ou chiffrer des contenus arbitraires de message. Cette spécification d'accompagnement décrit l'utilisation des algorithmes cryptographiques courants avec la CMS. Les mises en œuvre de la CMS peuvent prendre en charge ces algorithmes ; les mises en œuvre de la CMS peuvent aussi bien prendre en charge d'autres algorithmes. Cependant, si une mise en œuvre choisit de prendre en charge un des algorithmes exposés dans le présent document, cette mise en œuvre DOIT le faire comme décrit dans le présent document.


Les valeurs de CMS sont générées en utilisant l'ASN.1 [X.208-88], en utilisant le codage BER [X.209-88]. Les identifiants d'algorithme (qui incluent des identifiants d'objets ASN.1) identifient des algorithmes cryptographiques, et certains algorithmes exigent des paramètres supplémentaires. Lorsque nécessaire, les paramètres sont spécifiés avec une structure ASN.1. L'identifiant d'algorithme pour chaque algorithme est spécifié, et lorsque nécessaire, la structure du paramètre est spécifiée. Les champs dans la CMS employée par chaque algorithme sont identifiés.


1.1 Changements par rapport à la RFC2630


Le présent document rend obsolète la section 12 de la [RFC2630]. La [RFC3369] rend obsolète le reste de la RFC2630. La séparation des spécifications du protocole et de l'algorithme permet que chacun soit mis à jour sans avoir d'impact sur l'autre. Cependant, les conventions pour l'utilisation d'algorithmes supplémentaires avec la CMS seront vraisemblablement à spécifier dans d'autres documents.


1.2 Terminologie

Dans le présent document, les mots clés DOIT, NE DOIT PAS, EXIGE, DEVRAIT, NE DEVRAIT PAS, RECOMMANDE, et PEUT sont à interpréter comme décrit dans la [RFC2119].


2. Algorithmes de résumé de message


Cette section spécifie les conventions employées par les mises en œuvre de CMS qui prennent en charge SHA-1 ou MD5.


Les identifiants d'algorithme de résumé sont localisés dans le champ digestAlgorithms de SignedData, le champ digestAlgorithm de SignerInfo, le champ digestAlgorithm de DigestedData, et le champ digestAlgorithm de AuthenticatedData.


Les valeurs de résumé sont localisées dans le champ Résumé de DigestedData et dans l'attribut Authentifié du résumé de message. De plus, les valeurs de résultat sont des entrées des algorithmes de signature.


2.1 SHA-1

L'algorithme de résumé de message SHA-1 est défini dans la publication FIPS 180-1 [SHA1]. L'identifiant d'algorithme pour SHA-1 est :


IDENTIFIANT D’OBJET sha-1 ::= { iso(1) identified-organization(3) oiw(14) secsig(3) algorithm(2) 26 }


Il y a deux codages possibles pour le champ de paramètres AlgorithmIdentifier de SHA-1. L'alternative vient du fait que lorsque la syntaxe de 1988 pour AlgorithmIdentifier a été traduite dans la syntaxe de 1997, le FACULTATIF associé aux paramètres AlgorithmIdentifier a été perdu. Plus tard, le FACULTATIF a été récupéré suite à un rapport d'erreur, mais alors de nombreuses personnes pensaient que les paramètres de l'algorithme étaient obligatoires. À cause de cette histoire, certaines mises en œuvre codent les paramètres comme un élément NUL, et d'autres les omettent entièrement. Le codage correct est d'omettre le champ Paramètres ; cependant, les mises en œuvre DOIVENT aussi traiter un champ Paramètres de AlgorithmIdentifier de SHA-1 qui contient un NUL.


Le champ Paramètres de AlgorithmIdentifier est FACULTATIF. Si il est présent, le champ Paramètres DOIT contenir un NUL. Les mises en œuvre DOIVENT accepter les AlgorithmIdentifiers de SHA-1 avec Paramètres absent. Les mises en œuvre DOIVENT accepter les AlgorithmIdentifiers SHA-1 avec Paramètres à NUL. Les mises en œuvre DEVRAIENT générer le AlgorithmIdentifiers SHA-1 avec Paramètres absent.


2.2 MD5

L'algorithme de résumé de message MD5 est défini dans la [RFC1321]. L'identifiant d'algorithme pour MD5 est :


IDENTIFIANT D’OBJET md5 ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 5 }


Le champ Paramètres de AlgorithmIdentifier DOIT être présent, et le champ Paramètres DOIT contenir NUL. Les mises en œuvre PEUVENT accepter les AlgorithmIdentifier de MD5 avec Paramètres absent aussi bien que Paramètres NUL.


3. Algorithmes de signature


La présente section spécifie les conventions employées par les mises en œuvre de CMS qui prennent en charge DSA ou RSA (PKCS n° 1 v1.5).


Les identifiants d'algorithme de signature sont localisés dans le champ signatureAlgorithm de SignerInfo dans SignedData. Aussi, les identifiants d'algorithme de signature sont localisés dans le champ signatureAlgorithm de SignerInfo des attributs de contreseing.


Les valeurs de signature sont localisées dans le champ Signature de SignerInfo des SignedData. Aussi, les valeurs de signature sont localisées dans le champ Signature de SignerInfo des attributs de contreseing.


3.1 DSA

L'algorithme de signature DSA est défini dans la publication FIPS 186 [DSS]. DSA DOIT être utilisé avec l'algorithme de résumé de message SHA-1.


L'identifiant d'algorithme pour les clés publiques de sujet DSA dans les certificats est :


IDENTIFIANT D'OBJET id-dsa ::= { iso(1) member-body(2) us(840) x9-57 (10040) x9cm(4) 1 }


La validation de signature DSA exige trois paramètres, habituellement appelés p, q, et g. Lorsque l’identifiant d’algorithme id-dsa est utilisé, le champ de paramètres AlgorithmIdentifier est facultatif. S’il est présent, le champ de paramètres AlgorithmIdentifier DOIT contenir les trois valeurs de paramètre DSA codées en utilisant le type Dss-Parms. S’il est absent, la clé publique DSA sujette utilise les mêmes paramètres DSA que le producteur du certificat.


Dss-Parms ::= SEQUENCE {

p ENTIER,

q ENTIER,

g ENTIER }


Lorsque l’identifiant d’algorithme id-dsa est utilisé, la clé publique DSA, appelé commuément Y, DOIT être codée comme un ENTIER. Le résultat de ce codage est porté dans la clé publique de sujet de certificat.


Dss-Pub-Key ::= ENTIER -- Y


L’identifiant d’algorithme pour DSA avec les valeurs de signature SHA-1 est :


IDENTIFIANT D’OBJET id-dsa-with-sha1 ::= { iso(1) member-body(2) us(840) x9-57 (10040) x9cm(4) 3 }


Lorsque l’identifiant d’algorithme id-dsa-with-sha1 est utilisé, le champ Paramètres d’AlgorithmIdentifier DOIT être absent.


Lors de la signature, l’algorithme DSA génère deux valeurs, communément appelées r et s. Pour transférer ces deux valeurs comme une seule signature, elles DOIVENT être codées en utilisant le type Dss-Sig-Value :


Dss-Sig-Value ::= SEQUENCE {

r ENTIER,

s ENTIER }


3.2 RSA

L’algorithme de signature RSA (PKCS n° 1 v1.5) est défini dans la [RFC2437]. La RFC2437 spécifie l’utilisation de l’algorithme de signature RSA avec les algorithmes de résumé de message SHA-1 et MD5.


L’identifiant d’algorithme pour les clés publiques sujettes RSA dans les certificats est :


IDENTIFIANT D’OBJET rsaEncryption ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 1 }


Lorsque l’identifiant d’algorithme rsaEncryption est utilisé, le champ Paramètres AlgorithmIdentifier DOIT contenir NUL.


Lorsque l’identifiant d’algorithme rsaEncryption est utilisé, la clé publique RSA, qui est composée d’un module et d’un exposant public, DOIT être codée en utilisant le type RSAPublicKey. Le résultat de ce codage est porté dans la clé publique de sujet de certificat.


RSAPublicKey ::= SEQUENCE {

module ENTIER, -- n

publicExponent ENTIER } -- e


Les mises en œuvre de CMS qui incluent l’algorithme de signature RSA (PKCS n° 1 v1.5) DOIVENT aussi mettre en œuvre l’algorithme de résumé de message SHA-1. De telles mises en œuvre DEVRAIENT aussi prendre en charge l’algorithme de résumé de message MD5.


L’identifiant d’algorithme rsaEncryption est utilisé pour identifier les valeurs de signature RSA (PKCS n° 1 v1.5) sans considération de l’algorithme de résumé de message employé. Les mises en œuvre de CMS qui incluent l’algorithme de signature RSA (PKCS n° 1 v1.5) DOIVENT prendre en charge l’identifiant d’algorithme de valeur de signature rsaEncryption, et les mises en œuvre de CMS PEUVENT prendre en charge les identifiants d’algorithme de valeur de signature RSA (PKCS n° 1 v1.5) qui spécifient à la fois l’algorithme de signature RSA (PKCS n° 1 v1.5) et l’algorithme de résumé de message.


L’identifiant d’algorithme pour RSA (PKCS n° 1 v1.5) avec les valeurs de signature SHA-1 est :


IDENTIFIANT D’OBJET sha1WithRSAEncryption ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 5 }


L’identifiant d’algorithme pour RSA (PKCS n° 1 v1.5) avec les valeurs de signature MD5 est :


IDENTIFIANT D’OBJET md5WithRSAEncryption ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 4 }


Lorsque les identifiants d’algorithme de valeur de signature rsaEncryption, sha1WithRSAEncryption, ou md5WithRSAEncryption sont utilisés, le champ de paramètres AlgorithmIdentifier DOIT être NUL.


Lors de la signature, l’algorithme RSA génère une seule valeur, et cette valeur est utilisée directement comme valeur de signature.


4. Algorithmes de gestion de clé


CMS s’accommode des techniques générales de gestion de clés suivantes : accord de clé, transport de clé, clés de chiffrement de clés symétriques distribuées au préalable, et mots de passe.


4.1 Algorithmes d'accord de clé

Cette section spécifie les conventions employées par les mises en œuvre de CMS qui prennent en charge l’accord de clés en utilisant le Diffie-Hellman éphémère-statique X9.42 (X9.42 E-S D-H) et le Diffie-Hellman statique-statique X9.42 (X9.42 S-S D-H).


Lorsque un algorithme d’accord de clés est utilisé, un algorithme de chiffrement de clé est aussi nécessaire. Donc, lorsque l’accord de clé est pris en charge, un algorithme de chiffrement de clé DOIT être fourni pour chaque algorithme de chiffrement de contenu. Les algorithmes d’enveloppe de clé pour le Triple-DES et RC2 sont décrits dans la [RFC3217].


Pour l’accord de clé de clé de chiffrement de clés RC2, 128 bits DOIVENT être générés comme entrée au processus d’expansion de clé utilisé pour calculer la clé RC2 efficace [RFC2268].


Les identifiants d’algorithme d’accord de clé sont situés dans les champs EnvelopedData RecipientInfos KeyAgreeRecipientInfo keyEncryptionAlgorithm et AuthenticatedData RecipientInfos KeyAgreeRecipientInfo keyEncryptionAlgorithm.


Les identifiants d’algorithme d’enveloppe de clé sont situés dans les paramètres KeyWrapAlgorithm au sein des champs EnvelopedData RecipientInfos KeyAgreeRecipientInfo keyEncryptionAlgorithm et AuthenticatedData RecipientInfos KeyAgreeRecipientInfo keyEncryptionAlgorithm.


Les clés de chiffrement de contenu enveloppées sont situées dans le champ EnvelopedData RecipientInfos KeyAgreeRecipientInfo RecipientEncryptedKeys encryptedKey. Les clés d’authentification de message enveloppées sont situées dans le champ AuthenticatedData RecipientInfos KeyAgreeRecipientInfo RecipientEncryptedKeys encryptedKey.


4.1.1 Diffie-Hellman X9.42 éphémère-statique

L’accord de clé Diffie-Hellman éphémère-statique est défini dans la [RFC2631]. Lorsque on utilise le Diffie-Hellman éphémère-statique, le champ EnvelopedData RecipientInfos KeyAgreeRecipientInfo est utilisé comme suit :


version DOIT être 3.


originator DOIT être la solution originatorKey. Le champ d’algorithme originatorKey DOIT contenir l’identifiant d’objet dh-public-number avec les paramètres absents. Le champ originatorKey publicKey DOIT contenir la clé publique éphémère de l’envoyeur. L’identifiant d’objet dh-public-number est :


IDENTIFIANT D’OBJET dh-public-number ::= { iso(1) member-body(2) us(840) ansi-x942(10046) number-type(2) 1 }


ukm peut être présent ou absent. Les mises en œuvre de CMS DOIVENT accepter que ukm soit absent, et les mises en œuvre de CMS DEVRAIENT accepter que ukm soit présent. Lorsqu’il est présent, ukm est utilisé pour s’assurer qu’une clé de chiffrement de clé différente est générée lorsque la clé privée éphémère pourrait être utilisée plus d’une fois.


keyEncryptionAlgorithm DOIT être l’identifiant d’algorithme id-alg-ESDH. Le champ paramètre d’identifiant d’algorithme pour id-alg- ESDH est KeyWrapAlgorithm, et ce paramètre DOIT être présent. KeyWrapAlgorithm note l’algorithme de chiffrement symétrique utilisé pour chiffrer la clé de chiffrement de contenu avec la paire de clés de chiffrement de clé générée en utilisant l’algorithme d’accord de clés Diffie-Hellman éphémère-statique de X9.42. Les algorithmes Triple-DES et RC2 d’enveloppe de clé sont décrits dans la [RFC3217]. L’identifiant d’algorithme id-alg-ESDH et la syntaxe des paramètres sont :


IDENTIFIANT D’OBJET id-alg-ESDH ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 5 }


KeyWrapAlgorithm ::= AlgorithmIdentifier


recipientEncryptedKeys contient un identifiant et une clé chiffrée pour chaque receveur. RecipientEncryptedKey KeyAgreeRecipientIdentifier DOIT contenir soit le issuerAndSerialNumber qui identifie le certificat du receveur, soit le RecipientKeyIdentifier qui contient l’identifiant de clé de sujet provenant du certificat du receveur. Dans les deux cas, le certificat du receveur contient la clé publique statique du receveur. RecipientEncryptedKey EncryptedKey DOIT contenir la clé de chiffrement de contenu chiffrée avec la paire de clés de chiffrement de clé Diffie-Hellman éphémère-statique X9.42 générée en utilisant l’algorithme spécifié par KeyWrapAlgorithm.


4.1.2 Diffie-Hellman X9.42 statique-statique

L’accord de clé Diffie-Hellman statique-statique est défini dans la