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 January 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(). | |||
skipping to change at page 4, line 18 ¶ | skipping to change at line 141 ¶ | |||
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 RSA-KEM: | |||
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 246 ¶ | |||
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, id- | |||
confusion with id-kem-rsa, id-rsa-kem-spki is introduced as an alias | 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 the PKCS | |||
#1 v1.5 algorithm, that is, using the rsaEncryption object identifier | #1 v1.5 algorithm, that is, using the rsaEncryption object identifier | |||
[RFC8017]. The fact that the recipient will accept RSA-KEM with this | [RFC8017]. The fact that the recipient will accept RSA-KEM with this | |||
public key is not indicated by the use of this object identifier. | public key is not indicated by the use of this object identifier. | |||
The willingness to accept the RSA-KEM Algorithm MAY be signaled by | The willingness to accept the RSA-KEM algorithm MAY be signaled by | |||
the use of the SMIMECapabilities Attribute as specified in | the use of the SMIMECapabilities Attribute as specified in | |||
Section 2.5.2. of [RFC8551] or the SMIMECapabilities certificate | 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 RSA-KEM Key | |||
Transport to also be used with this specification. When the id-rsa- | Transport to also be used with this specification. When the id-rsa- | |||
kem-spki object identifier appears in the SubjectPublicKeyInfo | kem-spki object identifier appears in the SubjectPublicKeyInfo | |||
algorithm field of the certificate, the parameters field from | algorithm field of the certificate, the parameters field from | |||
AlgorithmIdentifier SHOULD be absent. That is, the | AlgorithmIdentifier SHOULD be absent. That is, the | |||
AlgorithmIdentifier SHOULD be a SEQUENCE of one component, the id- | AlgorithmIdentifier SHOULD be a SEQUENCE of one component, the id- | |||
rsa-kem-spki object identifier. With absent parameters, the KDF3 | rsa-kem-spki object identifier. With absent parameters, the KDF3 key | |||
key-derivation function [ANS-X9.44] with SHA-256 [SHS] are used to | derivation function [ANS-X9.44] with SHA-256 [SHS] are used to derive | |||
derive the shared secret. | 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. | |||
Regardless of the AlgorithmIdentifier used, the RSA public key MUST | Regardless of the AlgorithmIdentifier used, the RSA public key MUST | |||
skipping to change at page 10, line 6 ¶ | skipping to change at line 407 ¶ | |||
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, the key-encryption key | |||
is encrypted separately. | 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, RSA-KEM does not degrade as | |||
the number of ciphertexts increases. Since RSA encryption provides a | the number of ciphertexts increases. Since RSA encryption provides a | |||
bijective map, a collision in the KDF is the only way that RSA-KEM | bijective map, a collision in the KDF is the only way that RSA-KEM | |||
can produce more than one ciphertext that encapsulates the same | can produce more than one ciphertext that encapsulates the same | |||
shared secret. | 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 RSA-KEM Key | |||
Transport as specified in [RFC5990] and this specification. This is | Transport as specified in [RFC5990] and this specification. This is | |||
acceptable because the operations involving the RSA public key and | acceptable because the operations involving the RSA public key and | |||
the RSA private key are identical in the two specifications. | 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 649 ¶ | |||
[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 711 ¶ | |||
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 803 ¶ | |||
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 896 ¶ | |||
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 -- [I-D.ietf-lamps-cms-kemri] | |||
{ 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 24, line 38 ¶ | skipping to change at line 1116 ¶ | |||
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 | |||
skipping to change at page 25, line 42 ¶ | skipping to change at line 1157 ¶ | |||
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 1231 ¶ | |||
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 1261 ¶ | |||
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 1316 ¶ | |||
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 1476 ¶ | |||
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 1517 ¶ | |||
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. 143 change blocks. | ||||
357 lines changed or deleted | 332 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |