| rfc9690.original | rfc9690.txt | |||
|---|---|---|---|---|
| Limited Additional Mechanisms for PKIX and SMIME R. Housley | Internet Engineering Task Force (IETF) R. Housley | |||
| Internet-Draft Vigil Security | Request for Comments: 9690 Vigil Security | |||
| Obsoletes: 5990 (if approved) S. Turner | Obsoletes: 5990 S. Turner | |||
| Intended status: Standards Track sn3rd | Category: Standards Track sn3rd | |||
| Expires: 7 December 2024 5 June 2024 | ISSN: 2070-1721 February 2025 | |||
| Use of the RSA-KEM Algorithm in the Cryptographic Message Syntax (CMS) | Use of the RSA-KEM Algorithm in the Cryptographic Message Syntax (CMS) | |||
| draft-ietf-lamps-rfc5990bis-08 | ||||
| Abstract | Abstract | |||
| The RSA Key Encapsulation Mechanism (RSA-KEM) Algorithm is a one-pass | The RSA Key Encapsulation Mechanism (RSA-KEM) algorithm is a one-pass | |||
| (store-and-forward) cryptographic mechanism for an originator to | (store-and-forward) cryptographic mechanism for an originator to | |||
| securely send keying material to a recipient using the recipient's | securely send keying material to a recipient using the recipient's | |||
| RSA public key. The RSA-KEM Algorithm is specified in Clause 11.5 of | RSA public key. The RSA-KEM algorithm is specified in Clause 11.5 of | |||
| ISO/IEC: 18033-2:2006. This document specifies the conventions for | ISO/IEC: 18033-2:2006. This document specifies the conventions for | |||
| using the RSA-KEM Algorithm as a standalone KEM algorithm and the | using the RSA-KEM algorithm as a standalone KEM algorithm and the | |||
| conventions for using the RSA-KEM Algorithm with the Cryptographic | conventions for using the RSA-KEM algorithm with the Cryptographic | |||
| Message Syntax (CMS) using KEMRecipientInfo as specified in RFC XXXX. | Message Syntax (CMS) using KEMRecipientInfo as specified in RFC 9629. | |||
| This document obsoletes RFC 5990. | This document obsoletes RFC 5990. | |||
| RFC EDITOR: Please replace XXXX with the RFC number assigned to | ||||
| draft-ietf-lamps-cms-kemri. | ||||
| About This Document | ||||
| This note is to be removed before publishing as an RFC. | ||||
| Status information for this document may be found at | ||||
| https://datatracker.ietf.org/doc/draft-ietf-lamps-rfc5990bis/. | ||||
| Discussion of this document takes place on the Limited Additional | ||||
| Mechanisms for PKIX and SMIME Working Group mailing list | ||||
| (mailto:spasm@ietf.org), which is archived at | ||||
| https://mailarchive.ietf.org/arch/browse/spasm/. Subscribe at | ||||
| https://www.ietf.org/mailman/listinfo/spasm/. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 7 December 2024. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9690. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2025 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. RSA-KEM Algorithm Rationale . . . . . . . . . . . . . . . 3 | 1.1. RSA-KEM Algorithm Rationale | |||
| 1.2. RSA-KEM Algorithm Summary . . . . . . . . . . . . . . . . 4 | 1.2. RSA-KEM Algorithm Summary | |||
| 1.3. CMS KEMRecipientInfo Processing Summary . . . . . . . . . 5 | 1.3. CMS KEMRecipientInfo Processing Summary | |||
| 1.4. Conventions and Definitions . . . . . . . . . . . . . . . 6 | 1.4. Conventions and Definitions | |||
| 1.5. ASN.1 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 1.5. ASN.1 | |||
| 1.6. Changes Since RFC 5990 . . . . . . . . . . . . . . . . . 6 | 1.6. Changes Since RFC 5990 | |||
| 2. Use of the RSA-KEM Algorithm in CMS . . . . . . . . . . . . . 7 | 2. Use of the RSA-KEM Algorithm in CMS | |||
| 2.1. Mandatory To Implement . . . . . . . . . . . . . . . . . 7 | 2.1. Mandatory To Implement | |||
| 2.2. RecipientInfo Conventions . . . . . . . . . . . . . . . . 8 | 2.2. RecipientInfo Conventions | |||
| 2.3. Certificate Conventions . . . . . . . . . . . . . . . . . 8 | 2.3. Certificate Conventions | |||
| 2.4. SMIMECapabilities Attribute Conventions . . . . . . . . . 10 | 2.4. SMIMECapabilities Attribute Conventions | |||
| 3. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | 3. Security Considerations | |||
| 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 4. IANA Considerations | |||
| 5. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 5. References | |||
| 5.1. Normative References . . . . . . . . . . . . . . . . . . 13 | 5.1. Normative References | |||
| 5.2. Informative References . . . . . . . . . . . . . . . . . 15 | 5.2. Informative References | |||
| Appendix A. RSA-KEM Algorithm . . . . . . . . . . . . . . . . . 16 | Appendix A. RSA-KEM Algorithm | |||
| A.1. Originator's Operations: RSA-KEM Encapsulate() . . . . . 16 | A.1. Originator's Operations: RSA-KEM Encapsulate() | |||
| A.2. Recipient's Operations: RSA-KEM Decapsulate() . . . . . . 17 | A.2. Recipient's Operations: RSA-KEM Decapsulate() | |||
| Appendix B. ASN.1 Syntax . . . . . . . . . . . . . . . . . . . . 18 | Appendix B. ASN.1 Syntax | |||
| B.1. Underlying Components . . . . . . . . . . . . . . . . . . 18 | B.1. Underlying Components | |||
| B.2. ASN.1 Module . . . . . . . . . . . . . . . . . . . . . . 20 | B.2. ASN.1 Module | |||
| Appendix C. SMIMECapabilities Examples . . . . . . . . . . . . . 24 | Appendix C. SMIMECapabilities Examples | |||
| Appendix D. RSA-KEM CMS Enveloped-Data Example . . . . . . . . . 26 | Appendix D. RSA-KEM CMS Enveloped-Data Example | |||
| D.1. Originator RSA-KEM Encapsulate() Processing . . . . . . . 26 | D.1. Originator RSA-KEM Encapsulate() Processing | |||
| D.2. Originator CMS Processing . . . . . . . . . . . . . . . . 27 | D.2. Originator CMS Processing | |||
| D.3. Recipient RSA-KEM Decapsulate() Processing . . . . . . . 30 | D.3. Recipient RSA-KEM Decapsulate() Processing | |||
| D.4. Recipient CMS Processing . . . . . . . . . . . . . . . . 32 | D.4. Recipient CMS Processing | |||
| Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 33 | Acknowledgements | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 33 | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| The RSA Key Encapsulation Mechanism (RSA-KEM) Algorithm is a one-pass | The RSA Key Encapsulation Mechanism (RSA-KEM) algorithm is a one-pass | |||
| (store-and-forward) cryptographic mechanism for an originator to | (store-and-forward) cryptographic mechanism for an originator to | |||
| securely send keying material to a recipient using the recipient's | securely send keying material to a recipient using the recipient's | |||
| RSA public key. The RSA-KEM Algorithm is specified in Clause 11.5 of | RSA public key. The RSA-KEM algorithm is specified in Clause 11.5 of | |||
| [ISO18033-2]. | [ISO18033-2]. | |||
| The RSA-KEM Algorithm takes a different approach than other RSA key | The RSA-KEM algorithm takes a different approach than other RSA key | |||
| transport mechanisms [RFC8017], with the goal of providing higher | transport mechanisms [RFC8017] with the goal of providing higher | |||
| security assurance while also satisfying the KEM interface. The RSA- | security assurance while also satisfying the KEM interface. The RSA- | |||
| KEM Algorithm encrypts a random integer with the recipient's RSA | KEM algorithm encrypts a random integer with the recipient's RSA | |||
| public key, and derives a shared secret from the random integer. The | public key and derives a shared secret from the random integer. The | |||
| originator and recipient can derive a symmetric key from the shared | originator and recipient can derive a symmetric key from the shared | |||
| secret. For example, a key-encryption key can be derived from the | secret. For example, a key-encryption key (KEK) can be derived from | |||
| shared secret to wrap a content-encryption key. | the shared secret to wrap a content-encryption key (CEK). | |||
| In the Cryptographic Message Syntax (CMS) [RFC5652] using | In the Cryptographic Message Syntax (CMS) [RFC5652] using | |||
| KEMRecipientInfo [I-D.ietf-lamps-cms-kemri], the shared secret value | KEMRecipientInfo [RFC9629], the shared-secret value is input to a key | |||
| is input to a key-derivation function to compute a key-encryption | derivation function (KDF) to compute a key-encryption key and wrap a | |||
| key, and wrap a symmetric content-encryption key with the key- | symmetric content-encryption key with the key-encryption key. In | |||
| encryption key. In this way, the originator and the recipient end up | this way, the originator and the recipient end up with the same | |||
| with the same content-encryption key. | content-encryption key. | |||
| For completeness, a specification of the RSA-KEM Algorithm is given | For completeness, a specification of the RSA-KEM algorithm is given | |||
| in Appendix A of this document; ASN.1 syntax is given in Appendix B. | in Appendix A of this document. ASN.1 syntax is given in Appendix B. | |||
| 1.1. RSA-KEM Algorithm Rationale | 1.1. RSA-KEM Algorithm Rationale | |||
| The RSA-KEM Algorithm provides higher security assurance than other | The RSA-KEM algorithm provides higher security assurance than other | |||
| variants of the RSA cryptosystem for two reasons. First, the input | variants of the RSA cryptosystem for two reasons. First, the input | |||
| to the underlying RSA operation is a string-encoded random integer | to the underlying RSA operation is a string-encoded random integer | |||
| between 0 and n-1, where n is the RSA modulus, so it does not have | between 0 and n-1, where n is the RSA modulus, so it does not have | |||
| any structure that could be exploited by an adversary. Second, the | any structure that could be exploited by an adversary. Second, the | |||
| input is independent of the keying material so the result of the RSA | input is independent of the keying material, so the result of the RSA | |||
| decryption operation is not directly available to an adversary. As a | decryption operation is not directly available to an adversary. As a | |||
| result, the RSA-KEM Algorithm enjoys a "tight" security proof in the | result, the RSA-KEM algorithm enjoys a "tight" security proof in the | |||
| random oracle model. (In other padding schemes, such as PKCS #1 v1.5 | random oracle model. (In other padding schemes, such as PKCS #1 v1.5 | |||
| [RFC8017], the input has structure and/or depends on the keying | [RFC8017], the input has structure and depends on the keying | |||
| material, and the provable security assurances are not as strong.) | material. Additionally, the provable security assurances are not as | |||
| strong.) | ||||
| The approach is also architecturally convenient because the public- | The approach is also architecturally convenient because the public- | |||
| key operations are separate from the symmetric operations on the | key operations are separate from the symmetric operations on the | |||
| keying material. Another benefit is that the length of the keying | keying material. Another benefit is that the length of the keying | |||
| material is determined by the symmetric algorithms, not the size of | material is determined by the symmetric algorithms, not the size of | |||
| the RSA modulus. | the RSA modulus. | |||
| 1.2. RSA-KEM Algorithm Summary | 1.2. RSA-KEM Algorithm Summary | |||
| All KEM algorithms provide three functions: KeyGen(), Encapsulate(), | All KEM algorithms provide three functions: KeyGen(), Encapsulate(), | |||
| and Decapsulate(). | and Decapsulate(). | |||
| The following summarizes these three functions for RSA-KEM: | The following summarizes these three functions for the RSA-KEM | |||
| algorithm: | ||||
| KeyGen() -> (pk, sk): | KeyGen() -> (pk, sk): | |||
| Generate the public key (pk) and a private key (sk) as described | Generate the public key (pk) and a private key (sk) as described | |||
| in Section 3 of [RFC8017]. | in Section 3 of [RFC8017]. | |||
| Encapsulate(pk) -> (ct, SS): | Encapsulate(pk) -> (ct, SS): | |||
| Given the recipient's public key (pk), produce a ciphertext (ct) | Given the recipient's public key (pk), produce a ciphertext (ct) | |||
| to be passed to the recipient and a shared secret (SS) for use by | to be passed to the recipient and a shared secret (SS) for use by | |||
| the originator, as follows: | the originator as follows: | |||
| 1. Generate a random integer z between 0 and n-1. | 1. Generate a random integer z between 0 and n-1. | |||
| 2. Encrypt the integer z with the recipient's RSA public key to | 2. Encrypt the integer z with the recipient's RSA public key to | |||
| obtain the ciphertext: | obtain the ciphertext: | |||
| ct = z^e mod n | ct = z^e mod n | |||
| 3. Derive a shared secret from the integer z using a Key | 3. Derive a shared secret from the integer z using a Key | |||
| Derivation Function (KDF): | Derivation Function (KDF): | |||
| SS = KDF(Z, ssLen) | SS = KDF(Z, ssLen) | |||
| 4. The ciphertext and the shared secret are returned by the | 4. The ciphertext and the shared secret are returned by the | |||
| function. The originator sends the ciphertext to the recipient. | function. The originator sends the ciphertext to the | |||
| recipient. | ||||
| Decapsulate(sk, ct) -> SS: | Decapsulate(sk, ct) -> SS: | |||
| Given the private key (sk) and the ciphertext (ct), produce the | Given the private key (sk) and the ciphertext (ct), produce the | |||
| shared secret (SS) for the recipient as follows: | shared secret (SS) for the recipient as follows: | |||
| 1. Decrypt the ciphertext with the recipient's RSA private key to | 1. Decrypt the ciphertext with the recipient's RSA private key to | |||
| obtain the random integer z: | obtain the random integer z: | |||
| z = ct^d mod n | z = ct^d mod n | |||
| 2. Derive a shared secret from the integer z: | 2. Derive a shared secret from the integer z: | |||
| SS = KDF(Z, ssLen) | SS = KDF(Z, ssLen) | |||
| 3. The shared secret is returned by the function. | 3. The shared secret is returned by the function. | |||
| 1.3. CMS KEMRecipientInfo Processing Summary | 1.3. CMS KEMRecipientInfo Processing Summary | |||
| To support the RSA-KEM algorithm, the CMS originator MUST implement | To support the RSA-KEM algorithm, the CMS originator MUST implement | |||
| Encapsulate(). | Encapsulate(). | |||
| Given a content-encryption key CEK, the RSA-KEM Algorithm processing | Given a content-encryption key CEK, the RSA-KEM algorithm processing | |||
| by the originator to produce the values that are carried in the CMS | by the originator to produce the values that are carried in the CMS | |||
| KEMRecipientInfo can be summarized as: | KEMRecipientInfo can be summarized as follows: | |||
| 1. Obtain the shared secret using the Encapsulate() function of | 1. Obtain the shared secret using the Encapsulate() function of the | |||
| the RSA-KEM algorithm and the recipient's RSA public key: | RSA-KEM algorithm and the recipient's RSA public key: | |||
| (ct, SS) = Encapsulate(pk) | (ct, SS) = Encapsulate(pk) | |||
| 2. Derive a key-encryption key KEK from the shared secret: | 2. Derive a key-encryption key KEK from the shared secret: | |||
| KEK = KDF(SS, kekLength, otherInfo) | KEK = KDF(SS, kekLength, otherInfo) | |||
| 3. Wrap the CEK with the KEK to obtain wrapped keying material | 3. Wrap the CEK with the KEK to obtain wrapped keying material WK: | |||
| WK: | ||||
| WK = WRAP(KEK, CEK) | WK = WRAP(KEK, CEK) | |||
| 4. The originator sends the ciphertext and WK to the recipient in | 4. The originator sends the ciphertext and WK to the recipient in | |||
| the CMS KEMRecipientInfo structure. | the CMS KEMRecipientInfo structure. | |||
| To support the RSA-KEM algorithm, the CMS recipient MUST implement | To support the RSA-KEM algorithm, the CMS recipient MUST implement | |||
| Decapsulate(). | Decapsulate(). | |||
| The RSA-KEM algorithm recipient processing of the values obtained | The RSA-KEM algorithm recipient processing of the values obtained | |||
| from the KEMRecipientInfo structure can be summarized as: | from the KEMRecipientInfo structure is summarized as follows: | |||
| 1. Obtain the shared secret using the Decapsulate() function of | 1. Obtain the shared secret using the Decapsulate() function of the | |||
| the RSA-KEM algorithm and the recipient's RSA private key: | RSA-KEM algorithm and the recipient's RSA private key: | |||
| SS = Decapsulate(sk, ct) | SS = Decapsulate(sk, ct) | |||
| 2. Derive a key-encryption key KEK from the shared secret: | 2. Derive a key-encryption key KEK from the shared secret: | |||
| KEK = KDF(SS, kekLength, otherInfo) | KEK = KDF(SS, kekLength, otherInfo) | |||
| 3. Unwrap the WK with the KEK to obtain content-encryption key | 3. Unwrap the WK with the KEK to obtain the content-encryption key | |||
| CEK: | CEK: | |||
| CEK = UNWRAP(KEK, WK) | CEK = UNWRAP(KEK, WK) | |||
| Note that the KDF used to process the KEMRecipientInfo structure MAY | Note that the KDF used to process the KEMRecipientInfo structure MAY | |||
| be different from the KDF used to derive the shared secret in the | be different from the KDF used to derive the shared secret in the | |||
| RSA-KEM algorithm. | RSA-KEM algorithm. | |||
| 1.4. Conventions and Definitions | 1.4. Conventions and Definitions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| skipping to change at page 6, line 31 ¶ | skipping to change at line 247 ¶ | |||
| 1.5. ASN.1 | 1.5. ASN.1 | |||
| CMS values are generated using ASN.1 [X.680], which uses the Basic | CMS values are generated using ASN.1 [X.680], which uses the Basic | |||
| Encoding Rules (BER) and the Distinguished Encoding Rules (DER) | Encoding Rules (BER) and the Distinguished Encoding Rules (DER) | |||
| [X.690]. | [X.690]. | |||
| 1.6. Changes Since RFC 5990 | 1.6. Changes Since RFC 5990 | |||
| RFC 5990 [RFC5990] specified the conventions for using the RSA-KEM | RFC 5990 [RFC5990] specified the conventions for using the RSA-KEM | |||
| Algorithm in CMS as a key transport algorithm. That is, it used | algorithm in CMS as a key transport algorithm. That is, it used | |||
| KeyTransRecipientInfo [RFC5652] for each recipient. Since the | KeyTransRecipientInfo [RFC5652] for each recipient. Since the | |||
| publication of RFC 5990, a new KEMRecipientInfo structure | publication of RFC 5990, a new KEMRecipientInfo structure [RFC9629] | |||
| [I-D.ietf-lamps-cms-kemri] has been defined to support KEM | has been defined to support KEM algorithms. When the id-rsa-kem | |||
| algorithms. When the id-rsa-kem algorithm identifier appears in the | algorithm identifier appears in the SubjectPublicKeyInfo field of a | |||
| SubjectPublicKeyInfo field of a certificate, the complex parameter | certificate, the complex parameter structure defined in RFC 5990 can | |||
| structure defined in RFC 5990 can be omitted; however, the parameters | be omitted; however, the parameters are allowed for backward | |||
| are allowed for backward compatibility. Also, to avoid visual | compatibility. Also, to avoid visual confusion with id-kem-rsa, | |||
| confusion with id-kem-rsa, id-rsa-kem-spki is introduced as an alias | id-rsa-kem-spki is introduced as an alias for id-rsa-kem. | |||
| for id-rsa-kem. | ||||
| RFC 5990 used EK as the EncryptedKey, which is the concatenation of | RFC 5990 used EK as the EncryptedKey, which is the concatenation of | |||
| the ciphertext C and the wrapped key WK, EK = (C || WK). The use of | the ciphertext C and the wrapped key WK, EK = (C || WK). The use of | |||
| EK was necessary to align with the KeyTransRecipientInfo structure. | EK was necessary to align with the KeyTransRecipientInfo structure. | |||
| In this document, the ciphertext and the wrapped key are sent in | In this document, the ciphertext and the wrapped key are sent in | |||
| separate fields of the KEMRecipientInfo structure. In particular, | separate fields of the KEMRecipientInfo structure. In particular, | |||
| the ciphertext is carried in the kemct field, and wrapped key is | the ciphertext is carried in the kemct field, and the wrapped key is | |||
| carried in the encryptedKey field. See Appendix A for details about | carried in the encryptedKey field. See Appendix A for details about | |||
| the computation of the ciphertext. | the computation of the ciphertext. | |||
| RFC 5990 included support for Camellia and Triple-DES block ciphers; | RFC 5990 included support for Camellia and Triple-DES block ciphers; | |||
| discussion of these block ciphers is removed from this document, but | discussion of these block ciphers does not appear in this document, | |||
| the algorithm identifiers remain in the ASN.1 Module Appendix B.2. | but the algorithm identifiers remain in the ASN.1 module (see | |||
| Appendix B.2). | ||||
| RFC 5990 included support for SHA-1 hash function; discussion of this | RFC 5990 included support for SHA-1 hash function; discussion of this | |||
| hash function is removed from this document, but the algorithm | hash function does not appear this document, but the algorithm | |||
| identifier remains in the ASN.1 module Appendix B.2. | identifier remains in the ASN.1 module (see Appendix B.2). | |||
| RFC 5990 required support for the KDF3 key-derivation function | RFC 5990 required support for the KDF3 key derivation function | |||
| [ANS-X9.44]; this document continues to require support for the KDF3 | [ANS-X9.44]; this document continues to require support for the KDF3 | |||
| key-derivation function, but it requires support for SHA-256 [SHS] as | key derivation function, but it requires support for SHA-256 [SHS] as | |||
| the hash function. | the hash function. | |||
| RFC 5990 recommended support for alternatives to KDF3 and AES-Wrap- | RFC 5990 recommended support for alternatives to KDF3 and AES-Wrap- | |||
| 128; this document simply states that other key-derivation functions | 128; this document simply states that other key derivation functions | |||
| and other key-encryption algorithms MAY be supported. | and other key-encryption algorithms MAY be supported. | |||
| RFC 5990 supported the future definition of additional KEM algorithms | RFC 5990 supported the future definition of additional KEM algorithms | |||
| that use RSA; this document supports only one, and it is identified | that use RSA; this document supports only one, and it is identified | |||
| by the id-kem-rsa object identifier. | by the id-kem-rsa object identifier. | |||
| RFC 5990 included an ASN.1 module; this document provides an | RFC 5990 included an ASN.1 module; this document provides an | |||
| alternative ASN.1 module that follows the conventions established in | alternative ASN.1 module that follows the conventions established in | |||
| [RFC5911], [RFC5912], and [RFC6268]. The new ASN.1 module | [RFC5911], [RFC5912], and [RFC6268]. The new ASN.1 module | |||
| Appendix B.2 produces the same bits-on-the-wire as the one in RFC | (Appendix B.2) produces the same bits-on-the-wire as the one in RFC | |||
| 5990. | 5990. | |||
| 2. Use of the RSA-KEM Algorithm in CMS | 2. Use of the RSA-KEM Algorithm in CMS | |||
| The RSA-KEM Algorithm MAY be employed for one or more recipients in | The RSA-KEM algorithm MAY be employed for one or more recipients in | |||
| the CMS enveloped-data content type [RFC5652], the CMS authenticated- | the CMS enveloped-data content type [RFC5652], the CMS authenticated- | |||
| data content type [RFC5652], or the CMS authenticated-enveloped-data | data content type [RFC5652], or the CMS authenticated-enveloped-data | |||
| content type [RFC5083]. In each case, the KEMRecipientInfo | content type [RFC5083]. In each case, the KEMRecipientInfo [RFC9629] | |||
| [I-D.ietf-lamps-cms-kemri] is used with the RSA-KEM Algorithm to | is used with the RSA-KEM algorithm to securely transfer the content- | |||
| securely transfer the content-encryption key from the originator to | encryption key from the originator to the recipient. | |||
| the recipient. | ||||
| 2.1. Mandatory To Implement | 2.1. Mandatory To Implement | |||
| A CMS implementation that supports the RSA-KEM Algorithm MUST support | A CMS implementation that supports the RSA-KEM algorithm MUST support | |||
| at least the following underlying components: | at least the following underlying components: | |||
| * For the key-derivation function, an implementation MUST support | * For the key derivation function, an implementation MUST support | |||
| KDF3 [ANS-X9.44] with SHA-256 [SHS]. | KDF3 [ANS-X9.44] with SHA-256 [SHS]. | |||
| * For key-wrapping, an implementation MUST support the AES-Wrap-128 | * For key-wrapping, an implementation MUST support the AES-Wrap-128 | |||
| [RFC3394] key-encryption algorithm. | [RFC3394] key-encryption algorithm. | |||
| An implementation MAY also support other key-derivation functions and | An implementation MAY also support other key derivation functions and | |||
| other key-encryption algorithms as well. | other key-encryption algorithms. | |||
| 2.2. RecipientInfo Conventions | 2.2. RecipientInfo Conventions | |||
| When the RSA-KEM Algorithm is employed for a recipient, the | When the RSA-KEM algorithm is employed for a recipient, the | |||
| RecipientInfo alternative for that recipient MUST be | RecipientInfo alternative for that recipient MUST be | |||
| OtherRecipientInfo using the KEMRecipientInfo structure | OtherRecipientInfo using the KEMRecipientInfo structure [RFC9629]. | |||
| [I-D.ietf-lamps-cms-kemri]. The fields of the KEMRecipientInfo MUST | The fields of the KEMRecipientInfo MUST have the following values: | |||
| have the following values: | ||||
| version is the syntax version number; it MUST be 0. | * version is the syntax version number; it MUST be 0. | |||
| rid identifies the recipient's certificate or public key. | * rid identifies the recipient's certificate or public key. | |||
| kem identifies the KEM algorithm; it MUST contain id-kem-rsa. | * kem identifies the KEM algorithm; it MUST contain id-kem-rsa. | |||
| kemct is the ciphertext produced for this recipient; it contains C | * kemct is the ciphertext produced for this recipient; it contains C | |||
| from steps 1 and 2 of Originator's Operations in Appendix A. | from steps 1 and 2 of Originator's Operations in Appendix A. | |||
| kdf identifies the key-derivation function (KDF). Note that the | * kdf identifies the key derivation function (KDF). Note that the | |||
| KDF used for CMS RecipientInfo process MAY be different than the | KDF used for CMS RecipientInfo process MAY be different than the | |||
| KDF used within the RSA-KEM Algorithm. | KDF used within the RSA-KEM algorithm. | |||
| kekLength is the size of the key-encryption key in octets. | * kekLength is the size of the key-encryption key in octets. | |||
| ukm is an optional random input to the key-derivation function. | * ukm is an optional random input to the key derivation function. | |||
| wrap identifies a key-encryption algorithm used to encrypt the | * wrap identifies a key-encryption algorithm used to encrypt the | |||
| keying material. | keying material. | |||
| encryptedKey is the result of encrypting the keying material with | * encryptedKey is the result of encrypting the keying material with | |||
| the key-encryption key. When used with the CMS enveloped-data | the key-encryption key. When used with the CMS enveloped-data | |||
| content type [RFC5652], the keying material is a content- | content type [RFC5652], the keying material is a content- | |||
| encryption key. When used with the CMS authenticated-data content | encryption key. When used with the CMS authenticated-data content | |||
| type [RFC5652], the keying material is a message-authentication | type [RFC5652], the keying material is a message-authentication | |||
| key. When used with the CMS authenticated-enveloped-data content | key. When used with the CMS authenticated-enveloped-data content | |||
| type [RFC5083], the keying material is a content-authenticated- | type [RFC5083], the keying material is a content-authenticated- | |||
| encryption key. | encryption key (CAEK). | |||
| NOTE: For backward compatibility, implementations MAY also support | NOTE: For backward compatibility, implementations MAY also support | |||
| RSA-KEM Key Transport Algorithm, identified by id-rsa-kem-spki, which | the RSA-KEM Key Transport algorithm, identified by id-rsa-kem-spki, | |||
| uses KeyTransRecipientInfo as specified in [RFC5990]. | which uses KeyTransRecipientInfo as specified in [RFC5990]. | |||
| 2.3. Certificate Conventions | 2.3. Certificate Conventions | |||
| The conventions specified in this section augment RFC 5280 [RFC5280]. | The conventions specified in this section augment RFC 5280 [RFC5280]. | |||
| A recipient who employs the RSA-KEM Algorithm MAY identify the public | A recipient who employs the RSA-KEM algorithm MAY identify the public | |||
| key in a certificate by the same AlgorithmIdentifier as for the PKCS | key in a certificate by the same AlgorithmIdentifier as for PKCS #1 | |||
| #1 v1.5 algorithm, that is, using the rsaEncryption object identifier | v1.5, that is, using the rsaEncryption object identifier [RFC8017]. | |||
| [RFC8017]. The fact that the recipient will accept RSA-KEM with this | The fact that the recipient will accept the RSA-KEM algorithm with | |||
| public key is not indicated by the use of this object identifier. | this public key is not indicated by the use of this object | |||
| The willingness to accept the RSA-KEM Algorithm MAY be signaled by | identifier. The willingness to accept the RSA-KEM algorithm MAY be | |||
| the use of the SMIMECapabilities Attribute as specified in | signaled by the use of the SMIMECapabilities Attribute as specified | |||
| Section 2.5.2. of [RFC8551] or the SMIMECapabilities certificate | in Section 2.5.2 of [RFC8551] or the SMIMECapabilities certificate | |||
| extension as specified in [RFC4262]. | extension as specified in [RFC4262]. | |||
| If the recipient wishes only to employ the RSA-KEM Algorithm with a | If the recipient wishes only to employ the RSA-KEM algorithm with a | |||
| given public key, the recipient MUST identify the public key in the | given public key, the recipient MUST identify the public key in the | |||
| certificate using the id-rsa-kem-spki object identifier; see | certificate using the id-rsa-kem-spki object identifier; see | |||
| Appendix B. The use of the id-rsa-kem-spki object identifier allows | Appendix B. The use of the id-rsa-kem-spki object identifier allows | |||
| certificates that were issued to be compatible with RSA-KEM Key | certificates that were issued to be compatible with the RSA-KEM Key | |||
| Transport to also be used with this specification. When the id-rsa- | Transport algorithm to also be used with this specification. When | |||
| kem-spki object identifier appears in the SubjectPublicKeyInfo | the id-rsa-kem-spki object identifier appears in the | |||
| algorithm field of the certificate, the parameters field from | SubjectPublicKeyInfo algorithm field of the certificate, the | |||
| AlgorithmIdentifier SHOULD be absent. That is, the | parameters field from AlgorithmIdentifier SHOULD be absent. That is, | |||
| AlgorithmIdentifier SHOULD be a SEQUENCE of one component, the id- | the AlgorithmIdentifier SHOULD be a SEQUENCE of one component, the | |||
| rsa-kem-spki object identifier. With absent parameters, the KDF3 | id-rsa-kem-spki object identifier. With absent parameters, the KDF3 | |||
| key-derivation function [ANS-X9.44] with SHA-256 [SHS] are used to | key derivation function [ANS-X9.44] with SHA-256 [SHS] are used to | |||
| derive the shared secret. | derive the shared secret. | |||
| When the AlgorithmIdentifier parameters are present, the | When the AlgorithmIdentifier parameters are present, the | |||
| GenericHybridParameters MUST be used. Within the kem element, the | GenericHybridParameters MUST be used. Within the kem element, the | |||
| algorithm identifier MUST be set to id-kem-rsa, and RsaKemParameters | algorithm identifier MUST be set to id-kem-rsa, and RsaKemParameters | |||
| MUST be included. As described in Section 2.4, the | MUST be included. As described in Section 2.4, the | |||
| GenericHybridParameters constrain the values that can be used with | GenericHybridParameters constrain the values that can be used with | |||
| the RSA public key for the kdf, kekLength, and wrap fields of the | the RSA public key for the kdf, kekLength, and wrap fields of the | |||
| KEMRecipientInfo structure. | KEMRecipientInfo structure. | |||
| skipping to change at page 10, line 6 ¶ | skipping to change at line 408 ¶ | |||
| The intended application for the public key MAY be indicated in the | The intended application for the public key MAY be indicated in the | |||
| key usage certificate extension as specified in Section 4.2.1.3 of | key usage certificate extension as specified in Section 4.2.1.3 of | |||
| [RFC5280]. If the keyUsage extension is present in a certificate | [RFC5280]. If the keyUsage extension is present in a certificate | |||
| that conveys an RSA public key with the id-rsa-kem-spki object | that conveys an RSA public key with the id-rsa-kem-spki object | |||
| identifier as discussed above, then the key usage extension MUST | identifier as discussed above, then the key usage extension MUST | |||
| contain only the following value: | contain only the following value: | |||
| keyEncipherment | keyEncipherment | |||
| Other keyUsage extension values MUST NOT be present. That is, a | Other keyUsage extension values MUST NOT be present. That is, a | |||
| public key intended to be employed only with the RSA-KEM Algorithm | public key intended to be employed only with the RSA-KEM algorithm | |||
| MUST NOT also be employed for data encryption or for digital | MUST NOT also be employed for data encryption or for digital | |||
| signatures. Good cryptographic practice employs a given RSA key pair | signatures. Good cryptographic practice employs a given RSA key pair | |||
| in only one scheme. This practice avoids the risk that vulnerability | in only one scheme. This practice avoids the risk that vulnerability | |||
| in one scheme may compromise the security of the other, and may be | in one scheme may compromise the security of the other and may be | |||
| essential to maintain provable security. | essential to maintain provable security. | |||
| 2.4. SMIMECapabilities Attribute Conventions | 2.4. SMIMECapabilities Attribute Conventions | |||
| Section 2.5.2 of [RFC8551] defines the SMIMECapabilities attribute to | Section 2.5.2 of [RFC8551] defines the SMIMECapabilities attribute to | |||
| announce a partial list of algorithms that an S/MIME implementation | announce a partial list of algorithms that an S/MIME implementation | |||
| can support. When constructing a CMS signed-data content type | can support. When constructing a CMS signed-data content type | |||
| [RFC5652], a compliant implementation MAY include the | [RFC5652], a compliant implementation MAY include the | |||
| SMIMECapabilities attribute that announces support for the RSA-KEM | SMIMECapabilities attribute that announces support for the RSA-KEM | |||
| Algorithm. | algorithm. | |||
| The SMIMECapability SEQUENCE representing the RSA-KEM Algorithm MUST | The SMIMECapability SEQUENCE representing the RSA-KEM algorithm MUST | |||
| include the id-rsa-kem-spki object identifier in the capabilityID | include the id-rsa-kem-spki object identifier in the capabilityID | |||
| field; see Appendix B for the object identifier value, and see | field; see Appendix B for the object identifier value and Appendix C | |||
| Appendix C for examples. When the id-rsa-kem-spki object identifier | for examples. When the id-rsa-kem-spki object identifier appears in | |||
| appears in the capabilityID field and the parameters are present, | the capabilityID field and the parameters are present, then the | |||
| then the parameters field MUST use the GenericHybridParameters type. | parameters field MUST use the GenericHybridParameters type. | |||
| GenericHybridParameters ::= SEQUENCE { | GenericHybridParameters ::= SEQUENCE { | |||
| kem KeyEncapsulationMechanism, | kem KeyEncapsulationMechanism, | |||
| dem DataEncapsulationMechanism } | dem DataEncapsulationMechanism } | |||
| The fields of the GenericHybridParameters type have the following | The fields of the GenericHybridParameters type have the following | |||
| meanings: | meanings: | |||
| kem is an AlgorithmIdentifer. The algorithm field MUST be set to | * kem is an AlgorithmIdentifer. The algorithm field MUST be set to | |||
| id-kem-rsa, and the parameters field MUST be RsaKemParameters, | id-kem-rsa, and the parameters field MUST be RsaKemParameters, | |||
| which is a SEQUENCE of an AlgorithmIdentifier that identifies the | which is a SEQUENCE of an AlgorithmIdentifier that identifies the | |||
| supported key-derivation function and a positive INTEGER that | supported key derivation function and a positive INTEGER that | |||
| identifies the length of the key-encryption key in octets. | identifies the length of the key-encryption key in octets. | |||
| dem is an AlgorithmIdentifier. The algorithm field MUST be | * dem is an AlgorithmIdentifier. The algorithm field MUST be | |||
| present, and it identifies the key-encryption algorithm. The | present, and it identifies the key-encryption algorithm. The | |||
| parameters are optional. If the GenericHybridParameters are | parameters are optional. If the GenericHybridParameters are | |||
| present, then the provided dem value MUST be used in the wrap | present, then the provided dem value MUST be used in the wrap | |||
| field of KEMRecipientInfo. | field of KEMRecipientInfo. | |||
| If the GenericHybridParameters are present, then the provided kem | If the GenericHybridParameters are present, then the provided kem | |||
| value MUST be used as the key-derivation function in the kdf field of | value MUST be used as the key derivation function in the kdf field of | |||
| KEMRecipientInfo, and the provided key length MUST be used in the | KEMRecipientInfo and the provided key length MUST be used in the | |||
| kekLength of KEMRecipientInfo. | kekLength of KEMRecipientInfo. | |||
| 3. Security Considerations | 3. Security Considerations | |||
| The RSA-KEM Algorithm should be considered as a replacement for the | The RSA-KEM algorithm should be considered as a replacement for the | |||
| key transport portion of the widely implemented PKCS #1 v1.5 | key transport portion of the widely implemented PKCS #1 v1.5 | |||
| [RFC8017] for new applications that use CMS to avoid potential | [RFC8017] for new applications that use CMS to avoid potential | |||
| vulnerabilities to chosen-ciphertext attacks and gain a tighter | vulnerabilities to chosen-ciphertext attacks and gain a tighter | |||
| security proof; however, the RSA-KEM Algorithm has the disadvantage | security proof. However, the RSA-KEM algorithm has the disadvantage | |||
| of slightly longer encrypted keying material. With PKCS #1 v1.5, the | of slightly longer encrypted keying material. With PKCS #1 v1.5, the | |||
| originator encrypts the key-encryption key directly with the | originator encrypts the key-encryption key directly with the | |||
| recipient's RSA public key. With the RSA-KEM, the key-encryption key | recipient's RSA public key. With the RSA-KEM algorithm, the key- | |||
| is encrypted separately. | encryption key is encrypted separately. | |||
| The security of the RSA-KEM Algorithm can be shown to be tightly | The security of the RSA-KEM algorithm can be shown to be tightly | |||
| related to the difficulty of either solving the RSA problem, or | related to the difficulty of either solving the RSA problem or | |||
| breaking the underlying symmetric key-encryption algorithm, if the | breaking the underlying symmetric key-encryption algorithm if the | |||
| underlying key-derivation function is modeled as a random oracle, and | underlying key derivation function is modeled as a random oracle, | |||
| assuming that the symmetric key-encryption algorithm satisfies the | assuming that the symmetric key-encryption algorithm satisfies the | |||
| properties of a data encapsulation mechanism [SHOUP]. While in | properties of a data encapsulation mechanism [SHOUP]. While in | |||
| practice a random-oracle result does not provide an actual security | practice a random-oracle result does not provide an actual security | |||
| proof for any particular key-derivation function, the result does | proof for any particular key derivation function, the result does | |||
| provide assurance that the general construction is reasonable; a key- | provide assurance that the general construction is reasonable; a key | |||
| derivation function would need to be particularly weak to lead to an | derivation function would need to be particularly weak to lead to an | |||
| attack that is not possible in the random-oracle model. | attack that is not possible in the random-oracle model. | |||
| The RSA key size and the underlying components need to be selected | The RSA key size and the underlying components need to be selected | |||
| consistent with the desired security level. Several security levels | consistent with the desired security level. Several security levels | |||
| have been identified in the NIST SP 800-57 Part 1 | have been identified in the NIST SP 800-57 Part 1 | |||
| [NISTSP800-57pt1r5]. For example, one way to achieve 128-bit | [NISTSP800-57pt1r5]. For example, one way to achieve 128-bit | |||
| security, the RSA key size would be at least 3072 bits, the key- | security, the RSA key size would be at least 3072 bits, the key | |||
| derivation function would be SHA-256, and the symmetric key- | derivation function would be SHA-256, and the symmetric key- | |||
| encryption algorithm would be AES Key Wrap with a 128-bit key. | encryption algorithm would be AES Key Wrap with a 128-bit key. | |||
| Implementations MUST protect the RSA private key, the key-encryption | Implementations MUST protect the RSA private key, the key-encryption | |||
| key, the content-encryption key, message-authentication key, and the | key, the content-encryption key, message-authentication key, and the | |||
| content-authenticated-encryption key. Disclosure of the RSA private | content-authenticated-encryption key. Disclosure of the RSA private | |||
| key could result in the compromise of all messages protected with | key could result in the compromise of all messages protected with | |||
| that key. Disclosure of the key-encryption key, the content- | that key. Disclosure of the key-encryption key, the content- | |||
| encryption key, or the content-authenticated-encryption key could | encryption key, or the content-authenticated-encryption key could | |||
| result in compromise of the associated encrypted content. Disclosure | result in compromise of the associated encrypted content. Disclosure | |||
| of the key-encryption key, the message-authentication key, or the | of the key-encryption key, the message-authentication key, or the | |||
| content-authenticated-encryption key could allow modification of the | content-authenticated-encryption key could allow modification of the | |||
| associated authenticated content. | associated authenticated content. | |||
| Additional considerations related to key management may be found in | Additional considerations related to key management may be found in | |||
| [NISTSP800-57pt1r5]. | [NISTSP800-57pt1r5]. | |||
| The security of the RSA-KEM Algorithm depends on a quality random | The security of the RSA-KEM algorithm depends on a quality random | |||
| number generator. For further discussion on random number | number generator. For further discussion on random number | |||
| generation, see [RFC4086]. | generation, see [RFC4086]. | |||
| The RSA-KEM Algorithm does not use an explicit padding scheme; | The RSA-KEM algorithm does not use an explicit padding scheme. | |||
| instead, an encoded random value (z) between zero and the RSA modulus | Instead, an encoded random value (z) between zero and the RSA modulus | |||
| minus one (n-1) is directly encrypted with the recipient's RSA public | minus one (n-1) is directly encrypted with the recipient's RSA public | |||
| key. The IntegerToString(z, nLen) encoding produces a string that is | key. The IntegerToString(z, nLen) encoding produces a string that is | |||
| the full length of the RSA modulus. In addition, the random value is | the full length of the RSA modulus. In addition, the random value is | |||
| passed through a key-derivation function (KDF) to reduce possible | passed through a KDF to reduce possible harm from a poorly | |||
| harm from a poorly implemented random number source or a maliciously | implemented random number source or a maliciously chosen random value | |||
| chosen random value (z). Implementations MUST NOT use z directly for | (z). Implementations MUST NOT use z directly for any purpose. | |||
| any purpose. | ||||
| As long as a fresh random integer z is chosen as part of each | As long as a fresh random integer z is chosen as part of each | |||
| invocation of the Encapsulate() function, RSA-KEM does not degrade as | invocation of the Encapsulate() function, the RSA-KEM algorithm does | |||
| the number of ciphertexts increases. Since RSA encryption provides a | not degrade as the number of ciphertexts increases. Since RSA | |||
| bijective map, a collision in the KDF is the only way that RSA-KEM | encryption provides a bijective map, a collision in the KDF is the | |||
| can produce more than one ciphertext that encapsulates the same | only way that the RSA-KEM algorithm can produce more than one | |||
| shared secret. | ciphertext that encapsulates the same shared secret. | |||
| The RSA-KEM Algorithm provides a fixed-length ciphertext. The | The RSA-KEM algorithm provides a fixed-length ciphertext. The | |||
| recipient MUST check that the received byte string is the expected | recipient MUST check that the received byte string is the expected | |||
| length and the length corresponds to an integer in the expected range | length and the length corresponds to an integer in the expected range | |||
| prior to attempting decryption with their RSA private key as | prior to attempting decryption with their RSA private key as | |||
| described in Steps 1 and 2 of Appendix A.2. | described in Steps 1 and 2 of Appendix A.2. | |||
| Implementations SHOULD NOT reveal information about intermediate | Implementations SHOULD NOT reveal information about intermediate | |||
| values or calculations, whether by timing or other "side channels", | values or calculations, whether by timing or other "side channels"; | |||
| otherwise an opponent may be able to determine information about the | otherwise, an opponent may be able to determine information about the | |||
| keying data and/or the recipient's private key. Although not all | keying data and/or the recipient's private key. Although not all | |||
| intermediate information may be useful to an opponent, it is | intermediate information may be useful to an opponent, it is | |||
| preferable to conceal as much information as is practical, unless | preferable to conceal as much information as is practical, unless | |||
| analysis specifically indicates that the information would not be | analysis specifically indicates that the information would not be | |||
| useful to an opponent. | useful to an opponent. | |||
| Generally, good cryptographic practice employs a given RSA key pair | Generally, good cryptographic practice employs a given RSA key pair | |||
| in only one scheme. This practice avoids the risk that vulnerability | in only one scheme. This practice avoids the risk that vulnerability | |||
| in one scheme may compromise the security of the other, and may be | in one scheme may compromise the security of the other, and may be | |||
| essential to maintain provable security. RSA public keys have often | essential to maintain provable security. RSA public keys have often | |||
| been employed for multiple purposes such as key transport and digital | been employed for multiple purposes such as key transport and digital | |||
| signature without any known bad interactions; however, such combined | signature without any known bad interactions; however, such combined | |||
| use of an RSA key pair is NOT RECOMMENDED in the future (unless the | use of an RSA key pair is NOT RECOMMENDED in the future (unless the | |||
| different schemes are specifically designed to be used together). | different schemes are specifically designed to be used together). | |||
| Accordingly, an RSA key pair used for the RSA-KEM Algorithm SHOULD | Accordingly, an RSA key pair used for the RSA-KEM algorithm SHOULD | |||
| NOT also be used for digital signatures. Indeed, the Accredited | NOT also be used for digital signatures. Indeed, the Accredited | |||
| Standards Committee X9 (ASC X9) requires such a separation between | Standards Committee X9 (ASC X9) requires such a separation between | |||
| key pairs used for key establishment and key pairs used for digital | key pairs used for key establishment and key pairs used for digital | |||
| signature [ANS-X9.44]. Continuing this principle of key separation, | signature [ANS-X9.44]. Continuing this principle of key separation, | |||
| a key pair used for the RSA-KEM Algorithm SHOULD NOT be used with | a key pair used for the RSA-KEM algorithm SHOULD NOT be used with | |||
| other key establishment schemes, or for data encryption, or with more | other key establishment schemes, or for data encryption, or with more | |||
| than one set of underlying algorithm components. | than one set of underlying algorithm components. | |||
| It is acceptable to use the same RSA key pair for RSA-KEM Key | It is acceptable to use the same RSA key pair for the RSA-KEM Key | |||
| Transport as specified in [RFC5990] and this specification. This is | Transport algorithm as specified in [RFC5990] and this specification. | |||
| acceptable because the operations involving the RSA public key and | This is acceptable because the operations involving the RSA public | |||
| the RSA private key are identical in the two specifications. | key and the RSA private key are identical in the two specifications. | |||
| Parties can gain assurance that implementations are correct through | Parties can gain assurance that implementations are correct through | |||
| formal implementation validation, such as the NIST Cryptographic | formal implementation validation, such as the NIST Cryptographic | |||
| Module Validation Program (CMVP) [CMVP]. | Module Validation Program (CMVP) [CMVP]. | |||
| 4. IANA Considerations | 4. IANA Considerations | |||
| For the ASN.1 Module in Appendix B.2, IANA is requested to assign an | For the ASN.1 Module in Appendix B.2, IANA has assigned an object | |||
| object identifier (OID) for the module identifier. The OID for the | identifier (OID) for the module identifier. The OID for the module | |||
| module should be allocated in the "SMI Security for S/MIME Module | has been allocated in the "SMI Security for S/MIME Module Identifier" | |||
| Identifier" registry (1.2.840.113549.1.9.16.0), and the Description | registry (1.2.840.113549.1.9.16.0), and the Description for the new | |||
| for the new OID should be set to "id-mod-cms-rsa-kem-2023". | OID has been set to "id-mod-cms-rsa-kem-2023". | |||
| IANA is requested to update the id-alg-rsa-kem entry in the SMI | IANA has updated the id-alg-rsa-kem entry in the "SMI Security for S/ | |||
| Security for S/MIME Algorithms (1.2.840.113549.1.9.16.3) repository | MIME Algorithms (1.2.840.113549.1.9.16.3)" repository to refer to | |||
| to refer to this document. In addition, IANA is requested to add the | this document. In addition, IANA has added the following note to the | |||
| following note to the registry: | registry: | |||
| Value 14, "id-alg-rsa-kem," is also referred to as "id-rsa-kem-spki." | Value 14, "id-alg-rsa-kem," is also referred to as "id-rsa-kem-spki." | |||
| 5. References | 5. References | |||
| 5.1. Normative References | 5.1. Normative References | |||
| [ANS-X9.44] | [ANS-X9.44] | |||
| American National Standards Institute, "Public Key | American National Standards Institute, "Public Key | |||
| Cryptography for the Financial Services Industry -- Key | Cryptography for the Financial Services Industry -- Key | |||
| Establishment Using Integer Factorization Cryptography", | Establishment Using Integer Factorization Cryptography", | |||
| American National Standard X9.44, 2007. | ANSI X9.44-2007 (R2017), 2007, | |||
| <https://webstore.ansi.org/standards/ascx9/ | ||||
| [I-D.ietf-lamps-cms-kemri] | ansix9442007r2017>. | |||
| Housley, R., Gray, J., and T. Okubo, "Using Key | ||||
| Encapsulation Mechanism (KEM) Algorithms in the | ||||
| Cryptographic Message Syntax (CMS)", Work in Progress, | ||||
| Internet-Draft, draft-ietf-lamps-cms-kemri-08, 6 February | ||||
| 2024, <https://datatracker.ietf.org/doc/html/draft-ietf- | ||||
| lamps-cms-kemri-08>. | ||||
| [ISO18033-2] | [ISO18033-2] | |||
| ISO/IEC JTC 1/SC 27, "Information technology -- Security | ISO/IEC, "Information technology -- Security techniques -- | |||
| techniques -- Encryption algorithms -- Part 2: Asymmetric | Encryption algorithms -- Part 2: Asymmetric ciphers", ISO/ | |||
| ciphers", ISO/IEC 18033-2:2006, 2006, | IEC 18033-2:2006, 2006, | |||
| <https://www.iso.org/standard/37971.html>. | <https://www.iso.org/standard/37971.html>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3394] Schaad, J. and R. Housley, "Advanced Encryption Standard | [RFC3394] Schaad, J. and R. Housley, "Advanced Encryption Standard | |||
| (AES) Key Wrap Algorithm", RFC 3394, DOI 10.17487/RFC3394, | (AES) Key Wrap Algorithm", RFC 3394, DOI 10.17487/RFC3394, | |||
| September 2002, <https://www.rfc-editor.org/info/rfc3394>. | September 2002, <https://www.rfc-editor.org/info/rfc3394>. | |||
| skipping to change at page 15, line 10 ¶ | skipping to change at line 650 ¶ | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8551] Schaad, J., Ramsdell, B., and S. Turner, "Secure/ | [RFC8551] Schaad, J., Ramsdell, B., and S. Turner, "Secure/ | |||
| Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 | Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 | |||
| Message Specification", RFC 8551, DOI 10.17487/RFC8551, | Message Specification", RFC 8551, DOI 10.17487/RFC8551, | |||
| April 2019, <https://www.rfc-editor.org/info/rfc8551>. | April 2019, <https://www.rfc-editor.org/info/rfc8551>. | |||
| [RFC9629] Housley, R., Gray, J., and T. Okubo, "Using Key | ||||
| Encapsulation Mechanism (KEM) Algorithms in the | ||||
| Cryptographic Message Syntax (CMS)", RFC 9629, | ||||
| DOI 10.17487/RFC9629, August 2024, | ||||
| <https://www.rfc-editor.org/info/rfc9629>. | ||||
| [SHS] National Institute of Standards and Technology, "Secure | [SHS] National Institute of Standards and Technology, "Secure | |||
| Hash Standard", DOI 10.6028/nist.fips.180-4, July 2015, | Hash Standard", NIST FIPS PUB 180-4, | |||
| <https://doi.org/10.6028/nist.fips.180-4>. | DOI 10.6028/NIST.FIPS.180-4, July 2015, | |||
| <https://doi.org/10.6028/NIST.FIPS.180-4>. | ||||
| [X.680] ITU-T, "Information technology -- Abstract Syntax Notation | [X.680] ITU-T, "Information technology - Abstract Syntax Notation | |||
| One (ASN.1): Specification of basic notation", ITU-T | One (ASN.1): Specification of basic notation", ITU-T | |||
| Recommendation X.680, ISO/IEC 8824-1:2021, February 2021, | Recommendation X.680, ISO/IEC 8824-1:2021, February 2021, | |||
| <https://www.itu.int/rec/T-REC-X.680>. | <https://www.itu.int/rec/T-REC-X.680>. | |||
| [X.690] ITU-T, "Information technology -- ASN.1 encoding rules: | [X.690] ITU-T, "Information technology - ASN.1 encoding rules: | |||
| Specification of Basic Encoding Rules (BER), Canonical | Specification of Basic Encoding Rules (BER), Canonical | |||
| Encoding Rules (CER) and Distinguished Encoding Rules | Encoding Rules (CER) and Distinguished Encoding Rules | |||
| (DER)", ITU-T Recommendation X.690, ISO/IEC 8825-1:2021, | (DER)", ITU-T Recommendation X.690, ISO/IEC 8825-1:2021, | |||
| February 2021, <https://www.itu.int/rec/T-REC-X.680>. | February 2021, <https://www.itu.int/rec/T-REC-X.690>. | |||
| 5.2. Informative References | 5.2. Informative References | |||
| [CMVP] National Institute of Standards and Technology, | [CMVP] National Institute of Standards and Technology, | |||
| "Cryptographic Module Validation Program", 2016, | "Cryptographic Module Validation Program", 2016, | |||
| <https://csrc.nist.gov/projects/cryptographic-module- | <https://csrc.nist.gov/projects/cryptographic-module- | |||
| validation-program>. | validation-program>. | |||
| [NISTSP800-57pt1r5] | [NISTSP800-57pt1r5] | |||
| National Institute of Standards and Technology, | Barker, E., "Recommendation for Key Management: Part 1 - | |||
| "Recommendation for Key Management:Part 1 - General", | General", NIST SP 800-57, Part 1, Revision 5, | |||
| DOI 10.6028/nist.sp.800-57pt1r5, May 2020, | DOI 10.6028/nist.sp.800-57pt1r5, May 2020, | |||
| <https://doi.org/10.6028/nist.sp.800-57pt1r5>. | <https://doi.org/10.6028/nist.sp.800-57pt1r5>. | |||
| [RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker, | [RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker, | |||
| "Randomness Requirements for Security", BCP 106, RFC 4086, | "Randomness Requirements for Security", BCP 106, RFC 4086, | |||
| DOI 10.17487/RFC4086, June 2005, | DOI 10.17487/RFC4086, June 2005, | |||
| <https://www.rfc-editor.org/info/rfc4086>. | <https://www.rfc-editor.org/info/rfc4086>. | |||
| [RFC4262] Santesson, S., "X.509 Certificate Extension for Secure/ | [RFC4262] Santesson, S., "X.509 Certificate Extension for Secure/ | |||
| Multipurpose Internet Mail Extensions (S/MIME) | Multipurpose Internet Mail Extensions (S/MIME) | |||
| skipping to change at page 16, line 16 ¶ | skipping to change at line 712 ¶ | |||
| Considerations for the SHA-0 and SHA-1 Message-Digest | Considerations for the SHA-0 and SHA-1 Message-Digest | |||
| Algorithms", RFC 6194, DOI 10.17487/RFC6194, March 2011, | Algorithms", RFC 6194, DOI 10.17487/RFC6194, March 2011, | |||
| <https://www.rfc-editor.org/info/rfc6194>. | <https://www.rfc-editor.org/info/rfc6194>. | |||
| [SHOUP] Shoup, V., "A Proposal for an ISO Standard for Public Key | [SHOUP] Shoup, V., "A Proposal for an ISO Standard for Public Key | |||
| Encryption", Cryptology ePrint Archive Paper 2001/112, | Encryption", Cryptology ePrint Archive Paper 2001/112, | |||
| 2001, <https://eprint.iacr.org/2001/112>. | 2001, <https://eprint.iacr.org/2001/112>. | |||
| Appendix A. RSA-KEM Algorithm | Appendix A. RSA-KEM Algorithm | |||
| The RSA-KEM Algorithm is a one-pass (store-and-forward) cryptographic | The RSA-KEM algorithm is a one-pass (store-and-forward) cryptographic | |||
| mechanism for an originator to securely send keying material to a | mechanism for an originator to securely send keying material to a | |||
| recipient using the recipient's RSA public key. | recipient using the recipient's RSA public key. | |||
| With the RSA-KEM Algorithm, an originator encrypts a random integer | With the RSA-KEM algorithm, an originator encrypts a random integer | |||
| (z) with the recipient's RSA public key to produce a ciphertext (ct), | (z) with the recipient's RSA public key to produce a ciphertext (ct), | |||
| and the originator derives a shared secret (SS) from the random | and the originator derives a shared secret (SS) from the random | |||
| integer (z). The originator then sends the ciphertext (ct) to the | integer (z). The originator then sends the ciphertext (ct) to the | |||
| recipient. The recipient decrypts the ciphertext (ct) using their | recipient. The recipient decrypts the ciphertext (ct) using their | |||
| private key to recover the random integer (z), and the recipient | private key to recover the random integer (z), and the recipient | |||
| derives a shared secret (SS) from the random integer(z). In this | derives a shared secret (SS) from the random integer (z). In this | |||
| way, originator and recipient obtain the same shared secret (SS). | way, the originator and recipient obtain the same shared secret (SS). | |||
| The RSA-KEM Algorithm depends on a key-derivation function (KDF), | The RSA-KEM algorithm depends on a key derivation function (KDF), | |||
| which is used to derive the shared secret (SS). Many key-derivation | which is used to derive the shared secret (SS). Many key derivation | |||
| functions support the inclusion of other information in addition to | functions support the inclusion of other information in addition to | |||
| the shared secret (SS) in the input to the function; however, no | the shared secret (SS) in the input to the function; however, no | |||
| other information is included as an input to the KDF by the RSA-KEM | other information is included as an input to the KDF by the RSA-KEM | |||
| Algorithm. | algorithm. | |||
| A.1. Originator's Operations: RSA-KEM Encapsulate() | A.1. Originator's Operations: RSA-KEM Encapsulate() | |||
| Let (n,e) be the recipient's RSA public key; see [RFC8017] for | Let (n,e) be the recipient's RSA public key; see [RFC8017] for | |||
| details. | details. | |||
| Let nLen denote the length in bytes of the modulus n, i.e., the least | Let nLen denote the length in bytes of the modulus n, i.e., the least | |||
| integer such that 2^(8*nLen) > n. | integer such that 2^(8*nLen) > n. | |||
| The originator performs the following operations: | The originator performs the following operations: | |||
| 1. Generate a random integer z between 0 and n-1 (see note), and | 1. Generate a random integer z between 0 and n-1 (see NOTE below), | |||
| convert z to a byte string Z of length nLen, most significant | and convert z to a byte string Z of length nLen, most significant | |||
| byte first: | byte first: | |||
| z = RandomInteger (0, n-1) | z = RandomInteger (0, n-1) | |||
| Z = IntegerToString (z, nLen) | Z = IntegerToString (z, nLen) | |||
| 2. Encrypt the random integer z using the recipient's RSA public key | 2. Encrypt the random integer z using the recipient's RSA public key | |||
| (n,e), and convert the resulting integer c to a ciphertext C, a | (n,e) and convert the resulting integer c to a ciphertext C, a | |||
| byte string of length nLen: | byte string of length nLen: | |||
| c = z^e mod n | c = z^e mod n | |||
| ct = IntegerToString (c, nLen) | ct = IntegerToString (c, nLen) | |||
| 3. Derive a symmetric shared secret SS of length ssLen bytes (which | 3. Derive a symmetric shared secret SS of length ssLen bytes (which | |||
| MUST be the length of the key-encryption key) from the byte | MUST be the length of the key-encryption key) from the byte | |||
| string Z using the underlying key-derivation function: | string Z using the underlying key derivation function: | |||
| SS = KDF (Z, ssLen) | SS = KDF (Z, ssLen) | |||
| 4. Output the shared secret SS and the ciphertext ct. Send the | 4. Output the shared secret SS and the ciphertext ct. Send the | |||
| ciphertext ct to the recipient. | ciphertext ct to the recipient. | |||
| NOTE: The random integer z MUST be generated independently at random | NOTE: The random integer z MUST be generated independently at random | |||
| for different encryption operations, whether for the same or | for different encryption operations, whether for the same or | |||
| different recipients. | different recipients. | |||
| skipping to change at page 18, line 11 ¶ | skipping to change at line 804 ¶ | |||
| recover an integer z (see NOTE below): | recover an integer z (see NOTE below): | |||
| z = c^d mod n | z = c^d mod n | |||
| 4. Convert the integer z to a byte string Z of length nLen, most | 4. Convert the integer z to a byte string Z of length nLen, most | |||
| significant byte first (see NOTE below): | significant byte first (see NOTE below): | |||
| Z = IntegerToString (z, nLen) | Z = IntegerToString (z, nLen) | |||
| 5. Derive a shared secret SS of length ssLen bytes from the byte | 5. Derive a shared secret SS of length ssLen bytes from the byte | |||
| string Z using the key-derivation function (see NOTE below): | string Z using the key derivation function (see NOTE below): | |||
| SS = KDF (Z, ssLen) | SS = KDF (Z, ssLen) | |||
| 6. Output the shared secret SS. | 6. Output the shared secret SS. | |||
| NOTE: Implementations SHOULD NOT reveal information about the integer | NOTE: Implementations SHOULD NOT reveal information about the integer | |||
| z, the string Z, or about the calculation of the exponentiation in | z, the string Z, or about the calculation of the exponentiation in | |||
| Step 2, the conversion in Step 3, or the key derivation in Step 4, | Step 2, the conversion in Step 3, or the key derivation in Step 4, | |||
| whether by timing or other "side channels". The observable behavior | whether by timing or other "side channels". The observable behavior | |||
| of the implementation SHOULD be the same at these steps for all | of the implementation SHOULD be the same at these steps for all | |||
| ciphertexts C that are in range. For example, IntegerToString | ciphertexts C that are in range. For example, IntegerToString | |||
| conversion should take the same amount of time regardless of the | conversion should take the same amount of time regardless of the | |||
| actual value of the integer z. The integer z, the string Z, and | actual value of the integer z. The integer z, the string Z, and | |||
| other intermediate results MUST be securely deleted when they are no | other intermediate results MUST be securely deleted when they are no | |||
| longer needed. | longer needed. | |||
| Appendix B. ASN.1 Syntax | Appendix B. ASN.1 Syntax | |||
| The ASN.1 syntax for identifying the RSA-KEM Algorithm is an | The ASN.1 syntax for identifying the RSA-KEM algorithm is an | |||
| extension of the syntax for the "generic hybrid cipher" in ANS X9.44 | extension of the syntax for the "generic hybrid cipher" in ANS X9.44 | |||
| [ANS-X9.44]. | [ANS-X9.44]. | |||
| The ASN.1 Module is unchanged from RFC 5990. The id-rsa-kem-spki | The ASN.1 Module is unchanged from RFC 5990. The id-rsa-kem-spki | |||
| object identifier is used in a backward compatible manner in | object identifier is used in a backward compatible manner in | |||
| certificates [RFC5280] and SMIMECapabilities [RFC8551]. Of course, | certificates [RFC5280] and SMIMECapabilities [RFC8551]. Of course, | |||
| the use of the id-kem-rsa object identifier in the new | the use of the id-kem-rsa object identifier in the new | |||
| KEMRecipientInfo structure [I-D.ietf-lamps-cms-kemri] was not yet | KEMRecipientInfo structure [RFC9629] was not yet defined at the time | |||
| defined at the time that RFC 5990 was written. | that RFC 5990 was written. | |||
| B.1. Underlying Components | B.1. Underlying Components | |||
| Implementations that conform to this specification MUST support the | Implementations that conform to this specification MUST support the | |||
| KDF3 [ANS-X9.44] key-derivation function using SHA-256 [SHS]. | KDF3 [ANS-X9.44] key derivation function using SHA-256 [SHS]. | |||
| KDF2 [ANS-X9.44] and KDF3 are both key-derivation functions based on | KDF2 [ANS-X9.44] and KDF3 are both key derivation functions based on | |||
| a hash function. The only difference between KDF2 and KDF3 is the | a hash function. The only difference between KDF2 and KDF3 is the | |||
| order of the components to be hashed. | order of the components to be hashed. | |||
| KDF2 calculates T as: T = T || Hash (Z || D || otherInfo) | KDF2 calculates T as: T = T || Hash (Z || D || otherInfo) | |||
| KDF3 calculates T as: T = T || Hash (D || Z || otherInfo) | KDF3 calculates T as: T = T || Hash (D || Z || otherInfo) | |||
| The object identifier for KDF3 is: | The object identifier for KDF3 is: | |||
| id-kdf-kdf3 OBJECT IDENTIFIER ::= { x9-44-components kdf3(2) } | id-kdf-kdf3 OBJECT IDENTIFIER ::= { x9-44-components kdf3(2) } | |||
| The KDF3 parameters identify the underlying hash function. For | The KDF3 parameters identify the underlying hash function. For | |||
| alignment with the ANS X9.44, the hash function MUST be an ASC | alignment with ANS X9.44, the hash function MUST be an ASC | |||
| X9-approved hash function. While the SHA-1 hash algorithm is | X9-approved hash function. While the SHA-1 hash algorithm is | |||
| included in the ASN.1 definitions, SHA-1 MUST NOT be used. SHA-1 is | included in the ASN.1 definitions, SHA-1 MUST NOT be used. SHA-1 is | |||
| considered to be obsolete; see [RFC6194]. SHA-1 remains in the ASN.1 | considered to be obsolete; see [RFC6194]. SHA-1 remains in the ASN.1 | |||
| module for compatibility with RFC 5990. In addition, other hash | module for compatibility with RFC 5990. In addition, other hash | |||
| functions MAY be used with CMS. | functions MAY be used with CMS. | |||
| kda-kdf3 KEY-DERIVATION ::= { | kda-kdf3 KEY-DERIVATION ::= { | |||
| IDENTIFIER id-kdf-kdf3 | IDENTIFIER id-kdf-kdf3 | |||
| PARAMS TYPE KDF3-HashFunction ARE required | PARAMS TYPE KDF3-HashFunction ARE required | |||
| -- No S/MIME caps defined -- } | -- No S/MIME caps defined -- } | |||
| skipping to change at page 20, line 7 ¶ | skipping to change at line 897 ¶ | |||
| PARAMS ARE absent | PARAMS ARE absent | |||
| SMIME-CAPS { IDENTIFIED BY id-aes192-wrap } } | SMIME-CAPS { IDENTIFIED BY id-aes192-wrap } } | |||
| kwa-aes256-wrap KEY-WRAP ::= { | kwa-aes256-wrap KEY-WRAP ::= { | |||
| IDENTIFIER id-aes256-wrap | IDENTIFIER id-aes256-wrap | |||
| PARAMS ARE absent | PARAMS ARE absent | |||
| SMIME-CAPS { IDENTIFIED BY id-aes256-wrap } } | SMIME-CAPS { IDENTIFIED BY id-aes256-wrap } } | |||
| B.2. ASN.1 Module | B.2. ASN.1 Module | |||
| RFC EDITOR: Please replace TBD2 with the value assigned by IANA | ||||
| during the publication of [I-D.ietf-lamps-cms-kemri]. | ||||
| <CODE BEGINS> | <CODE BEGINS> | |||
| CMS-RSA-KEM-2023 | CMS-RSA-KEM-2023 | |||
| { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) | { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) | |||
| pkcs-9(9) smime(16) modules(0) id-mod-cms-rsa-kem-2023(TBD1) } | pkcs-9(9) smime(16) modules(0) id-mod-cms-rsa-kem-2023(79) } | |||
| DEFINITIONS EXPLICIT TAGS ::= BEGIN | DEFINITIONS EXPLICIT TAGS ::= BEGIN | |||
| -- EXPORTS ALL | -- EXPORTS ALL | |||
| IMPORTS | IMPORTS | |||
| KEM-ALGORITHM | KEM-ALGORITHM | |||
| FROM KEMAlgorithmInformation-2023 -- [I-D.ietf-lamps-cms-kemri] | FROM KEMAlgorithmInformation-2023 -- [RFC9629] | |||
| { iso(1) identified-organization(3) dod(6) internet(1) | { iso(1) identified-organization(3) dod(6) internet(1) | |||
| security(5) mechanisms(5) pkix(7) id-mod(0) | security(5) mechanisms(5) pkix(7) id-mod(0) | |||
| id-mod-kemAlgorithmInformation-2023(TBD2) } | id-mod-kemAlgorithmInformation-2023(109) } | |||
| AlgorithmIdentifier{}, PUBLIC-KEY, DIGEST-ALGORITHM, | AlgorithmIdentifier{}, PUBLIC-KEY, DIGEST-ALGORITHM, | |||
| KEY-DERIVATION, KEY-WRAP, SMIME-CAPS | KEY-DERIVATION, KEY-WRAP, SMIME-CAPS | |||
| FROM AlgorithmInformation-2009 -- [RFC5912] | FROM AlgorithmInformation-2009 -- [RFC5912] | |||
| { iso(1) identified-organization(3) dod(6) internet(1) | { iso(1) identified-organization(3) dod(6) internet(1) | |||
| security(5) mechanisms(5) pkix(7) id-mod(0) | security(5) mechanisms(5) pkix(7) id-mod(0) | |||
| id-mod-algorithmInformation-02(58) } | id-mod-algorithmInformation-02(58) } | |||
| kwa-aes128-wrap, kwa-aes192-wrap, kwa-aes256-wrap | kwa-aes128-wrap, kwa-aes192-wrap, kwa-aes256-wrap | |||
| FROM CMSAesRsaesOaep-2009 -- [RFC5911] | FROM CMSAesRsaesOaep-2009 -- [RFC5911] | |||
| skipping to change at page 21, line 42 ¶ | skipping to change at line 978 ¶ | |||
| pkcs-1 OID ::= { iso(1) member-body(2) us(840) rsadsi(113549) | pkcs-1 OID ::= { iso(1) member-body(2) us(840) rsadsi(113549) | |||
| pkcs(1) pkcs-1(1) } | pkcs(1) pkcs-1(1) } | |||
| -- X9.44 arc | -- X9.44 arc | |||
| x9-44 OID ::= { iso(1) identified-organization(3) tc68(133) | x9-44 OID ::= { iso(1) identified-organization(3) tc68(133) | |||
| country(16) x9(840) x9Standards(9) x9-44(44) } | country(16) x9(840) x9Standards(9) x9-44(44) } | |||
| x9-44-components OID ::= { x9-44 components(1) } | x9-44-components OID ::= { x9-44 components(1) } | |||
| -- RSA-KEM Algorithm | -- RSA-KEM algorithm | |||
| id-rsa-kem OID ::= { iso(1) member-body(2) us(840) rsadsi(113549) | id-rsa-kem OID ::= { iso(1) member-body(2) us(840) rsadsi(113549) | |||
| pkcs(1) pkcs-9(9) smime(16) alg(3) 14 } | pkcs(1) pkcs-9(9) smime(16) alg(3) 14 } | |||
| id-rsa-kem-spki OID ::= id-rsa-kem | id-rsa-kem-spki OID ::= id-rsa-kem | |||
| GenericHybridParameters ::= SEQUENCE { | GenericHybridParameters ::= SEQUENCE { | |||
| kem KeyEncapsulationMechanism, | kem KeyEncapsulationMechanism, | |||
| dem DataEncapsulationMechanism } | dem DataEncapsulationMechanism } | |||
| skipping to change at page 24, line 38 ¶ | skipping to change at line 1117 ¶ | |||
| kwa-camellia192-wrap.&smimeCaps | | kwa-camellia192-wrap.&smimeCaps | | |||
| kwa-camellia256-wrap.&smimeCaps, | kwa-camellia256-wrap.&smimeCaps, | |||
| ... } | ... } | |||
| END | END | |||
| <CODE ENDS> | <CODE ENDS> | |||
| Appendix C. SMIMECapabilities Examples | Appendix C. SMIMECapabilities Examples | |||
| To indicate support for the RSA-KEM algorithm coupled with the KDF3 | To indicate support for the RSA-KEM algorithm coupled with the KDF3 | |||
| key-derivation function with SHA-256 and the AES Key Wrap symmetric | key derivation function with SHA-256 and the AES Key Wrap symmetric | |||
| key-encryption algorithm 128-bit key-encryption key, the | key-encryption algorithm 128-bit key-encryption key, the | |||
| SMIMECapabilities will include the following entry: | SMIMECapabilities will include the following entry: | |||
| SEQUENCE { | SEQUENCE { | |||
| id-rsa-kem-spki, -- RSA-KEM Algorithm | id-rsa-kem-spki, -- RSA-KEM algorithm | |||
| SEQUENCE { -- GenericHybridParameters | SEQUENCE { -- GenericHybridParameters | |||
| SEQUENCE { -- key encapsulation mechanism | SEQUENCE { -- key encapsulation mechanism | |||
| id-kem-rsa, -- RSA-KEM | id-kem-rsa, -- RSA-KEM | |||
| SEQUENCE { -- RsaKemParameters | SEQUENCE { -- RsaKemParameters | |||
| SEQUENCE { -- key derivation function | SEQUENCE { -- key derivation function | |||
| id-kdf-kdf3, -- KDF3 | id-kdf-kdf3, -- KDF3 | |||
| SEQUENCE { -- KDF3-HashFunction | SEQUENCE { -- KDF3-HashFunction | |||
| id-sha256 -- SHA-256; no parameters (preferred) | id-sha256 -- SHA-256; no parameters (preferred) | |||
| }, | }, | |||
| 16 -- KEK length in bytes | 16 -- KEK length in bytes | |||
| skipping to change at page 25, line 42 ¶ | skipping to change at line 1158 ¶ | |||
| 30 1e | 30 1e | |||
| 30 19 | 30 19 | |||
| 06 0a 2b 81 05 10 86 48 09 2c 01 02 -- id-kdf-kdf3 | 06 0a 2b 81 05 10 86 48 09 2c 01 02 -- id-kdf-kdf3 | |||
| 30 0b | 30 0b | |||
| 06 09 60 86 48 01 65 03 04 02 01 -- id-sha256 | 06 09 60 86 48 01 65 03 04 02 01 -- id-sha256 | |||
| 02 01 10 -- 16 bytes | 02 01 10 -- 16 bytes | |||
| 30 0b | 30 0b | |||
| 06 09 60 86 48 01 65 03 04 01 05 -- id-aes128-Wrap | 06 09 60 86 48 01 65 03 04 01 05 -- id-aes128-Wrap | |||
| To indicate support for the RSA-KEM algorithm coupled with the KDF3 | To indicate support for the RSA-KEM algorithm coupled with the KDF3 | |||
| key-derivation function with SHA-384 and the AES Key Wrap symmetric | key derivation function with SHA-384 and the AES Key Wrap symmetric | |||
| key-encryption algorithm 192-bit key-encryption key, the | key-encryption algorithm 192-bit key-encryption key, the | |||
| SMIMECapabilities will include the following SMIMECapability value | SMIMECapabilities will include the following SMIMECapability value | |||
| (in hexadecimal): | (in hexadecimal): | |||
| 30 47 06 0b 2a 86 48 86 f7 0d 01 09 10 03 0e 30 | 30 47 06 0b 2a 86 48 86 f7 0d 01 09 10 03 0e 30 | |||
| 38 30 29 06 07 28 81 8c 71 02 02 04 30 1e 30 19 | 38 30 29 06 07 28 81 8c 71 02 02 04 30 1e 30 19 | |||
| 06 0a 2b 81 05 10 86 48 09 2c 01 02 30 0b 06 09 | 06 0a 2b 81 05 10 86 48 09 2c 01 02 30 0b 06 09 | |||
| 60 86 48 01 65 03 04 02 02 02 01 18 30 0b 06 09 | 60 86 48 01 65 03 04 02 02 02 01 18 30 0b 06 09 | |||
| 60 86 48 01 65 03 04 01 19 | 60 86 48 01 65 03 04 01 19 | |||
| To indicate support for the RSA-KEM algorithm coupled with the KDF3 | To indicate support for the RSA-KEM algorithm coupled with the KDF3 | |||
| key-derivation function with SHA-512 and the AES Key Wrap symmetric | key derivation function with SHA-512 and the AES Key Wrap symmetric | |||
| key-encryption algorithm 256-bit key-encryption key, the | key-encryption algorithm 256-bit key-encryption key, the | |||
| SMIMECapabilities will include the following SMIMECapability value | SMIMECapabilities will include the following SMIMECapability value | |||
| (in hexadecimal): | (in hexadecimal): | |||
| 30 47 06 0b 2a 86 48 86 f7 0d 01 09 10 03 0e 30 | 30 47 06 0b 2a 86 48 86 f7 0d 01 09 10 03 0e 30 | |||
| 38 30 29 06 07 28 81 8c 71 02 02 04 30 1e 30 19 | 38 30 29 06 07 28 81 8c 71 02 02 04 30 1e 30 19 | |||
| 06 0a 2b 81 05 10 86 48 09 2c 01 02 30 0b 06 09 | 06 0a 2b 81 05 10 86 48 09 2c 01 02 30 0b 06 09 | |||
| 60 86 48 01 65 03 04 02 03 02 01 20 30 0b 06 09 | 60 86 48 01 65 03 04 02 03 02 01 20 30 0b 06 09 | |||
| 60 86 48 01 65 03 04 01 2d | 60 86 48 01 65 03 04 01 2d | |||
| Appendix D. RSA-KEM CMS Enveloped-Data Example | Appendix D. RSA-KEM CMS Enveloped-Data Example | |||
| This example shows the establishment of an AES-128 content-encryption | This example shows the establishment of an AES-128 content-encryption | |||
| key using: | key using: | |||
| * RSA-KEM with a 3072-bit key and KDF3 with SHA-256; | * RSA-KEM with a 3072-bit key and KDF3 with SHA-256; | |||
| * KEMRecipientInfo key derivation using KDF3 with SHA-256; and | * KEMRecipientInfo key derivation using KDF3 with SHA-256; and | |||
| * KEMRecipientInfo key wrap using AES-128-KEYWRAP. | * KEMRecipientInfo Key Wrap using AES-128-KEYWRAP. | |||
| In real-world use, the originator would encrypt the content- | In real-world use, the originator would encrypt the content- | |||
| encryption key in a manner that would allow decryption with their own | encryption key in a manner that would allow decryption with their own | |||
| private key as well as the recipient's private key. This is omitted | private key as well as the recipient's private key. This is omitted | |||
| in an attempt to simplify the example. | in an attempt to simplify the example. | |||
| D.1. Originator RSA-KEM Encapsulate() Processing | D.1. Originator RSA-KEM Encapsulate() Processing | |||
| Alice obtains Bob's public key: | Alice obtains Bob's public key: | |||
| skipping to change at page 27, line 20 ¶ | skipping to change at line 1232 ¶ | |||
| 0875990b614e406fa6dff500043cbca95968faba61f795096a7fb3687a51078c | 0875990b614e406fa6dff500043cbca95968faba61f795096a7fb3687a51078c | |||
| 4ca2cb663366b0bea0cd9cccac72a25f3f4ed03deb68b4453bba44b943f4367b | 4ca2cb663366b0bea0cd9cccac72a25f3f4ed03deb68b4453bba44b943f4367b | |||
| 67d6cd10c8ace53f545aac50968fc3c6ecc80f3224b64e37038504e2d2c0e2b2 | 67d6cd10c8ace53f545aac50968fc3c6ecc80f3224b64e37038504e2d2c0e2b2 | |||
| 9d45e46c62826d96331360e4c17ea3ef89a9efc5fac99eda830e81450b6534dc | 9d45e46c62826d96331360e4c17ea3ef89a9efc5fac99eda830e81450b6534dc | |||
| 0bdf042b8f3b706649c631fe51fc2445cc8d447203ec2f41f79cdfea16de1ce6 | 0bdf042b8f3b706649c631fe51fc2445cc8d447203ec2f41f79cdfea16de1ce6 | |||
| abdfdc1e2ef2e5d5d8a65e645f397240ef5a26f5e4ff715de782e30ecf477293 | abdfdc1e2ef2e5d5d8a65e645f397240ef5a26f5e4ff715de782e30ecf477293 | |||
| e89e13171405909a8e04dd31d21d0c57935fc1ceea8e1033e31e1bc8c56da0f3 | e89e13171405909a8e04dd31d21d0c57935fc1ceea8e1033e31e1bc8c56da0f3 | |||
| d79510f3f380ff58e5a61d361f2f18e99fbae5663172e8cd1f21deaddc5bbbea | d79510f3f380ff58e5a61d361f2f18e99fbae5663172e8cd1f21deaddc5bbbea | |||
| 060d55f1842b93d1a9c888d0bf85d0af9947fe51acf940c7e7577eb79cabecb3 | 060d55f1842b93d1a9c888d0bf85d0af9947fe51acf940c7e7577eb79cabecb3 | |||
| Alice encrypts integer z using the Bob's RSA public key, the result | Alice encrypts integer z using the Bob's RSA public key. The result | |||
| is called ct: | is called ct: | |||
| c071fc273af8e7bdb152e06bf73310361074154a43abcf3c93c13499d2065344 | c071fc273af8e7bdb152e06bf73310361074154a43abcf3c93c13499d2065344 | |||
| 3eed9ef5d3c0685e4aa76a6854815bb97691ff9f8dac15eea7d74f452bf350a6 | 3eed9ef5d3c0685e4aa76a6854815bb97691ff9f8dac15eea7d74f452bf350a6 | |||
| 46163d68288e978cbf7a73089ee52712f9a4f49e06ace7bbc85ab14d4e336c97 | 46163d68288e978cbf7a73089ee52712f9a4f49e06ace7bbc85ab14d4e336c97 | |||
| c5728a2654138c7b26e8835c6b0a9fbed26495c4eadf745a2933be283f6a88b1 | c5728a2654138c7b26e8835c6b0a9fbed26495c4eadf745a2933be283f6a88b1 | |||
| 6695fc06666873cfb6d36718ef3376cefc100c3941f3c494944078325807a559 | 6695fc06666873cfb6d36718ef3376cefc100c3941f3c494944078325807a559 | |||
| 186b95ccabf3714cfaf79f83bd30537fdd9aed5a4cdcbd8bd0486faed73e9d48 | 186b95ccabf3714cfaf79f83bd30537fdd9aed5a4cdcbd8bd0486faed73e9d48 | |||
| 6b3087d6c806546b6e2671575c98461e441f65542bd95de26d0f53a64e7848d7 | 6b3087d6c806546b6e2671575c98461e441f65542bd95de26d0f53a64e7848d7 | |||
| 31d9608d053e8d345546602d86236ffe3704c98ad59144f3089e5e6d527b5497 | 31d9608d053e8d345546602d86236ffe3704c98ad59144f3089e5e6d527b5497 | |||
| skipping to change at page 28, line 5 ¶ | skipping to change at line 1262 ¶ | |||
| D.2. Originator CMS Processing | D.2. Originator CMS Processing | |||
| Alice encodes the CMSORIforKEMOtherInfo structure with the algorithm | Alice encodes the CMSORIforKEMOtherInfo structure with the algorithm | |||
| identifier for AES-128-KEYWRAP and a key length of 16 octets. The | identifier for AES-128-KEYWRAP and a key length of 16 octets. The | |||
| DER encoding of CMSORIforKEMOtherInfo produces 18 octets: | DER encoding of CMSORIforKEMOtherInfo produces 18 octets: | |||
| 3010300b0609608648016503040105020110 | 3010300b0609608648016503040105020110 | |||
| The CMSORIforKEMOtherInfo structure contains: | The CMSORIforKEMOtherInfo structure contains: | |||
| 0 16: SEQUENCE { | 0 16: SEQUENCE { | |||
| 2 11: SEQUENCE { | 2 11: SEQUENCE { | |||
| 4 9: OBJECT IDENTIFIER aes128-wrap (2 16 840 1 101 3 4 1 5) | 4 9: OBJECT IDENTIFIER aes128-wrap (2 16 840 1 101 3 4 1 5) | |||
| : } | : } | |||
| 15 1: INTEGER 16 | 15 1: INTEGER 16 | |||
| : } | : } | |||
| Alice derives the key-encryption key from shared secret produced by | Alice derives the key-encryption key from shared secret produced by | |||
| RSA-KEM Encapsulate() and the CMSORIforKEMOtherInfo structure with | RSA-KEM Encapsulate() and the CMSORIforKEMOtherInfo structure with | |||
| KDF3 and SHA-256, the KEK is: | KDF3 and SHA-256. The KEK is: | |||
| e6dc9d62ff2b469bef604c617b018718 | e6dc9d62ff2b469bef604c617b018718 | |||
| Alice randomly generates a 128-bit content-encryption key: | Alice randomly generates a 128-bit content-encryption key: | |||
| 77f2a84640304be7bd42670a84a1258b | 77f2a84640304be7bd42670a84a1258b | |||
| Alice uses AES-128-KEYWRAP to encrypt the 128-bit content-encryption | Alice uses AES-128-KEYWRAP to encrypt the 128-bit content-encryption | |||
| key with the derived key-encryption key: | key with the derived key-encryption key: | |||
| skipping to change at page 29, line 21 ¶ | skipping to change at line 1317 ¶ | |||
| BlRrbiZxV1yYRh5EH2VUK9ld4m0PU6ZOeEjXMdlgjQU+jTRVRmAthiNv/jcEyYrV | BlRrbiZxV1yYRh5EH2VUK9ld4m0PU6ZOeEjXMdlgjQU+jTRVRmAthiNv/jcEyYrV | |||
| kUTzCJ5ebVJ7VJe6EDx51i6A0CNUELBvcafZvRw4AA+RDWMS6i8go1V1Na0Bswk/ | kUTzCJ5ebVJ7VJe6EDx51i6A0CNUELBvcafZvRw4AA+RDWMS6i8go1V1Na0Bswk/ | |||
| tffuUHCA0Pd9SMnDs3lva33TeGCF+4lRI/BMofHBviLHR6jfrOMjcPsNVweD4n27 | tffuUHCA0Pd9SMnDs3lva33TeGCF+4lRI/BMofHBviLHR6jfrOMjcPsNVweD4n27 | |||
| fnT8qU7jlnb949ipVT2HgiRzbjfhkdq5U8fiKMB61coxIkIcFN69ByqatjAbBgor | fnT8qU7jlnb949ipVT2HgiRzbjfhkdq5U8fiKMB61coxIkIcFN69ByqatjAbBgor | |||
| gQUQhkgJLAECMA0GCWCGSAFlAwQCAQUAAgEQMAsGCWCGSAFlAwQBBQQYKHguXT15 | gQUQhkgJLAECMA0GCWCGSAFlAwQCAQUAAgEQMAsGCWCGSAFlAwQBBQQYKHguXT15 | |||
| SnYWuGP7z8cZt48S3gjPKG4JMDwGCSqGSIb3DQEHATAdBglghkgBZQMEAQIEEEgM | SnYWuGP7z8cZt48S3gjPKG4JMDwGCSqGSIb3DQEHATAdBglghkgBZQMEAQIEEEgM | |||
| yv66vvrO263eyviId4GAEMbKZdt73Xaw834vq2Jktm0= | yv66vvrO263eyviId4GAEMbKZdt73Xaw834vq2Jktm0= | |||
| This result decodes to: | This result decodes to: | |||
| 0 604: SEQUENCE { | 0 604: SEQUENCE { | |||
| 4 9: OBJECT IDENTIFIER envelopedData (1 2 840 113549 1 7 3) | 4 9: OBJECT IDENTIFIER envelopedData (1 2 840 113549 1 7 3) | |||
| 15 589: [0] { | 15 589: [0] { | |||
| 19 585: SEQUENCE { | 19 585: SEQUENCE { | |||
| 23 1: INTEGER 3 | 23 1: INTEGER 3 | |||
| 26 516: SET { | 26 516: SET { | |||
| 30 512: [4] { | 30 512: [4] { | |||
| 34 11: OBJECT IDENTIFIER | 34 11: OBJECT IDENTIFIER | |||
| : KEMRecipientInfo (1 2 840 113549 1 9 16 13 3) | : KEMRecipientInfo (1 2 840 113549 1 9 16 13 3) | |||
| 47 495: SEQUENCE { | 47 495: SEQUENCE { | |||
| 51 1: INTEGER 0 | 51 1: INTEGER 0 | |||
| 54 20: [0] | 54 20: [0] | |||
| : 9E EB 67 C9 B9 5A 74 D4 4D 2F 16 39 66 80 E8 01 | : 9E EB 67 C9 B9 5A 74 D4 4D 2F 16 39 66 80 E8 01 | |||
| : B5 CB A4 9C | : B5 CB A4 9C | |||
| 76 9: SEQUENCE { | 76 9: SEQUENCE { | |||
| 78 7: OBJECT IDENTIFIER kemRSA (1 0 18033 2 2 4) | 78 7: OBJECT IDENTIFIER kemRSA (1 0 18033 2 2 4) | |||
| : } | : } | |||
| 87 384: OCTET STRING | 87 384: OCTET STRING | |||
| : C0 71 FC 27 3A F8 E7 BD B1 52 E0 6B F7 33 10 36 | : C0 71 FC 27 3A F8 E7 BD B1 52 E0 6B F7 33 10 36 | |||
| : 10 74 15 4A 43 AB CF 3C 93 C1 34 99 D2 06 53 44 | : 10 74 15 4A 43 AB CF 3C 93 C1 34 99 D2 06 53 44 | |||
| : 3E ED 9E F5 D3 C0 68 5E 4A A7 6A 68 54 81 5B B9 | : 3E ED 9E F5 D3 C0 68 5E 4A A7 6A 68 54 81 5B B9 | |||
| : 76 91 FF 9F 8D AC 15 EE A7 D7 4F 45 2B F3 50 A6 | : 76 91 FF 9F 8D AC 15 EE A7 D7 4F 45 2B F3 50 A6 | |||
| : 46 16 3D 68 28 8E 97 8C BF 7A 73 08 9E E5 27 12 | : 46 16 3D 68 28 8E 97 8C BF 7A 73 08 9E E5 27 12 | |||
| : F9 A4 F4 9E 06 AC E7 BB C8 5A B1 4D 4E 33 6C 97 | : F9 A4 F4 9E 06 AC E7 BB C8 5A B1 4D 4E 33 6C 97 | |||
| : C5 72 8A 26 54 13 8C 7B 26 E8 83 5C 6B 0A 9F BE | : C5 72 8A 26 54 13 8C 7B 26 E8 83 5C 6B 0A 9F BE | |||
| : D2 64 95 C4 EA DF 74 5A 29 33 BE 28 3F 6A 88 B1 | : D2 64 95 C4 EA DF 74 5A 29 33 BE 28 3F 6A 88 B1 | |||
| : 66 95 FC 06 66 68 73 CF B6 D3 67 18 EF 33 76 CE | : 66 95 FC 06 66 68 73 CF B6 D3 67 18 EF 33 76 CE | |||
| : FC 10 0C 39 41 F3 C4 94 94 40 78 32 58 07 A5 59 | : FC 10 0C 39 41 F3 C4 94 94 40 78 32 58 07 A5 59 | |||
| : 18 6B 95 CC AB F3 71 4C FA F7 9F 83 BD 30 53 7F | : 18 6B 95 CC AB F3 71 4C FA F7 9F 83 BD 30 53 7F | |||
| : DD 9A ED 5A 4C DC BD 8B D0 48 6F AE D7 3E 9D 48 | : DD 9A ED 5A 4C DC BD 8B D0 48 6F AE D7 3E 9D 48 | |||
| : 6B 30 87 D6 C8 06 54 6B 6E 26 71 57 5C 98 46 1E | : 6B 30 87 D6 C8 06 54 6B 6E 26 71 57 5C 98 46 1E | |||
| : 44 1F 65 54 2B D9 5D E2 6D 0F 53 A6 4E 78 48 D7 | : 44 1F 65 54 2B D9 5D E2 6D 0F 53 A6 4E 78 48 D7 | |||
| : 31 D9 60 8D 05 3E 8D 34 55 46 60 2D 86 23 6F FE | : 31 D9 60 8D 05 3E 8D 34 55 46 60 2D 86 23 6F FE | |||
| : 37 04 C9 8A D5 91 44 F3 08 9E 5E 6D 52 7B 54 97 | : 37 04 C9 8A D5 91 44 F3 08 9E 5E 6D 52 7B 54 97 | |||
| : BA 10 3C 79 D6 2E 80 D0 23 54 10 B0 6F 71 A7 D9 | : BA 10 3C 79 D6 2E 80 D0 23 54 10 B0 6F 71 A7 D9 | |||
| : BD 1C 38 00 0F 91 0D 63 12 EA 2F 20 A3 55 75 35 | : BD 1C 38 00 0F 91 0D 63 12 EA 2F 20 A3 55 75 35 | |||
| : AD 01 B3 09 3F B5 F7 EE 50 70 80 D0 F7 7D 48 C9 | : AD 01 B3 09 3F B5 F7 EE 50 70 80 D0 F7 7D 48 C9 | |||
| : C3 B3 79 6F 6B 7D D3 78 60 85 FB 89 51 23 F0 4C | : C3 B3 79 6F 6B 7D D3 78 60 85 FB 89 51 23 F0 4C | |||
| : A1 F1 C1 BE 22 C7 47 A8 DF AC E3 23 70 FB 0D 57 | : A1 F1 C1 BE 22 C7 47 A8 DF AC E3 23 70 FB 0D 57 | |||
| : 07 83 E2 7D BB 7E 74 FC A9 4E E3 96 76 FD E3 D8 | : 07 83 E2 7D BB 7E 74 FC A9 4E E3 96 76 FD E3 D8 | |||
| : A9 55 3D 87 82 24 73 6E 37 E1 91 DA B9 53 C7 E2 | : A9 55 3D 87 82 24 73 6E 37 E1 91 DA B9 53 C7 E2 | |||
| : 28 C0 7A D5 CA 31 22 42 1C 14 DE BD 07 2A 9A B6 | : 28 C0 7A D5 CA 31 22 42 1C 14 DE BD 07 2A 9A B6 | |||
| 475 27: SEQUENCE { | 475 27: SEQUENCE { | |||
| 477 10: OBJECT IDENTIFIER | 477 10: OBJECT IDENTIFIER | |||
| : kdf3 (1 3 133 16 840 9 44 1 2) | : kdf3 (1 3 133 16 840 9 44 1 2) | |||
| 489 13: SEQUENCE { | 489 13: SEQUENCE { | |||
| 491 9: OBJECT IDENTIFIER | 491 9: OBJECT IDENTIFIER | |||
| : sha-256 (2 16 840 1 101 3 4 2 1) | : sha-256 (2 16 840 1 101 3 4 2 1) | |||
| 502 0: NULL | 502 0: NULL | |||
| : } | : } | |||
| : } | : } | |||
| 504 1: INTEGER 16 | 504 1: INTEGER 16 | |||
| 507 11: SEQUENCE { | 507 11: SEQUENCE { | |||
| 509 9: OBJECT IDENTIFIER | 509 9: OBJECT IDENTIFIER | |||
| : aes128-wrap (2 16 840 1 101 3 4 1 5) | : aes128-wrap (2 16 840 1 101 3 4 1 5) | |||
| : } | : } | |||
| 520 24: OCTET STRING | 520 24: OCTET STRING | |||
| : 28 78 2E 5D 3D 79 4A 76 16 B8 63 FB CF C7 19 B7 | : 28 78 2E 5D 3D 79 4A 76 16 B8 63 FB CF C7 19 B7 | |||
| : 8F 12 DE 08 CF 28 6E 09 | : 8F 12 DE 08 CF 28 6E 09 | |||
| : } | : } | |||
| : } | : } | |||
| : } | : } | |||
| 546 60: SEQUENCE { | 546 60: SEQUENCE { | |||
| 548 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1) | 548 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1) | |||
| 559 29: SEQUENCE { | 559 29: SEQUENCE { | |||
| 561 9: OBJECT IDENTIFIER | 561 9: OBJECT IDENTIFIER | |||
| : aes128-CBC (2 16 840 1 101 3 4 1 2) | : aes128-CBC (2 16 840 1 101 3 4 1 2) | |||
| 572 16: OCTET STRING | 572 16: OCTET STRING | |||
| : 48 0C CA FE BA BE FA CE DB AD DE CA F8 88 77 81 | : 48 0C CA FE BA BE FA CE DB AD DE CA F8 88 77 81 | |||
| : } | : } | |||
| 590 16: [0] C6 CA 65 DB 7B DD 76 B0 F3 7E 2F AB 62 64 B6 6D | 590 16: [0] C6 CA 65 DB 7B DD 76 B0 F3 7E 2F AB 62 64 B6 6D | |||
| : } | : } | |||
| : } | : } | |||
| : } | : } | |||
| : } | : } | |||
| D.3. Recipient RSA-KEM Decapsulate() Processing | D.3. Recipient RSA-KEM Decapsulate() Processing | |||
| Bob's private key: | Bob's private key: | |||
| -----BEGIN PRIVATE KEY----- | -----BEGIN PRIVATE KEY----- | |||
| MIIG5AIBAAKCAYEA3ocW14cxncPJ47fnEjBZAyfC2lqapL3ET4jvV6C7gGeVrRQx | MIIG5AIBAAKCAYEA3ocW14cxncPJ47fnEjBZAyfC2lqapL3ET4jvV6C7gGeVrRQx | |||
| WPDwl+cFYBBR2ej3j3/0ecDmu+XuVi2+s5JHKeeza+itfuhsz3yifgeEpeK8T+Su | WPDwl+cFYBBR2ej3j3/0ecDmu+XuVi2+s5JHKeeza+itfuhsz3yifgeEpeK8T+Su | |||
| sHhn20/NBLhYKbh3kiAcCgQ56dpDrDvDcLqqvS3jg/VO+OPnZbofoHOOevt8Q/ro | sHhn20/NBLhYKbh3kiAcCgQ56dpDrDvDcLqqvS3jg/VO+OPnZbofoHOOevt8Q/ro | |||
| ahJe1PlIyQ4udWB8zZezJ4mLLfbOA9YVaYXx2AHHZJevo3nmRnlgJXo6mE00E/6q | ahJe1PlIyQ4udWB8zZezJ4mLLfbOA9YVaYXx2AHHZJevo3nmRnlgJXo6mE00E/6q | |||
| skipping to change at page 32, line 37 ¶ | skipping to change at line 1477 ¶ | |||
| Bob encodes the CMSORIforKEMOtherInfo structure with the algorithm | Bob encodes the CMSORIforKEMOtherInfo structure with the algorithm | |||
| identifier for AES-128-KEYWRAP and a key length of 16 octets. The | identifier for AES-128-KEYWRAP and a key length of 16 octets. The | |||
| DER encoding of CMSORIforKEMOtherInfo is not repeated here. | DER encoding of CMSORIforKEMOtherInfo is not repeated here. | |||
| Bob derives the key-encryption key from shared secret and the | Bob derives the key-encryption key from shared secret and the | |||
| CMSORIforKEMOtherInfo structure with KDF3 and SHA-256, the KEK is: | CMSORIforKEMOtherInfo structure with KDF3 and SHA-256, the KEK is: | |||
| e6dc9d62ff2b469bef604c617b018718 | e6dc9d62ff2b469bef604c617b018718 | |||
| Bob uses AES-KEY-WRAP to decrypt the content-encryption key with the | Bob uses AES-KEY-WRAP to decrypt the content-encryption key with the | |||
| key-encryption key; the content-encryption key is: | key-encryption key. The content-encryption key is: | |||
| 77f2a84640304be7bd42670a84a1258b | 77f2a84640304be7bd42670a84a1258b | |||
| Bob decrypts the content using AES-128-CBC with the content- | Bob decrypts the content using AES-128-CBC with the content- | |||
| encryption key. The 16-octet IV used is: | encryption key. The 16-octet IV used is: | |||
| 480ccafebabefacedbaddecaf8887781 | 480ccafebabefacedbaddecaf8887781 | |||
| The received ciphertext content is: | The received ciphertext content is: | |||
| skipping to change at page 33, line 29 ¶ | skipping to change at line 1518 ¶ | |||
| We thank Burt Kaliski, Alex Railean, Joe Mandel, Mike Ounsworth, | We thank Burt Kaliski, Alex Railean, Joe Mandel, Mike Ounsworth, | |||
| Peter Campbell, Daniel Van Geest, and David Ireland for careful | Peter Campbell, Daniel Van Geest, and David Ireland for careful | |||
| review and thoughtful comments that greatly improved this document. | review and thoughtful comments that greatly improved this document. | |||
| Authors' Addresses | Authors' Addresses | |||
| Russ Housley | Russ Housley | |||
| Vigil Security, LLC | Vigil Security, LLC | |||
| 516 Dranesville Road | 516 Dranesville Road | |||
| Herndon, VA, 20170 | Herndon, VA 20170 | |||
| United States of America | United States of America | |||
| Email: housley@vigilsec.com | Email: housley@vigilsec.com | |||
| Sean Turner | Sean Turner | |||
| sn3rd | sn3rd | |||
| Email: sean@sn3rd.com | Email: sean@sn3rd.com | |||
| End of changes. 148 change blocks. | ||||
| 382 lines changed or deleted | 358 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||