draft-ietf-lamps-cms-mix-with-psk-07.txt | rfc8696.txt | |||
---|---|---|---|---|
INTERNET-DRAFT R. Housley | Internet Engineering Task Force (IETF) R. Housley | |||
Internet Engineering Task Force (IETF) Vigil Security | Request for Comments: 8696 Vigil Security | |||
Intended Status: Proposed Standard | Category: Standards Track December 2019 | |||
Expires: 23 February 2020 23 August 2019 | ISSN: 2070-1721 | |||
Using Pre-Shared Key (PSK) in the Cryptographic Message Syntax (CMS) | Using Pre-Shared Key (PSK) in the Cryptographic Message Syntax (CMS) | |||
<draft-ietf-lamps-cms-mix-with-psk-07.txt> | ||||
Abstract | Abstract | |||
The invention of a large-scale quantum computer would pose a serious | The invention of a large-scale quantum computer would pose a serious | |||
challenge for the cryptographic algorithms that are widely deployed | challenge for the cryptographic algorithms that are widely deployed | |||
today. The Cryptographic Message Syntax (CMS) supports key transport | today. The Cryptographic Message Syntax (CMS) supports key transport | |||
and key agreement algorithms that could be broken by the invention of | and key agreement algorithms that could be broken by the invention of | |||
such a quantum computer. By storing communications that are | such a quantum computer. By storing communications that are | |||
protected with the CMS today, someone could decrypt them in the | protected with the CMS today, someone could decrypt them in the | |||
future when a large-scale quantum computer becomes available. Once | future when a large-scale quantum computer becomes available. Once | |||
quantum-secure key management algorithms are available, the CMS will | quantum-secure key management algorithms are available, the CMS will | |||
be extended to support the new algorithms, if the existing syntax | be extended to support the new algorithms if the existing syntax does | |||
does not accommodate them. In the near-term, this document describes | not accommodate them. This document describes a mechanism to protect | |||
a mechanism to protect today's communication from the future | today's communication from the future invention of a large-scale | |||
invention of a large-scale quantum computer by mixing the output of | quantum computer by mixing the output of key transport and key | |||
key transport and key agreement algorithms with a pre-shared key. | agreement algorithms with a pre-shared key. | |||
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 | This document is a product of the Internet Engineering Task Force | |||
Task Force (IETF). Note that other groups may also distribute | (IETF). It represents the consensus of the IETF community. It has | |||
working documents as Internet-Drafts. The list of current Internet- | received public review and has been approved for publication by the | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | Information about the current status of this document, any errata, | |||
and may be updated, replaced, or obsoleted by other documents at any | and how to provide feedback on it may be obtained at | |||
time. It is inappropriate to use Internet-Drafts as reference | https://www.rfc-editor.org/info/rfc8696. | |||
material or to cite them other than as "work in progress." | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 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 | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Terminology | |||
1.2. ASN.1 . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. ASN.1 | |||
1.3. Version Numbers . . . . . . . . . . . . . . . . . . . . . 4 | 1.3. Version Numbers | |||
2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Overview | |||
3. KeyTransPSKRecipientInfo . . . . . . . . . . . . . . . . . . . 6 | 3. keyTransPSK | |||
4. KeyAgreePSKRecipientInfo . . . . . . . . . . . . . . . . . . . 7 | 4. keyAgreePSK | |||
5. Key Derivation . . . . . . . . . . . . . . . . . . . . . . . . 9 | 5. Key Derivation | |||
6. ASN.1 Module . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6. ASN.1 Module | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | 7. Security Considerations | |||
8. Privacy Considerations . . . . . . . . . . . . . . . . . . . . 15 | 8. Privacy Considerations | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 | 9. IANA Considerations | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 10. References | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 16 | 10.1. Normative References | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 16 | 10.2. Informative References | |||
Appendix A: Key Transport with PSK Example . . . . . . . . . . . . 17 | Appendix A. Key Transport with PSK Example | |||
A.1. Originator Processing Example . . . . . . . . . . . . . . 18 | A.1. Originator Processing Example | |||
A.2. ContentInfo and AuthEnvelopedData . . . . . . . . . . . . 20 | A.2. ContentInfo and AuthEnvelopedData | |||
A.3. Recipient Processing Example . . . . . . . . . . . . . . . 22 | A.3. Recipient Processing Example | |||
Appendix B: Key Agreement with PSK Example . . . . . . . . . . . . 23 | Appendix B. Key Agreement with PSK Example | |||
B.1. Originator Processing Example . . . . . . . . . . . . . . 23 | B.1. Originator Processing Example | |||
B.2. ContentInfo and AuthEnvelopedData . . . . . . . . . . . . 26 | B.2. ContentInfo and AuthEnvelopedData | |||
B.3. Recipient Processing Example . . . . . . . . . . . . . . . 27 | B.3. Recipient Processing Example | |||
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . 29 | Acknowledgements | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 29 | Author's Address | |||
1. Introduction | 1. Introduction | |||
The invention of a large-scale quantum computer would pose a serious | The invention of a large-scale quantum computer would pose a serious | |||
challenge for the cryptographic algorithms that are widely deployed | challenge for the cryptographic algorithms that are widely deployed | |||
today [S1994]. It is an open question whether or not it is feasible | today [S1994]. It is an open question whether or not it is feasible | |||
to build a large-scale quantum computer, and if so, when that might | to build a large-scale quantum computer and, if so, when that might | |||
happen [NAS2019]. However, if such a quantum computer is invented, | happen [NAS2019]. However, if such a quantum computer is invented, | |||
many of the cryptographic algorithms and the security protocols that | many of the cryptographic algorithms and the security protocols that | |||
use them would become vulnerable. | use them would become vulnerable. | |||
The Cryptographic Message Syntax (CMS) [RFC5652][RFC5083] supports | The Cryptographic Message Syntax (CMS) [RFC5652][RFC5083] supports | |||
key transport and key agreement algorithms that could be broken by | key transport and key agreement algorithms that could be broken by | |||
the invention of a large-scale quantum computer [C2PQ]. These | the invention of a large-scale quantum computer [C2PQ]. These | |||
algorithms include RSA [RFC8017], Diffie-Hellman [RFC2631], and | algorithms include RSA [RFC8017], Diffie-Hellman [RFC2631], and | |||
Elliptic Curve Diffie-Hellman [RFC5753]. As a result, an adversary | Elliptic Curve Diffie-Hellman (ECDH) [RFC5753]. As a result, an | |||
that stores CMS-protected communications today, could decrypt those | adversary that stores CMS-protected communications today could | |||
communications in the future when a large-scale quantum computer | decrypt those communications in the future when a large-scale quantum | |||
becomes available. | computer becomes available. | |||
Once quantum-secure key management algorithms are available, the CMS | Once quantum-secure key management algorithms are available, the CMS | |||
will be extended to support them, if the existing syntax does not | will be extended to support them if the existing syntax does not | |||
already accommodate the new algorithms. | already accommodate the new algorithms. | |||
In the near-term, this document describes a mechanism to protect | In the near term, this document describes a mechanism to protect | |||
today's communication from the future invention of a large-scale | today's communication from the future invention of a large-scale | |||
quantum computer by mixing the output of existing key transport and | quantum computer by mixing the output of existing key transport and | |||
key agreement algorithms with a pre-shared key (PSK). Secure | key agreement algorithms with a pre-shared key (PSK). Secure | |||
communication can be achieved today by mixing a strong PSK with the | communication can be achieved today by mixing a strong PSK with the | |||
output of an existing key transport algorithm, like RSA [RFC8017], or | output of an existing key transport algorithm, like RSA [RFC8017], or | |||
an existing key agreement algorithm, like Diffie-Hellman [RFC2631] or | an existing key agreement algorithm, like Diffie-Hellman [RFC2631] or | |||
Elliptic Curve Diffie-Hellman [RFC5753]. A security solution that is | Elliptic Curve Diffie-Hellman (ECDH) [RFC5753]. A security solution | |||
believed to be quantum resistant can be achieved by using a PSK with | that is believed to be quantum resistant can be achieved by using a | |||
sufficient entropy along with a quantum resistant key derivation | PSK with sufficient entropy along with a quantum-resistant key | |||
function (KDF), like HKDF [RFC5869], and a quantum resistant | derivation function (KDF), like an HMAC-based key derivation function | |||
encryption algorithm, like 256-bit AES [AES]. In this way, today's | (HKDF) [RFC5869], and a quantum-resistant encryption algorithm, like | |||
CMS-protected communication can be resistant to an attacker with a | 256-bit AES [AES]. In this way, today's CMS-protected communication | |||
large-scale quantum computer. | can be resistant to an attacker with a large-scale quantum computer. | |||
In addition, there may be other reasons for including a strong PSK | In addition, there may be other reasons for including a strong PSK | |||
besides protection against the future invention of a large-scale | besides protection against the future invention of a large-scale | |||
quantum computer. For example, there is always the possibility of a | quantum computer. For example, there is always the possibility of a | |||
cryptoanalytic breakthrough on one or more of the classic public-key | cryptoanalytic breakthrough on one or more classic public key | |||
algorithm, and there are longstanding concerns about undisclosed | algorithms, and there are longstanding concerns about undisclosed | |||
trapdoors in Diffie-Hellman parameters [FGHT2016]. Inclusion of a | trapdoors in Diffie-Hellman parameters [FGHT2016]. Inclusion of a | |||
strong PSK as part of the overall key management offer additional | strong PSK as part of the overall key management offers additional | |||
protection against these concerns. | protection against these concerns. | |||
Note that the CMS also supports key management techniques based on | Note that the CMS also supports key management techniques based on | |||
symmetric key-encryption keys and passwords, but they are not | symmetric key-encryption keys and passwords, but they are not | |||
discussed in this document because they are already quantum | discussed in this document because they are already quantum | |||
resistant. The symmetric key-encryption key technique is quantum | resistant. The symmetric key-encryption key technique is quantum | |||
resistant when used with an adequate key size. The password | resistant when used with an adequate key size. The password | |||
technique is quantum resistant when used with a quantum-resistant key | technique is quantum resistant when used with a quantum-resistant key | |||
derivation function and a sufficiently large password. | derivation function and a sufficiently large password. | |||
skipping to change at page 4, line 24 ¶ | skipping to change at line 156 ¶ | |||
CMS values are generated using ASN.1 [X680], which uses the Basic | CMS values are generated using ASN.1 [X680], which uses the Basic | |||
Encoding Rules (BER) and the Distinguished Encoding Rules (DER) | Encoding Rules (BER) and the Distinguished Encoding Rules (DER) | |||
[X690]. | [X690]. | |||
1.3. Version Numbers | 1.3. Version Numbers | |||
The major data structures include a version number as the first item | The major data structures include a version number as the first item | |||
in the data structure. The version number is intended to avoid ASN.1 | in the data structure. The version number is intended to avoid ASN.1 | |||
decode errors. Some implementations do not check the version number | decode errors. Some implementations do not check the version number | |||
prior to attempting a decode, and then if a decode error occurs, the | prior to attempting a decode; then, if a decode error occurs, the | |||
version number is checked as part of the error handling routine. | version number is checked as part of the error-handling routine. | |||
This is a reasonable approach; it places error processing outside of | This is a reasonable approach; it places error processing outside of | |||
the fast path. This approach is also forgiving when an incorrect | the fast path. This approach is also forgiving when an incorrect | |||
version number is used by the sender. | version number is used by the sender. | |||
Whenever the structure is updated, a higher version number will be | Whenever the structure is updated, a higher version number will be | |||
assigned. However, to ensure maximum interoperability, the higher | assigned. However, to ensure maximum interoperability, the higher | |||
version number is only used when the new syntax feature is employed. | version number is only used when the new syntax feature is employed. | |||
That is, the lowest version number that supports the generated syntax | That is, the lowest version number that supports the generated syntax | |||
is used. | is used. | |||
2. Overview | 2. Overview | |||
The CMS enveloped-data content type [RFC5652] and the CMS | The CMS enveloped-data content type [RFC5652] and the CMS | |||
authenticated-enveloped-data content type [RFC5083] support both key | authenticated-enveloped-data content type [RFC5083] support both key | |||
transport and key agreement public-key algorithms to establish the | transport and key agreement public key algorithms to establish the | |||
key used to encrypt the content. No restrictions are imposed on the | key used to encrypt the content. No restrictions are imposed on the | |||
key transport or key agreement public-key algorithms, which means | key transport or key agreement public key algorithms, which means | |||
that any key transport or key agreement algorithm can be used, | that any key transport or key agreement algorithm can be used, | |||
including algorithms that are specified in the future. In both | including algorithms that are specified in the future. In both | |||
cases, the sender randomly generates the content-encryption key, and | cases, the sender randomly generates the content-encryption key, and | |||
then all recipients obtain that key. All recipients use the sender- | then all recipients obtain that key. All recipients use the sender- | |||
generated symmetric content-encryption key for decryption. | generated symmetric content-encryption key for decryption. | |||
This specification defines two quantum-resistant ways to establish a | This specification defines two quantum-resistant ways to establish a | |||
symmetric key-encryption key, which is used to encrypt the sender- | symmetric key-encryption key, which is used to encrypt the sender- | |||
generated content-encryption key. In both cases, the PSK is used as | generated content-encryption key. In both cases, the PSK is used as | |||
one of the inputs to a key-derivation function to create a quantum- | one of the inputs to a key-derivation function to create a quantum- | |||
resistant key-encryption key. The PSK MUST be distributed to the | resistant key-encryption key. The PSK MUST be distributed to the | |||
sender and all of the recipients by some out-of-band means that does | sender and all of the recipients by some out-of-band means that does | |||
not make it vulnerable to the future invention of a large-scale | not make it vulnerable to the future invention of a large-scale | |||
quantum computer, and an identifier MUST be assigned to the PSK. It | quantum computer, and an identifier MUST be assigned to the PSK. It | |||
is best if each PSK has a unique identifier; however, if a recipient | is best if each PSK has a unique identifier; however, if a recipient | |||
has more than one PSK with the same identifier, the recipient can try | has more than one PSK with the same identifier, the recipient can try | |||
each of them in turn. A PSK is expected to be used with many | each of them in turn. A PSK is expected to be used with many | |||
messages, with a lifetime of weeks or months. | messages, with a lifetime of weeks or months. | |||
The content-encryption key or content-authenticated-encryption key is | The content-encryption key or content-authenticated-encryption key is | |||
quantum-resistant, and the sender establishes it using these steps: | quantum resistant, and the sender establishes it using these steps: | |||
When using a key transport algorithm: | When using a key transport algorithm: | |||
1. The content-encryption key or the content-authenticated- | 1. The content-encryption key or the content-authenticated- | |||
encryption key, called CEK, is generated at random. | encryption key, called "CEK", is generated at random. | |||
2. The key-derivation key, called KDK, is generated at random. | 2. The key-derivation key, called "KDK", is generated at random. | |||
3. For each recipient, the KDK is encrypted in the recipient's | 3. For each recipient, the KDK is encrypted in the recipient's | |||
public key, then the key derivation function (KDF) is used to | public key, then the KDF is used to mix the PSK and the KDK to | |||
mix the pre-shared key (PSK) and the KDK to produce the key- | produce the key-encryption key, called "KEK". | |||
encryption key, called KEK. | ||||
4. The KEK is used to encrypt the CEK. | 4. The KEK is used to encrypt the CEK. | |||
When using a key agreement algorithm: | When using a key agreement algorithm: | |||
1. The content-encryption key or the content-authenticated- | 1. The content-encryption key or the content-authenticated- | |||
encryption key, called CEK, is generated at random. | encryption key, called "CEK", is generated at random. | |||
2. For each recipient, a pairwise key-encryption key, called KEK1, | 2. For each recipient, a pairwise key-encryption key, called "KEK1", | |||
is established using the recipient's public key and the | is established using the recipient's public key and the sender's | |||
sender's private key. Note that KEK1 will be used as a key- | private key. Note that KEK1 will be used as a key-derivation | |||
derivation key. | key. | |||
3. For each recipient, the key derivation function (KDF) is used | 3. For each recipient, the KDF is used to mix the PSK and the | |||
to mix the pre-shared key (PSK) and the pairwise KEK1, and the | pairwise KEK1, and the result is called "KEK2". | |||
result is called KEK2. | ||||
4. For each recipient, the pairwise KEK2 is used to encrypt the | 4. For each recipient, the pairwise KEK2 is used to encrypt the CEK. | |||
CEK. | ||||
As specified in Section 6.2.5 of [RFC5652], recipient information for | As specified in Section 6.2.5 of [RFC5652], recipient information for | |||
additional key management techniques are represented in the | additional key management techniques is represented in the | |||
OtherRecipientInfo type. Two key management techniques are specified | OtherRecipientInfo type. Two key management techniques are specified | |||
in this document, and they are each identified by a unique ASN.1 | in this document, and they are each identified by a unique ASN.1 | |||
object identifier. | object identifier. | |||
The first key management technique, called keyTransPSK, see | The first key management technique, called "keyTransPSK" (see | |||
Section 3, uses a key transport algorithm to transfer the key- | Section 3), uses a key transport algorithm to transfer the key- | |||
derivation key from the sender to the recipient, and then the key- | derivation key from the sender to the recipient, and then the key- | |||
derivation key is mixed with the PSK using a KDF. The output of the | derivation key is mixed with the PSK using a KDF. The output of the | |||
KDF is the key-encryption key, which is used for the encryption of | KDF is the key-encryption key, which is used for the encryption of | |||
the content-encryption key or content-authenticated-encryption key. | the content-encryption key or content-authenticated-encryption key. | |||
The second key management technique, called keyAgreePSK, see | The second key management technique, called "keyAgreePSK" (see | |||
Section 4, uses a key agreement algorithm to establish a pairwise | Section 4), uses a key agreement algorithm to establish a pairwise | |||
key-encryption key, which is then mixed with the PSK using a KDF to | key-encryption key. This pairwise key-encryption key is then mixed | |||
produce a second pairwise key-encryption key, which is then used to | with the PSK using a KDF to produce a second pairwise key-encryption | |||
encrypt the content-encryption key or content-authenticated- | key, which is then used to encrypt the content-encryption key or | |||
encryption key. | content-authenticated-encryption key. | |||
3. keyTransPSK | 3. keyTransPSK | |||
Per-recipient information using keyTransPSK is represented in the | Per-recipient information using keyTransPSK is represented in the | |||
KeyTransPSKRecipientInfo type, which is indicated by the id-ori- | KeyTransPSKRecipientInfo type, which is indicated by the id-ori- | |||
keyTransPSK object identifier. Each instance of | keyTransPSK object identifier. Each instance of | |||
KeyTransPSKRecipientInfo establishes the content-encryption key or | KeyTransPSKRecipientInfo establishes the content-encryption key or | |||
content-authenticated-encryption key for one or more recipients that | content-authenticated-encryption key for one or more recipients that | |||
have access to the same PSK. | have access to the same PSK. | |||
The id-ori-keyTransPSK object identifier is: | The id-ori-keyTransPSK object identifier is: | |||
id-ori OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) | id-ori OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) | |||
rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) TBD1 } | rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) 13 } | |||
id-ori-keyTransPSK OBJECT IDENTIFIER ::= { id-ori 1 } | id-ori-keyTransPSK OBJECT IDENTIFIER ::= { id-ori 1 } | |||
The KeyTransPSKRecipientInfo type is: | The KeyTransPSKRecipientInfo type is: | |||
KeyTransPSKRecipientInfo ::= SEQUENCE { | KeyTransPSKRecipientInfo ::= SEQUENCE { | |||
version CMSVersion, -- always set to 0 | version CMSVersion, -- always set to 0 | |||
pskid PreSharedKeyIdentifier, | pskid PreSharedKeyIdentifier, | |||
kdfAlgorithm KeyDerivationAlgorithmIdentifier, | kdfAlgorithm KeyDerivationAlgorithmIdentifier, | |||
keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, | keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, | |||
ktris KeyTransRecipientInfos, | ktris KeyTransRecipientInfos, | |||
encryptedKey EncryptedKey } | encryptedKey EncryptedKey } | |||
PreSharedKeyIdentifier ::= OCTET STRING | PreSharedKeyIdentifier ::= OCTET STRING | |||
KeyTransRecipientInfos ::= SEQUENCE OF KeyTransRecipientInfo | KeyTransRecipientInfos ::= SEQUENCE OF KeyTransRecipientInfo | |||
The fields of the KeyTransPSKRecipientInfo type have the following | The fields of the KeyTransPSKRecipientInfo type have the following | |||
meanings: | meanings: | |||
version is the syntax version number. The version MUST be 0. The | * version is the syntax version number. The version MUST be 0. The | |||
CMSVersion type is described in Section 10.2.5 of [RFC5652]. | CMSVersion type is described in Section 10.2.5 of [RFC5652]. | |||
pskid is the identifier of the PSK used by the sender. The | * pskid is the identifier of the PSK used by the sender. The | |||
identifier is an OCTET STRING, and it need not be human readable. | identifier is an OCTET STRING, and it need not be human readable. | |||
kdfAlgorithm identifies the key-derivation algorithm, and any | * kdfAlgorithm identifies the key-derivation algorithm and any | |||
associated parameters, used by the sender to mix the key- | associated parameters used by the sender to mix the key-derivation | |||
derivation key and the PSK to generate the key-encryption key. | key and the PSK to generate the key-encryption key. The | |||
The KeyDerivationAlgorithmIdentifier is described in Section | KeyDerivationAlgorithmIdentifier is described in Section 10.1.6 of | |||
10.1.6 of [RFC5652]. | [RFC5652]. | |||
keyEncryptionAlgorithm identifies a key-encryption algorithm used | * keyEncryptionAlgorithm identifies a key-encryption algorithm used | |||
to encrypt the content-encryption key. The | to encrypt the content-encryption key. The | |||
KeyEncryptionAlgorithmIdentifier is described in Section 10.1.3 of | KeyEncryptionAlgorithmIdentifier is described in Section 10.1.3 of | |||
[RFC5652]. | [RFC5652]. | |||
ktris contains one KeyTransRecipientInfo type for each recipient; | * ktris contains one KeyTransRecipientInfo type for each recipient; | |||
it uses a key transport algorithm to establish the key-derivation | it uses a key transport algorithm to establish the key-derivation | |||
key. That is, the encryptedKey field of KeyTransRecipientInfo | key. That is, the encryptedKey field of KeyTransRecipientInfo | |||
contains the key-derivation key instead of the content-encryption | contains the key-derivation key instead of the content-encryption | |||
key. KeyTransRecipientInfo is described in Section 6.2.1 of | key. KeyTransRecipientInfo is described in Section 6.2.1 of | |||
[RFC5652]. | [RFC5652]. | |||
encryptedKey is the result of encrypting the content-encryption | * encryptedKey is the result of encrypting the content-encryption | |||
key or the content-authenticated-encryption key with the key- | key or the content-authenticated-encryption key with the key- | |||
encryption key. EncryptedKey is an OCTET STRING. | encryption key. EncryptedKey is an OCTET STRING. | |||
4. keyAgreePSK | 4. keyAgreePSK | |||
Per-recipient information using keyAgreePSK is represented in the | Per-recipient information using keyAgreePSK is represented in the | |||
KeyAgreePSKRecipientInfo type, which is indicated by the id-ori- | KeyAgreePSKRecipientInfo type, which is indicated by the id-ori- | |||
keyAgreePSK object identifier. Each instance of | keyAgreePSK object identifier. Each instance of | |||
KeyAgreePSKRecipientInfo establishes the content-encryption key or | KeyAgreePSKRecipientInfo establishes the content-encryption key or | |||
content-authenticated-encryption key for one or more recipients that | content-authenticated-encryption key for one or more recipients that | |||
skipping to change at page 8, line 19 ¶ | skipping to change at line 332 ¶ | |||
pskid PreSharedKeyIdentifier, | pskid PreSharedKeyIdentifier, | |||
originator [0] EXPLICIT OriginatorIdentifierOrKey, | originator [0] EXPLICIT OriginatorIdentifierOrKey, | |||
ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL, | ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL, | |||
kdfAlgorithm KeyDerivationAlgorithmIdentifier, | kdfAlgorithm KeyDerivationAlgorithmIdentifier, | |||
keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, | keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, | |||
recipientEncryptedKeys RecipientEncryptedKeys } | recipientEncryptedKeys RecipientEncryptedKeys } | |||
The fields of the KeyAgreePSKRecipientInfo type have the following | The fields of the KeyAgreePSKRecipientInfo type have the following | |||
meanings: | meanings: | |||
version is the syntax version number. The version MUST be 0. The | * version is the syntax version number. The version MUST be 0. The | |||
CMSVersion type is described in Section 10.2.5 of [RFC5652]. | CMSVersion type is described in Section 10.2.5 of [RFC5652]. | |||
pskid is the identifier of the PSK used by the sender. The | * pskid is the identifier of the PSK used by the sender. The | |||
identifier is an OCTET STRING, and it need not be human readable. | identifier is an OCTET STRING, and it need not be human readable. | |||
originator is a CHOICE with three alternatives specifying the | * originator is a CHOICE with three alternatives specifying the | |||
sender's key agreement public key. Implementations MUST support | sender's key agreement public key. Implementations MUST support | |||
all three alternatives for specifying the sender's public key. | all three alternatives for specifying the sender's public key. | |||
The sender uses their own private key and the recipient's public | The sender uses their own private key and the recipient's public | |||
key to generate a pairwise key-encryption key. A key derivation | key to generate a pairwise key-encryption key. A KDF is used to | |||
function (KDF) is used to mix the PSK and the pairwise key- | mix the PSK and the pairwise key-encryption key to produce a | |||
encryption key to produce a second key-encryption key. The | second key-encryption key. The OriginatorIdentifierOrKey type is | |||
OriginatorIdentifierOrKey type is described in Section 6.2.2 of | described in Section 6.2.2 of [RFC5652]. | |||
[RFC5652]. | ||||
ukm is optional. With some key agreement algorithms, the sender | * ukm is optional. With some key agreement algorithms, the sender | |||
provides a User Keying Material (UKM) to ensure that a different | provides a User Keying Material (UKM) to ensure that a different | |||
key is generated each time the same two parties generate a | key is generated each time the same two parties generate a | |||
pairwise key. Implementations MUST accept a | pairwise key. Implementations MUST accept a | |||
KeyAgreePSKRecipientInfo SEQUENCE that includes a ukm field. | KeyAgreePSKRecipientInfo SEQUENCE that includes a ukm field. | |||
Implementations that do not support key agreement algorithms that | Implementations that do not support key agreement algorithms that | |||
make use of UKMs MUST gracefully handle the presence of UKMs. The | make use of UKMs MUST gracefully handle the presence of UKMs. The | |||
UserKeyingMaterial type is described in Section 10.2.6 of | UserKeyingMaterial type is described in Section 10.2.6 of | |||
[RFC5652]. | [RFC5652]. | |||
kdfAlgorithm identifies the key-derivation algorithm, and any | * kdfAlgorithm identifies the key-derivation algorithm and any | |||
associated parameters, used by the sender to mix the pairwise key- | associated parameters used by the sender to mix the pairwise key- | |||
encryption key and the PSK to produce a second key-encryption key | encryption key and the PSK to produce a second key-encryption key | |||
of the same length as the first one. The | of the same length as the first one. The | |||
KeyDerivationAlgorithmIdentifier is described in Section 10.1.6 of | KeyDerivationAlgorithmIdentifier is described in Section 10.1.6 of | |||
[RFC5652]. | [RFC5652]. | |||
keyEncryptionAlgorithm identifies a key-encryption algorithm used | * keyEncryptionAlgorithm identifies a key-encryption algorithm used | |||
to encrypt the content-encryption key or the content- | to encrypt the content-encryption key or the content- | |||
authenticated-encryption key. The | authenticated-encryption key. The | |||
KeyEncryptionAlgorithmIdentifier type is described in Section | KeyEncryptionAlgorithmIdentifier type is described in | |||
10.1.3 of [RFC5652]. | Section 10.1.3 of [RFC5652]. | |||
recipientEncryptedKeys includes a recipient identifier and | * recipientEncryptedKeys includes a recipient identifier and | |||
encrypted key for one or more recipients. The | encrypted key for one or more recipients. The | |||
KeyAgreeRecipientIdentifier is a CHOICE with two alternatives | KeyAgreeRecipientIdentifier is a CHOICE with two alternatives | |||
specifying the recipient's certificate, and thereby the | specifying the recipient's certificate, and thereby the | |||
recipient's public key, that was used by the sender to generate a | recipient's public key, that was used by the sender to generate a | |||
pairwise key-encryption key. The encryptedKey is the result of | pairwise key-encryption key. The encryptedKey is the result of | |||
encrypting the content-encryption key or the content- | encrypting the content-encryption key or the content- | |||
authenticated-encryption key with the second pairwise key- | authenticated-encryption key with the second pairwise key- | |||
encryption key. EncryptedKey is an OCTET STRING. The | encryption key. EncryptedKey is an OCTET STRING. The | |||
RecipientEncryptedKeys type is defined in Section 6.2.2 of | RecipientEncryptedKeys type is defined in Section 6.2.2 of | |||
[RFC5652]. | [RFC5652]. | |||
5. Key Derivation | 5. Key Derivation | |||
Many key derivation functions (KDFs) internally employ a one-way hash | Many KDFs internally employ a one-way hash function. When this is | |||
function. When this is the case, the hash function that is used is | the case, the hash function that is used is indirectly indicated by | |||
indirectly indicated by the KeyDerivationAlgorithmIdentifier. HKDF | the KeyDerivationAlgorithmIdentifier. HKDF [RFC5869] is one example | |||
[RFC5869] is one example of a KDF that makes use of a hash function. | of a KDF that makes use of a hash function. | |||
Other KDFs internally employ an encryption algorithm. When this is | Other KDFs internally employ an encryption algorithm. When this is | |||
the case, the encryption that is used is indirectly indicated by the | the case, the encryption that is used is indirectly indicated by the | |||
KeyDerivationAlgorithmIdentifier. For example, AES-128-CMAC can be | KeyDerivationAlgorithmIdentifier. For example, AES-128-CMAC can be | |||
used for randomness extraction in a KDF as described in [NIST2018]. | used for randomness extraction in a KDF as described in [NIST2018]. | |||
A KDF has several input values. This section describes the | A KDF has several input values. This section describes the | |||
conventions for using the KDF to compute the key-encryption key for | conventions for using the KDF to compute the key-encryption key for | |||
KeyTransPSKRecipientInfo and KeyAgreePSKRecipientInfo. For | KeyTransPSKRecipientInfo and KeyAgreePSKRecipientInfo. For | |||
simplicity, the terminology used in the HKDF [RFC5869] specification | simplicity, the terminology used in the HKDF specification [RFC5869] | |||
is used here. | is used here. | |||
The KDF inputs are: | The KDF inputs are: | |||
IKM is the input keying material; it is the symmetric secret input | * IKM is the input keying material; it is the symmetric secret input | |||
to the KDF. For KeyTransPSKRecipientInfo, it is the key- | to the KDF. For KeyTransPSKRecipientInfo, it is the key- | |||
derivation key. For KeyAgreePSKRecipientInfo, it is the pairwise | derivation key. For KeyAgreePSKRecipientInfo, it is the pairwise | |||
key-encryption key produced by the key agreement algorithm. | key-encryption key produced by the key agreement algorithm. | |||
salt is an optional non-secret random value. Many KDFs do not | * salt is an optional non-secret random value. Many KDFs do not | |||
require a salt, and the KeyDerivationAlgorithmIdentifier | require a salt, and the KeyDerivationAlgorithmIdentifier | |||
assignments for HKDF [RFC8619] do not offer a parameter for a | assignments for HKDF [RFC8619] do not offer a parameter for a | |||
salt. If a particular KDF requires a salt, then the salt value is | salt. If a particular KDF requires a salt, then the salt value is | |||
provided as a parameter of the KeyDerivationAlgorithmIdentifier. | provided as a parameter of the KeyDerivationAlgorithmIdentifier. | |||
L is the length of output keying material in octets; the value | * L is the length of output keying material in octets; the value | |||
depends on the key-encryption algorithm that will be used. The | depends on the key-encryption algorithm that will be used. The | |||
algorithm is identified by the KeyEncryptionAlgorithmIdentifier. | algorithm is identified by the KeyEncryptionAlgorithmIdentifier. | |||
In addition, the OBJECT IDENTIFIER portion of the | In addition, the OBJECT IDENTIFIER portion of the | |||
KeyEncryptionAlgorithmIdentifier is included in the next input | KeyEncryptionAlgorithmIdentifier is included in the next input | |||
value, called info. | value, called "info". | |||
info is optional context and application specific information. | * info is optional context and application specific information. | |||
The DER-encoding of CMSORIforPSKOtherInfo is used as the info | The DER encoding of CMSORIforPSKOtherInfo is used as the info | |||
value, and the PSK is included in this structure. Note that | value, and the PSK is included in this structure. Note that | |||
EXPLICIT tagging is used in the ASN.1 module that defines this | EXPLICIT tagging is used in the ASN.1 module that defines this | |||
structure. For KeyTransPSKRecipientInfo, the ENUMERATED value of | structure. For KeyTransPSKRecipientInfo, the ENUMERATED value of | |||
5 is used. For KeyAgreePSKRecipientInfo, the ENUMERATED value of | 5 is used. For KeyAgreePSKRecipientInfo, the ENUMERATED value of | |||
10 is used. CMSORIforPSKOtherInfo is defined by the following | 10 is used. CMSORIforPSKOtherInfo is defined by the following | |||
ASN.1 structure: | ASN.1 structure: | |||
CMSORIforPSKOtherInfo ::= SEQUENCE { | CMSORIforPSKOtherInfo ::= SEQUENCE { | |||
psk OCTET STRING, | psk OCTET STRING, | |||
keyMgmtAlgType ENUMERATED { | keyMgmtAlgType ENUMERATED { | |||
keyTrans (5), | keyTrans (5), | |||
keyAgree (10) }, | keyAgree (10) }, | |||
keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, | keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, | |||
pskLength INTEGER (1..MAX), | pskLength INTEGER (1..MAX), | |||
kdkLength INTEGER (1..MAX) } | kdkLength INTEGER (1..MAX) } | |||
The fields of type CMSORIforPSKOtherInfo have the following meanings: | The fields of type CMSORIforPSKOtherInfo have the following meanings: | |||
psk is an OCTET STRING; it contains the PSK. | * psk is an OCTET STRING; it contains the PSK. | |||
keyMgmtAlgType is either set to 5 or 10. For | * keyMgmtAlgType is either set to 5 or 10. For | |||
KeyTransPSKRecipientInfo, the ENUMERATED value of 5 is used. For | KeyTransPSKRecipientInfo, the ENUMERATED value of 5 is used. For | |||
KeyAgreePSKRecipientInfo, the ENUMERATED value of 10 is used. | KeyAgreePSKRecipientInfo, the ENUMERATED value of 10 is used. | |||
keyEncryptionAlgorithm is the KeyEncryptionAlgorithmIdentifier, | * keyEncryptionAlgorithm is the KeyEncryptionAlgorithmIdentifier, | |||
which identifies the algorithm and provides algorithm parameters, | which identifies the algorithm and provides algorithm parameters, | |||
if any. | if any. | |||
pskLength is a positive integer; it contains the length of the PSK | * pskLength is a positive integer; it contains the length of the PSK | |||
in octets. | in octets. | |||
kdkLength is a positive integer; it contains the length of the | * kdkLength is a positive integer; it contains the length of the | |||
key-derivation key in octets. For KeyTransPSKRecipientInfo, the | key-derivation key in octets. For KeyTransPSKRecipientInfo, the | |||
key-derivation key is generated by the sender. For | key-derivation key is generated by the sender. For | |||
KeyAgreePSKRecipientInfo, the key-derivation key is the pairwise | KeyAgreePSKRecipientInfo, the key-derivation key is the pairwise | |||
key-encryption key produced by the key agreement algorithm. | key-encryption key produced by the key agreement algorithm. | |||
The KDF output is: | The KDF output is: | |||
OKM is the output keying material, which is exactly L octets. The | * OKM is the output keying material, which is exactly L octets. The | |||
OKM is the key-encryption key that is used to encrypt the content- | OKM is the key-encryption key that is used to encrypt the content- | |||
encryption key or the content-authenticated-encryption key. | encryption key or the content-authenticated-encryption key. | |||
An acceptable KDF MUST accept IKM, L, and info inputs; and acceptable | An acceptable KDF MUST accept IKM, L, and info inputs; an acceptable | |||
KDF MAY also accept salt and other inputs. All of these inputs MUST | KDF MAY also accept salt and other inputs. All of these inputs MUST | |||
influence the output of the KDF. If the KDF requires a salt or other | influence the output of the KDF. If the KDF requires a salt or other | |||
inputs, then those inputs MUST be provided as parameters of the | inputs, then those inputs MUST be provided as parameters of the | |||
KeyDerivationAlgorithmIdentifier. | KeyDerivationAlgorithmIdentifier. | |||
6. ASN.1 Module | 6. ASN.1 Module | |||
This section contains the ASN.1 module for the two key management | This section contains the ASN.1 module for the two key management | |||
techniques defined in this document. This module imports types from | techniques defined in this document. This module imports types from | |||
other ASN.1 modules that are defined in [RFC5912] and [RFC6268]. | other ASN.1 modules that are defined in [RFC5912] and [RFC6268]. | |||
skipping to change at page 11, line 24 ¶ | skipping to change at line 478 ¶ | |||
inputs, then those inputs MUST be provided as parameters of the | inputs, then those inputs MUST be provided as parameters of the | |||
KeyDerivationAlgorithmIdentifier. | KeyDerivationAlgorithmIdentifier. | |||
6. ASN.1 Module | 6. ASN.1 Module | |||
This section contains the ASN.1 module for the two key management | This section contains the ASN.1 module for the two key management | |||
techniques defined in this document. This module imports types from | techniques defined in this document. This module imports types from | |||
other ASN.1 modules that are defined in [RFC5912] and [RFC6268]. | other ASN.1 modules that are defined in [RFC5912] and [RFC6268]. | |||
<CODE BEGINS> | <CODE BEGINS> | |||
CMSORIforPSK-2019 | CMSORIforPSK-2019 | |||
{ iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) | { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) | |||
smime(16) modules(0) id-mod-cms-ori-psk-2019(TBD0) } | smime(16) modules(0) id-mod-cms-ori-psk-2019(69) } | |||
DEFINITIONS EXPLICIT TAGS ::= | DEFINITIONS EXPLICIT TAGS ::= | |||
BEGIN | BEGIN | |||
-- EXPORTS All | -- EXPORTS All | |||
IMPORTS | IMPORTS | |||
AlgorithmIdentifier{}, KEY-DERIVATION | AlgorithmIdentifier{}, KEY-DERIVATION | |||
FROM AlgorithmInformation-2009 -- [RFC5912] | FROM AlgorithmInformation-2009 -- [RFC5912] | |||
skipping to change at page 12, line 22 ¶ | skipping to change at line 520 ¶ | |||
... } | ... } | |||
-- | -- | |||
-- Key Transport with Pre-Shared Key | -- Key Transport with Pre-Shared Key | |||
-- | -- | |||
ori-keyTransPSK OTHER-RECIPIENT ::= { | ori-keyTransPSK OTHER-RECIPIENT ::= { | |||
KeyTransPSKRecipientInfo IDENTIFIED BY id-ori-keyTransPSK } | KeyTransPSKRecipientInfo IDENTIFIED BY id-ori-keyTransPSK } | |||
id-ori OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) | id-ori OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) | |||
rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) TBD1 } | rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) 13 } | |||
id-ori-keyTransPSK OBJECT IDENTIFIER ::= { id-ori 1 } | id-ori-keyTransPSK OBJECT IDENTIFIER ::= { id-ori 1 } | |||
KeyTransPSKRecipientInfo ::= SEQUENCE { | KeyTransPSKRecipientInfo ::= SEQUENCE { | |||
version CMSVersion, -- always set to 0 | version CMSVersion, -- always set to 0 | |||
pskid PreSharedKeyIdentifier, | pskid PreSharedKeyIdentifier, | |||
kdfAlgorithm KeyDerivationAlgorithmIdentifier, | kdfAlgorithm KeyDerivationAlgorithmIdentifier, | |||
keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, | keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, | |||
ktris KeyTransRecipientInfos, | ktris KeyTransRecipientInfos, | |||
encryptedKey EncryptedKey } | encryptedKey EncryptedKey } | |||
skipping to change at page 13, line 28 ¶ | skipping to change at line 568 ¶ | |||
CMSORIforPSKOtherInfo ::= SEQUENCE { | CMSORIforPSKOtherInfo ::= SEQUENCE { | |||
psk OCTET STRING, | psk OCTET STRING, | |||
keyMgmtAlgType ENUMERATED { | keyMgmtAlgType ENUMERATED { | |||
keyTrans (5), | keyTrans (5), | |||
keyAgree (10) }, | keyAgree (10) }, | |||
keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, | keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, | |||
pskLength INTEGER (1..MAX), | pskLength INTEGER (1..MAX), | |||
kdkLength INTEGER (1..MAX) } | kdkLength INTEGER (1..MAX) } | |||
END | END | |||
<CODE ENDS> | <CODE ENDS> | |||
7. Security Considerations | 7. Security Considerations | |||
The security considerations in related to the CMS enveloped-data | The security considerations related to the CMS enveloped-data content | |||
content type in [RFC5652] and the security considerations related to | type in [RFC5652] and the security considerations related to the CMS | |||
the CMS authenticated-enveloped-data content type in [RFC5083] | authenticated-enveloped-data content type in [RFC5083] continue to | |||
continue to apply. | apply. | |||
Implementations of the key derivation function must compute the | Implementations of the key derivation function must compute the | |||
entire result, which in this specification is a key-encryption key, | entire result, which, in this specification, is a key-encryption key, | |||
before outputting any portion of the result. The resulting key- | before outputting any portion of the result. The resulting key- | |||
encryption key must be protected. Compromise of the key-encryption | encryption key must be protected. Compromise of the key-encryption | |||
key may result in the disclosure of all content-encryption keys or | key may result in the disclosure of all content-encryption keys or | |||
content-authenticated-encryption keys that were protected with that | content-authenticated-encryption keys that were protected with that | |||
keying material, which in turn may result in the disclosure of the | keying material; this, in turn, may result in the disclosure of the | |||
content. Note that there are two key-encryption keys when a PSK with | content. Note that there are two key-encryption keys when a PSK with | |||
a key agreement algorithm is used, with similar consequence for the | a key agreement algorithm is used, with similar consequences for the | |||
compromise of either one of these keys. | compromise of either one of these keys. | |||
Implementations must protect the pre-shared key (PSK), key transport | Implementations must protect the PSK, key transport private key, | |||
private key, the agreement private key, and the key-derivation key. | agreement private key, and key-derivation key. Compromise of the PSK | |||
Compromise of the PSK will make the encrypted content vulnerable to | will make the encrypted content vulnerable to the future invention of | |||
the future invention of a large-scale quantum computer. Compromise | a large-scale quantum computer. Compromise of the PSK and either the | |||
of the PSK and either the key transport private key or the agreement | key transport private key or the agreement private key may result in | |||
private key may result in the disclosure of all contents protected | the disclosure of all contents protected with that combination of | |||
with that combination of keying material. Compromise of the PSK and | keying material. Compromise of the PSK and the key-derivation key | |||
the key-derivation key may result in disclosure of all contents | may result in the disclosure of all contents protected with that | |||
protected with that combination of keying material. | combination of keying material. | |||
A large-scale quantum computer will essentially negate the security | A large-scale quantum computer will essentially negate the security | |||
provided by the key transport algorithm or the key agreement | provided by the key transport algorithm or the key agreement | |||
algorithm, which means that the attacker with a large-scale quantum | algorithm, which means that the attacker with a large-scale quantum | |||
computer can discover the key-derivation key. In addition a large- | computer can discover the key-derivation key. In addition, a large- | |||
scale quantum computer effectively cuts the security provided by a | scale quantum computer effectively cuts the security provided by a | |||
symmetric key algorithm in half. Therefore, the PSK needs at least | symmetric key algorithm in half. Therefore, the PSK needs at least | |||
256 bits of entropy to provide 128 bits of security. To match that | 256 bits of entropy to provide 128 bits of security. To match that | |||
same level of security, the key derivation function needs to be | same level of security, the key derivation function needs to be | |||
quantum-resistant and produce a key-encryption key that is at least | quantum resistant and produce a key-encryption key that is at least | |||
256 bits in length. Similarly, the content-encryption key or | 256 bits in length. Similarly, the content-encryption key or | |||
content-authenticated-encryption key needs to be at least 256 bits in | content-authenticated-encryption key needs to be at least 256 bits in | |||
length. | length. | |||
When using a PSK with a key transport or a key agreement algorithm, a | When using a PSK with a key transport or a key agreement algorithm, a | |||
key-encryption key is produced to encrypt the content-encryption key | key-encryption key is produced to encrypt the content-encryption key | |||
or content-authenticated-encryption key. If the key-encryption | or content-authenticated-encryption key. If the key-encryption | |||
algorithm is different than the algorithm used to protect the | algorithm is different than the algorithm used to protect the | |||
content, then the effective security is determined by the weaker of | content, then the effective security is determined by the weaker of | |||
the two algorithms. If, for example, content is encrypted with | the two algorithms. If, for example, content is encrypted with | |||
256-bit AES, and the key is wrapped with 128-bit AES, then at most | 256-bit AES and the key is wrapped with 128-bit AES, then, at most, | |||
128 bits of protection is provided. Implementers must ensure that | 128 bits of protection are provided. Implementers must ensure that | |||
the key-encryption algorithm is as strong or stronger than the | the key-encryption algorithm is as strong or stronger than the | |||
content-encryption algorithm or content-authenticated-encryption | content-encryption algorithm or content-authenticated-encryption | |||
algorithm. | algorithm. | |||
The selection of the key-derivation function imposes an upper bound | The selection of the key-derivation function imposes an upper bound | |||
on the strength of the resulting key-encryption key. The strength of | on the strength of the resulting key-encryption key. The strength of | |||
the selected key-derivation function should be at least as strong as | the selected key-derivation function should be at least as strong as | |||
the key-encryption algorithm that is selected. NIST SP 800-56C | the key-encryption algorithm that is selected. NIST SP 800-56C | |||
Revision 1 [NIST2018] offers advice on the security strength of | Revision 1 [NIST2018] offers advice on the security strength of | |||
several popular key-derivation functions. | several popular key-derivation functions. | |||
skipping to change at page 15, line 10 ¶ | skipping to change at line 645 ¶ | |||
KeyAgreePSKRecipientInfo. Doing so would make the content vulnerable | KeyAgreePSKRecipientInfo. Doing so would make the content vulnerable | |||
to the future invention of a large-scale quantum computer. | to the future invention of a large-scale quantum computer. | |||
Implementers should not send the same content in different messages, | Implementers should not send the same content in different messages, | |||
one using a quantum-resistant key management algorithm and the other | one using a quantum-resistant key management algorithm and the other | |||
using a non-quantum-resistant key management algorithm, even if the | using a non-quantum-resistant key management algorithm, even if the | |||
content-encryption key is generated independently. Doing so may | content-encryption key is generated independently. Doing so may | |||
allow an eavesdropper to correlate the messages, making the content | allow an eavesdropper to correlate the messages, making the content | |||
vulnerable to the future invention of a large-scale quantum computer. | vulnerable to the future invention of a large-scale quantum computer. | |||
This specification does not require that PSK is known only by the | This specification does not require that PSK be known only by the | |||
sender and recipients. The PSK may be known to a group. Since | sender and recipients. The PSK may be known to a group. Since | |||
confidentiality depends on the key transport or key agreement | confidentiality depends on the key transport or key agreement | |||
algorithm, knowledge of the PSK by other parties does not enable | algorithm, knowledge of the PSK by other parties does not inherently | |||
inherently eavesdropping. However, group members can record the | enable eavesdropping. However, group members can record the traffic | |||
traffic of other members, and then decrypt it if they ever gain | of other members and then decrypt it if they ever gain access to a | |||
access to a large-scale quantum computer. Also, when many parties | large-scale quantum computer. Also, when many parties know the PSK, | |||
know the PSK, there are many opportunities for theft of the PSK by an | there are many opportunities for theft of the PSK by an attacker. | |||
attacker. Once an attacker has the PSK, they can decrypt stored | Once an attacker has the PSK, they can decrypt stored traffic if they | |||
traffic if they ever gain access to a large-scale quantum computer in | ever gain access to a large-scale quantum computer in the same manner | |||
the same manner as a legitimate group member. | as a legitimate group member. | |||
Sound cryptographic key hygiene is to use a key for one and only one | Sound cryptographic key hygiene is to use a key for one and only one | |||
purpose. Use of the recipient's public key for both the traditional | purpose. Use of the recipient's public key for both the traditional | |||
CMS and the PSK-mixing variation specified in this document would be | CMS and the PSK-mixing variation specified in this document would be | |||
a violation of this principle; however, there is no known way for an | a violation of this principle; however, there is no known way for an | |||
attacker to take advantage of this situation. That said, an | attacker to take advantage of this situation. That said, an | |||
application should enforce separation whenever possible. For | application should enforce separation whenever possible. For | |||
example, a purpose identifier for use in the X.509 extended key usage | example, a purpose identifier for use in the X.509 extended key usage | |||
certificate extension [RFC5280] could be identified in the future to | certificate extension [RFC5280] could be identified in the future to | |||
indicate that a public key should only be used in conjunction with a | indicate that a public key should only be used in conjunction with or | |||
PSK, or only without. | without a PSK. | |||
Implementations must randomly generate key-derivation keys as well as | Implementations must randomly generate key-derivation keys as well as | |||
the content-encryption keys or content-authenticated-encryption keys. | content-encryption keys or content-authenticated-encryption keys. | |||
Also, the generation of public/private key pairs for the key | Also, the generation of public/private key pairs for the key | |||
transport and key agreement algorithms rely on a random numbers. The | transport and key agreement algorithms rely on random numbers. The | |||
use of inadequate pseudo-random number generators (PRNGs) to generate | use of inadequate pseudorandom number generators (PRNGs) to generate | |||
cryptographic keys can result in little or no security. An attacker | cryptographic keys can result in little or no security. An attacker | |||
may find it much easier to reproduce the PRNG environment that | may find it much easier to reproduce the PRNG environment that | |||
produced the keys, searching the resulting small set of | produced the keys, searching the resulting small set of | |||
possibilities, rather than brute force searching the whole key space. | possibilities, rather than brute-force searching the whole key space. | |||
The generation of quality random numbers is difficult. [RFC4086] | The generation of quality random numbers is difficult. [RFC4086] | |||
offers important guidance in this area. | offers important guidance in this area. | |||
Implementers should be aware that cryptographic algorithms become | Implementers should be aware that cryptographic algorithms become | |||
weaker with time. As new cryptanalysis techniques are developed and | weaker with time. As new cryptanalysis techniques are developed and | |||
computing performance improves, the work factor to break a particular | computing performance improves, the work factor to break a particular | |||
cryptographic algorithm will be reduced. Therefore, cryptographic | cryptographic algorithm will be reduced. Therefore, cryptographic | |||
algorithm implementations should be modular, allowing new algorithms | algorithm implementations should be modular, allowing new algorithms | |||
to be readily inserted. That is, implementers should be prepared for | to be readily inserted. That is, implementers should be prepared for | |||
the set of supported algorithms to change over time. | the set of supported algorithms to change over time. | |||
The security properties provided by the mechanisms specified in this | The security properties provided by the mechanisms specified in this | |||
document can be validated using formal methods. A ProVerif proof in | document can be validated using formal methods. A ProVerif proof in | |||
[H2019] shows that an attacker with a large-scale quantum computer | [H2019] shows that an attacker with a large-scale quantum computer | |||
that is capable of breaking the Diffie-Hellman key agreement | that is capable of breaking the Diffie-Hellman key agreement | |||
algorithm cannot disrupt the delivery of the content-encryption key | algorithm cannot disrupt the delivery of the content-encryption key | |||
to the recipient and the attacker cannot learn the content-encryption | to the recipient and that the attacker cannot learn the content- | |||
key from the protocol exchange. | encryption key from the protocol exchange. | |||
8. Privacy Considerations | 8. Privacy Considerations | |||
An observer can see which parties are using each PSK simply by | An observer can see which parties are using each PSK simply by | |||
watching the PSK key identifiers. However, the addition of these key | watching the PSK key identifiers. However, the addition of these key | |||
identifiers is not really making privacy worse. When key transport | identifiers does not really weaken the privacy situation. When key | |||
is used, the RecipientIdentifier is always present, and it clearly | transport is used, the RecipientIdentifier is always present, and it | |||
identifies each recipient to an observer. When key agreement is | clearly identifies each recipient to an observer. When key agreement | |||
used, either the IssuerAndSerialNumber or the RecipientKeyIdentifier | is used, either the IssuerAndSerialNumber or the | |||
is always present, and these clearly identify each recipient. | RecipientKeyIdentifier is always present, and these clearly identify | |||
each recipient. | ||||
9. IANA Considerations | 9. IANA Considerations | |||
One object identifier for the ASN.1 module in Section 6 was assigned | One object identifier for the ASN.1 module in Section 6 was assigned | |||
in the SMI Security for S/MIME Module Identifiers | in the "SMI Security for S/MIME Module Identifier | |||
(1.2.840.113549.1.9.16.0) [IANA-MOD] registry: | (1.2.840.113549.1.9.16.0)" registry [IANA]: | |||
id-mod-cms-ori-psk-2019 OBJECT IDENTIFIER ::= { | id-mod-cms-ori-psk-2019 OBJECT IDENTIFIER ::= { | |||
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) mod(0) TBD0 } | pkcs-9(9) smime(16) mod(0) 69 } | |||
One new registry was created for Other Recipient Info Identifiers | One new entry has been added in the "SMI Security for S/MIME Mail | |||
within the SMI Security for S/MIME Mail Security | Security (1.2.840.113549.1.9.16)" registry [IANA]: | |||
(1.2.840.113549.1.9.16) [IANA-SMIME] registry: | ||||
id-ori OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) | id-ori OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) | |||
rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) TBD1 } | rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) 13 } | |||
A new registry titled "SMI Security for S/MIME Other Recipient Info | ||||
Identifiers (1.2.840.113549.1.9.16.13)" has been created. | ||||
Updates to the new registry are to be made according to the | Updates to the new registry are to be made according to the | |||
Specification Required policy as defined in [RFC8126]. The expert is | Specification Required policy as defined in [RFC8126]. The expert is | |||
expected to ensure that any new values identify additions | expected to ensure that any new values identify additional | |||
RecipientInfo structures for use with the CMS. Object identifiers | RecipientInfo structures for use with the CMS. Object identifiers | |||
for other purposes should not be assigned in this arc. | for other purposes should not be assigned in this arc. | |||
Two assignments were made in the new SMI Security for Other Recipient | Two assignments were made in the new "SMI Security for S/MIME Other | |||
Info Identifiers (1.2.840.113549.1.9.16.TBD1) [IANA-ORI] registry | Recipient Info Identifiers (1.2.840.113549.1.9.16.13)" registry | |||
with references to this document: | [IANA] with references to this document: | |||
id-ori-keyTransPSK OBJECT IDENTIFIER ::= { | id-ori-keyTransPSK OBJECT IDENTIFIER ::= { | |||
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) id-ori(TBD1) 1 } | pkcs-9(9) smime(16) id-ori(13) 1 } | |||
id-ori-keyAgreePSK OBJECT IDENTIFIER ::= { | id-ori-keyAgreePSK OBJECT IDENTIFIER ::= { | |||
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) id-ori(TBD1) 2 } | pkcs-9(9) smime(16) id-ori(13) 2 } | |||
10. References | 10. References | |||
10.1. Normative References | 10.1. Normative References | |||
[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, March 1997. | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | ||||
<https://www.rfc-editor.org/info/rfc2119>. | ||||
[RFC5083] Housley, R., "Cryptographic Message Syntax (CMS) | [RFC5083] Housley, R., "Cryptographic Message Syntax (CMS) | |||
Authenticated-Enveloped-Data Content Type", RFC 5083, | Authenticated-Enveloped-Data Content Type", RFC 5083, | |||
November 2007. | DOI 10.17487/RFC5083, November 2007, | |||
<https://www.rfc-editor.org/info/rfc5083>. | ||||
[RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", RFC | [RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, | |||
5652, September 2009. | RFC 5652, DOI 10.17487/RFC5652, September 2009, | |||
<https://www.rfc-editor.org/info/rfc5652>. | ||||
[RFC5912] Hoffman, P., and J. Schaad, "New ASN.1 Modules for the | [RFC5912] Hoffman, P. and J. Schaad, "New ASN.1 Modules for the | |||
Public Key Infrastructure Using X.509 (PKIX)", RFC 5912, | Public Key Infrastructure Using X.509 (PKIX)", RFC 5912, | |||
June 2010. | DOI 10.17487/RFC5912, June 2010, | |||
<https://www.rfc-editor.org/info/rfc5912>. | ||||
[RFC6268] Schaad, J., S. Turner, "Additional New ASN.1 Modules for | [RFC6268] Schaad, J. and S. Turner, "Additional New ASN.1 Modules | |||
the Cryptographic Message Syntax (CMS) and the Public Key | for the Cryptographic Message Syntax (CMS) and the Public | |||
Infrastructure Using X.509 (PKIX)", RFC 6268, July 2011. | Key Infrastructure Using X.509 (PKIX)", RFC 6268, | |||
DOI 10.17487/RFC6268, July 2011, | ||||
<https://www.rfc-editor.org/info/rfc6268>. | ||||
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
RFC 8126, June 2017. | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
<https://www.rfc-editor.org/info/rfc8126>. | ||||
[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, May 2017. | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
[X680] ITU-T, "Information technology -- Abstract Syntax Notation | [X680] ITU-T, "Information technology -- Abstract Syntax Notation | |||
One (ASN.1): Specification of basic notation", ITU-T | One (ASN.1): Specification of basic notation", | |||
Recommendation X.680, 2015. | ITU-T Recommendation X.680, August 2015. | |||
[X690] ITU-T, "Information technology -- ASN.1 encoding rules: | [X690] 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, 2015. | (DER)", ITU-T Recommendation X.690, August 2015. | |||
10.2. Informative References | 10.2. Informative References | |||
[AES] National Institute of Standards and Technology, FIPS Pub | [AES] National Institute of Standards and Technology, "Advanced | |||
197: Advanced Encryption Standard (AES), 26 November 2001. | Encryption Standard (AES)", DOI 10.6028/NIST.FIPS.197, | |||
NIST PUB 197, November 2001, | ||||
<https://doi.org/10.6028/NIST.FIPS.197>. | ||||
[C2PQ] Hoffman, P., "The Transition from Classical to Post- | [C2PQ] Hoffman, P., "The Transition from Classical to Post- | |||
Quantum Cryptography", work-in-progress, draft-hoffman- | Quantum Cryptography", Work in Progress, Internet-Draft, | |||
c2pq-05, August 2018. | draft-hoffman-c2pq-06, 25 November 2019, | |||
<https://tools.ietf.org/html/draft-hoffman-c2pq-06>. | ||||
[FGHT2016] Fried, J., Gaudry, P., Heninger, N., and E. Thome, "A | [FGHT2016] Fried, J., Gaudry, P., Heninger, N., and E. Thome, "A | |||
kilobit hidden SNFS discrete logarithm computation", | kilobit hidden SNFS discrete logarithm computation", | |||
Cryptology ePrint Archive, Report 2016/961, 2016. | Cryptology ePrint Archive Report 2016/961, October 2016, | |||
https://eprint.iacr.org/2016/961.pdf. | <https://eprint.iacr.org/2016/961.pdf>. | |||
[H2019] Hammell, J., "Re: [lamps] WG Last Call for draft-ietf- | ||||
lamps-cms-mix-with-psk", <https://mailarchive.ietf.org/ | ||||
arch/msg/spasm/_6d_4jp3sOprAnbU2fp_yp_-6-k>, 27 May 2019. | ||||
[IANA-MOD] https://www.iana.org/assignments/smi-numbers/smi- | ||||
numbers.xhtml#security-smime-0. | ||||
[IANA-SMIME] https://www.iana.org/assignments/smi-numbers/smi- | [H2019] Hammell, J., "Subject: [lamps] WG Last Call for draft- | |||
numbers.xhtml#security-smime. | ietf-lamps-cms-mix-with-psk"", message to the IETF mailing | |||
list, May 2019, <https://mailarchive.ietf.org/arch/msg/ | ||||
spasm/_6d_4jp3sOprAnbU2fp_yp_-6-k>. | ||||
[IANA-ORI] https://www.iana.org/assignments/smi-numbers/smi- | [IANA] IANA, "Structure of Management Information (SMI) Numbers | |||
numbers.xhtml#security-smime-TBD1. | (MIB Module Registrations)", | |||
<https://www.iana.org/assignments/smi-numbers>. | ||||
[NAS2019] National Academies of Sciences, Engineering, and Medicine, | [NAS2019] National Academies of Sciences, Engineering, and Medicine, | |||
"Quantum Computing: Progress and Prospects", The National | "Quantum Computing: Progress and Prospects", | |||
Academies Press, DOI 10.17226/25196, 2019. | DOI 10.17226/25196, 2019, | |||
<https://doi.org/10.17226/25196>. | ||||
[NIST2018] Barker, E., Chen, L., and R. Davis, "Recommendation for | [NIST2018] Barker, E., Chen, L., and R. Davis, "Recommendation for | |||
Key-Derivation Methods in Key-Establishment Schemes", | Key-Derivation Methods in Key-Establishment Schemes", NIST | |||
NIST Special Publication 800-56C Rev. 1, April 2018, | Special Publication 800-56C Revision 1, April 2018, | |||
<https://nvlpubs.nist.gov/nistpubs/SpecialPublications/ | <https://nvlpubs.nist.gov/nistpubs/SpecialPublications/ | |||
NIST.SP.800-56Cr1.pdf>. | NIST.SP.800-56Cr1.pdf>. | |||
[S1994] Shor, P., "Algorithms for Quantum Computation: Discrete | ||||
Logarithms and Factoring", Proceedings of the 35th Annual | ||||
Symposium on Foundations of Computer Science, 1994, pp. | ||||
124-134. | ||||
[RFC2631] Rescorla, E., "Diffie-Hellman Key Agreement Method", | [RFC2631] Rescorla, E., "Diffie-Hellman Key Agreement Method", | |||
RFC 2631, June 1999. | RFC 2631, DOI 10.17487/RFC2631, June 1999, | |||
<https://www.rfc-editor.org/info/rfc2631>. | ||||
[RFC4086] D. Eastlake 3rd, D., Schiller, J., and S. Crocker, | [RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker, | |||
"Randomness Requirements for Security", RFC 4086, | "Randomness Requirements for Security", BCP 106, RFC 4086, | |||
June 2005. | DOI 10.17487/RFC4086, June 2005, | |||
<https://www.rfc-editor.org/info/rfc4086>. | ||||
[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
Housley, R., and W. Polk, "Internet X.509 Public Key | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
Infrastructure Certificate and Certificate Revocation List | Infrastructure Certificate and Certificate Revocation List | |||
(CRL) Profile", RFC 5280, May 2008. | (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | |||
<https://www.rfc-editor.org/info/rfc5280>. | ||||
[RFC5753] Turner, S., and D. Brown, "Use of Elliptic Curve | [RFC5753] Turner, S. and D. Brown, "Use of Elliptic Curve | |||
Cryptography (ECC) Algorithms in Cryptographic Message | Cryptography (ECC) Algorithms in Cryptographic Message | |||
Syntax (CMS)", RFC 5753, January 2010. | Syntax (CMS)", RFC 5753, DOI 10.17487/RFC5753, January | |||
2010, <https://www.rfc-editor.org/info/rfc5753>. | ||||
[RFC5869] Krawczyk, H., and P. Eronen, "HMAC-based Extract-and- | [RFC5869] Krawczyk, H. and P. Eronen, "HMAC-based Extract-and-Expand | |||
Expand Key Derivation Function (HKDF)", RFC 5869, | Key Derivation Function (HKDF)", RFC 5869, | |||
May 2010. | DOI 10.17487/RFC5869, May 2010, | |||
<https://www.rfc-editor.org/info/rfc5869>. | ||||
[RFC8017] Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch, | [RFC8017] Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch, | |||
"PKCS #1: RSA Cryptography Specifications Version 2.2", | "PKCS #1: RSA Cryptography Specifications Version 2.2", | |||
RFC 8017, November 2016. | RFC 8017, DOI 10.17487/RFC8017, November 2016, | |||
<https://www.rfc-editor.org/info/rfc8017>. | ||||
[RFC8619] Housley, R., "Algorithm Identifiers for the HMAC-based | [RFC8619] Housley, R., "Algorithm Identifiers for the HMAC-based | |||
Extract-and-Expand Key Derivation Function (HKDF)", June | Extract-and-Expand Key Derivation Function (HKDF)", | |||
2019. | RFC 8619, DOI 10.17487/RFC8619, June 2019, | |||
<https://www.rfc-editor.org/info/rfc8619>. | ||||
Appendix A: Key Transport with PSK Example | [S1994] Shor, P., "Algorithms for Quantum Computation: Discrete | |||
Logarithms and Factoring", Proceedings of the 35th Annual | ||||
Symposium on Foundations of Computer Science, pp. | ||||
124-134", November 1994. | ||||
Appendix A. Key Transport with PSK Example | ||||
This example shows the establishment of an AES-256 content-encryption | This example shows the establishment of an AES-256 content-encryption | |||
key using: | key using: | |||
- a pre-shared key of 256 bits; | ||||
- key transport using RSA PKCS#1 v1.5 with a 3072-bit key; | * a pre-shared key of 256 bits; | |||
- key derivation using HKDF with SHA-384; and | ||||
- key wrap using AES-256-KEYWRAP. | * key transport using RSA PKCS#1 v1.5 with a 3072-bit key; | |||
* key derivation using HKDF with SHA-384; and | ||||
* key wrap using AES-256-KEYWRAP. | ||||
In real-world use, the originator would encrypt the key-derivation | In real-world use, the originator would encrypt the key-derivation | |||
key in their own RSA public key as well as the recipient's public | key in their own RSA public key as well as the recipient's public | |||
key. This is omitted in an attempt to simplify the example. | key. This is omitted in an attempt to simplify the example. | |||
A.1. Originator Processing Example | A.1. Originator Processing Example | |||
The pre-shared key known to Alice and Bob, in hexadecimal: | The pre-shared key known to Alice and Bob, in hexadecimal, is: | |||
c244cdd11a0d1f39d9b61282770244fb0f6befb91ab7f96cb05213365cf95b15 | c244cdd11a0d1f39d9b61282770244fb0f6befb91ab7f96cb05213365cf95b15 | |||
The identifier assigned to the pre-shared key is: | The identifier assigned to the pre-shared key is: | |||
ptf-kmc:13614122112 | ptf-kmc:13614122112 | |||
Alice obtains Bob's public key: | Alice obtains Bob's public key: | |||
-----BEGIN PUBLIC KEY----- | -----BEGIN PUBLIC KEY----- | |||
MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA3ocW14cxncPJ47fnEjBZ | MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA3ocW14cxncPJ47fnEjBZ | |||
AyfC2lqapL3ET4jvV6C7gGeVrRQxWPDwl+cFYBBR2ej3j3/0ecDmu+XuVi2+s5JH | AyfC2lqapL3ET4jvV6C7gGeVrRQxWPDwl+cFYBBR2ej3j3/0ecDmu+XuVi2+s5JH | |||
Keeza+itfuhsz3yifgeEpeK8T+SusHhn20/NBLhYKbh3kiAcCgQ56dpDrDvDcLqq | Keeza+itfuhsz3yifgeEpeK8T+SusHhn20/NBLhYKbh3kiAcCgQ56dpDrDvDcLqq | |||
vS3jg/VO+OPnZbofoHOOevt8Q/roahJe1PlIyQ4udWB8zZezJ4mLLfbOA9YVaYXx | vS3jg/VO+OPnZbofoHOOevt8Q/roahJe1PlIyQ4udWB8zZezJ4mLLfbOA9YVaYXx | |||
2AHHZJevo3nmRnlgJXo6mE00E/6qkhjDHKSMdl2WG6mO9TCDZc9qY3cAJDU6Ir0v | 2AHHZJevo3nmRnlgJXo6mE00E/6qkhjDHKSMdl2WG6mO9TCDZc9qY3cAJDU6Ir0v | |||
SH7qUl8/vN13y4UOFkn8hM4kmZ6bJqbZt5NbjHtY4uQ0VMW3RyESzhrO02mrp39a | SH7qUl8/vN13y4UOFkn8hM4kmZ6bJqbZt5NbjHtY4uQ0VMW3RyESzhrO02mrp39a | |||
uLNnH3EXdXaV1tk75H3qC7zJaeGWMJyQfOE3YfEGRKn8fxubji716D8UecAxAzFy | uLNnH3EXdXaV1tk75H3qC7zJaeGWMJyQfOE3YfEGRKn8fxubji716D8UecAxAzFy | |||
FL6m1JiOyV5acAiOpxN14qRYZdHnXOM9DqGIGpoeY1UuD4Mo05osOqOUpBJHA9fS | FL6m1JiOyV5acAiOpxN14qRYZdHnXOM9DqGIGpoeY1UuD4Mo05osOqOUpBJHA9fS | |||
whSZG7VNf+vgNWTLNYSYLI04KiMdulnvU6ds+QPz+KKtAgMBAAE= | whSZG7VNf+vgNWTLNYSYLI04KiMdulnvU6ds+QPz+KKtAgMBAAE= | |||
skipping to change at page 20, line 22 ¶ | skipping to change at line 910 ¶ | |||
Keeza+itfuhsz3yifgeEpeK8T+SusHhn20/NBLhYKbh3kiAcCgQ56dpDrDvDcLqq | Keeza+itfuhsz3yifgeEpeK8T+SusHhn20/NBLhYKbh3kiAcCgQ56dpDrDvDcLqq | |||
vS3jg/VO+OPnZbofoHOOevt8Q/roahJe1PlIyQ4udWB8zZezJ4mLLfbOA9YVaYXx | vS3jg/VO+OPnZbofoHOOevt8Q/roahJe1PlIyQ4udWB8zZezJ4mLLfbOA9YVaYXx | |||
2AHHZJevo3nmRnlgJXo6mE00E/6qkhjDHKSMdl2WG6mO9TCDZc9qY3cAJDU6Ir0v | 2AHHZJevo3nmRnlgJXo6mE00E/6qkhjDHKSMdl2WG6mO9TCDZc9qY3cAJDU6Ir0v | |||
SH7qUl8/vN13y4UOFkn8hM4kmZ6bJqbZt5NbjHtY4uQ0VMW3RyESzhrO02mrp39a | SH7qUl8/vN13y4UOFkn8hM4kmZ6bJqbZt5NbjHtY4uQ0VMW3RyESzhrO02mrp39a | |||
uLNnH3EXdXaV1tk75H3qC7zJaeGWMJyQfOE3YfEGRKn8fxubji716D8UecAxAzFy | uLNnH3EXdXaV1tk75H3qC7zJaeGWMJyQfOE3YfEGRKn8fxubji716D8UecAxAzFy | |||
FL6m1JiOyV5acAiOpxN14qRYZdHnXOM9DqGIGpoeY1UuD4Mo05osOqOUpBJHA9fS | FL6m1JiOyV5acAiOpxN14qRYZdHnXOM9DqGIGpoeY1UuD4Mo05osOqOUpBJHA9fS | |||
whSZG7VNf+vgNWTLNYSYLI04KiMdulnvU6ds+QPz+KKtAgMBAAE= | whSZG7VNf+vgNWTLNYSYLI04KiMdulnvU6ds+QPz+KKtAgMBAAE= | |||
-----END PUBLIC KEY----- | -----END PUBLIC KEY----- | |||
Bob's RSA public key has the following key identifier: | Bob's RSA public key has the following key identifier: | |||
9eeb67c9b95a74d44d2f16396680e801b5cba49c | 9eeb67c9b95a74d44d2f16396680e801b5cba49c | |||
Alice randomly generates a content-encryption key: | Alice randomly generates a content-encryption key: | |||
c8adc30f4a3e20ac420caa76a68f5787c02ab42afea20d19672fd963a5338e83 | c8adc30f4a3e20ac420caa76a68f5787c02ab42afea20d19672fd963a5338e83 | |||
Alice randomly generates a key-derivation key: | Alice randomly generates a key-derivation key: | |||
df85af9e3cebffde6e9b9d24263db31114d0a8e33a0d50e05eb64578ccde81eb | df85af9e3cebffde6e9b9d24263db31114d0a8e33a0d50e05eb64578ccde81eb | |||
Alice encrypts the key-derivation key in Bob's public key: | Alice encrypts the key-derivation key in Bob's public key: | |||
4e6200431ed95e0e28f7288dba56d4b90e75959e068884664c43368f3d978f3d | ||||
8179e5837e3c27bf8dc1f6e2827b9ede969be77417516de07d90e37c560add01 | 52693f12140c91dea2b44c0b7936f6be46de8a7bfab072bcb6ecfd56b06a9f65 | |||
48deb0c9178088ccb72c068d8a9076b6a5e7ecc9093e30fdeaecc9e138d80626 | 1bd4669d336aef7b449e5cd9b151893b7c7a3b8e364394840b0a5434cbf10e1b | |||
74fcf685f3082b910839551cd8741beedeee6e87c08ff84f03ba87118730cdf7 | 5670aefd074faf380665d204fb95153543346f36c2125dba6f4d23d2bc61434b | |||
667002316f1a29a6cc596c7ddf95a51e398927d1916bf27929945de080fc7c80 | 5e36ff72b3eafe57c6cf7f74924c309f174b0b8753554b58ed33a8848d707a98 | |||
6af6281aed6492acffa4ef1b4f53e67fca9a417db2350a2277d586ee3cabefd3 | c0c2b1ddcfd09e31fe213ca0a48dd157bd7d842e85cc76f77710d58efeaa0525 | |||
b4a44f04d3c6803d54fe9a7159210dabedda9a94f310d303331da51c0218d92a | c651bcd1410fb47534ecabaf5ab7daabed809d4b97220caf6d4929c5fb684f7b | |||
2efb003792259195a9fd4cc403af613fdf1a6265ea70bf702fd1c6f734264c9a | b8692e6e70332ff9b3f7c11d6cac51d4a35593173d48f80ca843b89789d625e7 | |||
59196e8e8fd657fa028e272ef741eb7711fd5b3f4ea7da9c33df66bf487da710 | 997ad7d674d25a2a7d165a5f39b3cb6358e937bdb02ac8a524ac93113cedd9ad | |||
1c9bbfddaf1c073900a3ea99da513d8aa32605db07dc1c47504cab30c9304a85 | c68263025c0bb0997d716e58d4d7b69739bf591f3e71c7678dc0df96f3df9e8a | |||
d87377f603ec3df4056ddcf3d756fb7ed98254421a4ae151f17ad4e28c5ea077 | a5738f4f9ce21489f300e040891b20b2ab6d9051b3c2e68efa2fa9799a706878 | |||
63358dfb1ef5f73435f337b21a38c1a3fa697a530dd97e462f6b5fb2052a2d53 | d5f462018c021d6669ed649f9acdf78476810198bfb8bd41ffedc585eafa957e | |||
ea1d3625e4bed376e7ae49718aee2f575c401a26a29941d8da5b7ee9aca36471 | ||||
Alice produces a 256-bit key-encryption key with HKDF using SHA-384; | Alice produces a 256-bit key-encryption key with HKDF using SHA-384; | |||
the secret value is the key-derivation key; the 'info' is the DER- | the secret value is the key-derivation key; and the 'info' is the | |||
encoded CMSORIforPSKOtherInfo structure with the following values: | DER-encoded CMSORIforPSKOtherInfo structure with the following | |||
0 56: SEQUENCE { | values: | |||
2 32: OCTET STRING | ||||
: C2 44 CD D1 1A 0D 1F 39 D9 B6 12 82 77 02 44 FB | 0 56: SEQUENCE { | |||
: 0F 6B EF B9 1A B7 F9 6C B0 52 13 36 5C F9 5B 15 | 2 32: OCTET STRING | |||
36 1: ENUMERATED 5 | : C2 44 CD D1 1A 0D 1F 39 D9 B6 12 82 77 02 44 FB | |||
39 11: SEQUENCE { | : 0F 6B EF B9 1A B7 F9 6C B0 52 13 36 5C F9 5B 15 | |||
41 9: OBJECT IDENTIFIER aes256-wrap | 36 1: ENUMERATED 5 | |||
: { 2 16 840 1 101 3 4 1 45 } | 39 11: SEQUENCE { | |||
: } | 41 9: OBJECT IDENTIFIER aes256-wrap (2 16 840 1 101 3 4 1 45) | |||
52 1: INTEGER 32 | : } | |||
55 1: INTEGER 32 | 52 1: INTEGER 32 | |||
: } | 55 1: INTEGER 32 | |||
: } | ||||
The DER encoding of CMSORIforPSKOtherInfo produces 58 octets: | The DER encoding of CMSORIforPSKOtherInfo produces 58 octets: | |||
30380420c244cdd11a0d1f39d9b61282770244fb0f6befb91ab7f96cb0521336 | 30380420c244cdd11a0d1f39d9b61282770244fb0f6befb91ab7f96cb0521336 | |||
5cf95b150a0105300b060960864801650304012d020120020120 | 5cf95b150a0105300b060960864801650304012d020120020120 | |||
The HKDF output is 256 bits: | The HKDF output is 256 bits: | |||
a14d87451dfd11d83cd54ffe2bd38c49a2adfed3ac49f1d3e62bbdc64ae43b32 | ||||
Alice uses AES-KEY-WRAP to encrypt the 256-bit content-encryption | f319e9cebb35f1c6a7a9709b8760b9d0d3e30e16c5b2b69347e9f00ca540a232 | |||
key with the key-encryption key: | ||||
ae4ea1d99e78fcdcea12d9f10d991ac71502939ee0c30ebdcc97dd1fc5ba3566 | Alice uses AES-KEY-WRAP to encrypt the 256-bit content-encryption key | |||
c83d0dd5d1b4faa5 | with the key-encryption key: | |||
ea0947250fa66cd525595e52a69aaade88efcf1b0f108abe291060391b1cdf59 | ||||
07f36b4067e45342 | ||||
Alice encrypts the content using AES-256-GCM with the content- | Alice encrypts the content using AES-256-GCM with the content- | |||
encryption key. The 12-octet nonce used is: | encryption key. The 12-octet nonce used is: | |||
cafebabefacedbaddecaf888 | cafebabefacedbaddecaf888 | |||
The content plaintext is: | The content plaintext is: | |||
48656c6c6f2c20776f726c6421 | 48656c6c6f2c20776f726c6421 | |||
The resulting ciphertext is: | The resulting ciphertext is: | |||
9af2d16f21547fcefed9b3ef2d | 9af2d16f21547fcefed9b3ef2d | |||
The resulting 12-octet authentication tag is: | The resulting 12-octet authentication tag is: | |||
a0e5925cc184e0172463c44c | a0e5925cc184e0172463c44c | |||
A.2. ContentInfo and AuthEnvelopedData | A.2. ContentInfo and AuthEnvelopedData | |||
Alice encodes the AuthEnvelopedData and the ContentInfo, and | Alice encodes the AuthEnvelopedData and the ContentInfo and sends the | |||
sends the result to Bob. The resulting structure is: | result to Bob. The resulting structure is: | |||
0 650: SEQUENCE { | 0 650: SEQUENCE { | |||
4 11: OBJECT IDENTIFIER authEnvelopedData | 4 11: OBJECT IDENTIFIER | |||
: { 1 2 840 113549 1 9 16 1 23 } | : authEnvelopedData (1 2 840 113549 1 9 16 1 23) | |||
17 633: [0] { | 17 633: [0] { | |||
21 629: SEQUENCE { | 21 629: SEQUENCE { | |||
25 1: INTEGER 0 | 25 1: INTEGER 0 | |||
28 551: SET { | 28 551: SET { | |||
32 547: [4] { | 32 547: [4] { | |||
36 11: OBJECT IDENTIFIER ** Placeholder ** | 36 11: OBJECT IDENTIFIER | |||
: { 1 2 840 113549 1 9 16 TBD 1 } | : keyTransPSK (1 2 840 113549 1 9 16 13 1) | |||
49 530: SEQUENCE { | 49 530: SEQUENCE { | |||
53 1: INTEGER 0 | 53 1: INTEGER 0 | |||
56 19: OCTET STRING 'ptf-kmc:13614122112' | 56 19: OCTET STRING 'ptf-kmc:13614122112' | |||
77 13: SEQUENCE { | 77 13: SEQUENCE { | |||
79 11: OBJECT IDENTIFIER ** Placeholder ** | 79 11: OBJECT IDENTIFIER | |||
: { 1 2 840 113549 1 9 16 3 TBD } | : hkdf-with-sha384 (1 2 840 113549 1 9 16 3 29) | |||
: } | : } | |||
92 11: SEQUENCE { | 92 11: SEQUENCE { | |||
94 9: OBJECT IDENTIFIER aes256-wrap | 94 9: OBJECT IDENTIFIER | |||
: { 2 16 840 1 101 3 4 1 45 } | : aes256-wrap (2 16 840 1 101 3 4 1 45) | |||
: } | : } | |||
105 432: SEQUENCE { | 105 432: SEQUENCE { | |||
109 428: SEQUENCE { | 109 428: SEQUENCE { | |||
113 1: INTEGER 2 | 113 1: INTEGER 2 | |||
116 20: [0] | 116 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 | |||
138 13: SEQUENCE { | 138 13: SEQUENCE { | |||
140 9: OBJECT IDENTIFIER rsaEncryption | 140 9: OBJECT IDENTIFIER | |||
: { 1 2 840 113549 1 1 1 } | : rsaEncryption (1 2 840 113549 1 1 1) | |||
151 0: NULL | 151 0: NULL | |||
: } | : } | |||
153 384: OCTET STRING | 153 384: OCTET STRING | |||
: 18 09 D6 23 17 DF 2D 09 55 57 3B FE 75 95 EB 6A | : 52 69 3F 12 14 0C 91 DE A2 B4 4C 0B 79 36 F6 BE | |||
: 3D 57 84 6C 69 C1 49 0B F1 11 1A BB 40 0C D8 B5 | : 46 DE 8A 7B FA B0 72 BC B6 EC FD 56 B0 6A 9F 65 | |||
: 26 5F D3 62 4B E2 D8 E4 CA EC 6A 12 36 CA 38 E3 | : 1B D4 66 9D 33 6A EF 7B 44 9E 5C D9 B1 51 89 3B | |||
: A0 7D AA E0 5F A1 E3 BC 59 F3 AD A8 8D 95 A1 6B | : 7C 7A 3B 8E 36 43 94 84 0B 0A 54 34 CB F1 0E 1B | |||
: 06 85 20 93 C7 C5 C0 05 62 ED DF 02 1D FE 68 7C | : 56 70 AE FD 07 4F AF 38 06 65 D2 04 FB 95 15 35 | |||
: 18 A1 3A AB AA 59 92 30 6A 1B 92 73 D5 01 C6 5B | : 43 34 6F 36 C2 12 5D BA 6F 4D 23 D2 BC 61 43 4B | |||
: FD 1E BB A9 B9 D2 7F 48 49 7F 3C 4F 3C 13 E3 2B | : 5E 36 FF 72 B3 EA FE 57 C6 CF 7F 74 92 4C 30 9F | |||
: 2A 19 F1 7A CD BC 56 28 EF 7F CA 4F 69 6B 7E 92 | : 17 4B 0B 87 53 55 4B 58 ED 33 A8 84 8D 70 7A 98 | |||
: 66 22 0D 13 B7 23 AD 41 9E 5E 98 2A 80 B7 6C 77 | : C0 C2 B1 DD CF D0 9E 31 FE 21 3C A0 A4 8D D1 57 | |||
: FF 9B 76 B1 04 BA 30 6D 4B 4D F9 25 57 E0 7F 0E | : BD 7D 84 2E 85 CC 76 F7 77 10 D5 8E FE AA 05 25 | |||
: 95 9A 43 6D 14 D5 72 3F AA 8F 66 35 40 D0 E3 71 | : C6 51 BC D1 41 0F B4 75 34 EC AB AF 5A B7 DA AB | |||
: 4B 7F 20 9D ED 67 EA 33 79 CD AB 84 16 72 07 D2 | : ED 80 9D 4B 97 22 0C AF 6D 49 29 C5 FB 68 4F 7B | |||
: AC 8D 3A DA 12 43 B7 2F 3A CF 91 3E F1 D9 58 20 | : B8 69 2E 6E 70 33 2F F9 B3 F7 C1 1D 6C AC 51 D4 | |||
: 6D F2 9C 09 E1 EC D2 0B 82 BE 5D 69 77 6F FE F7 | : A3 55 93 17 3D 48 F8 0C A8 43 B8 97 89 D6 25 E7 | |||
: EB F6 31 C0 D9 B7 15 BF D0 24 F3 05 1F FF 48 76 | : 99 7A D7 D6 74 D2 5A 2A 7D 16 5A 5F 39 B3 CB 63 | |||
: 1D 73 17 19 2C 38 C6 D5 86 BD 67 82 2D B2 61 AA | : 58 E9 37 BD B0 2A C8 A5 24 AC 93 11 3C ED D9 AD | |||
: 08 C7 E4 37 34 D1 2D E0 51 32 15 4A AC 6B 2B 28 | : C6 82 63 02 5C 0B B0 99 7D 71 6E 58 D4 D7 B6 97 | |||
: 5B CD FA 7C 65 89 2F A2 63 DB AB 64 88 43 CC 66 | : 39 BF 59 1F 3E 71 C7 67 8D C0 DF 96 F3 DF 9E 8A | |||
: 27 84 29 AC 15 5F 3B 9E 5B DF 99 AE 4F 1B B2 BC | : A5 73 8F 4F 9C E2 14 89 F3 00 E0 40 89 1B 20 B2 | |||
: 19 6C 17 A1 99 A5 CF F7 80 32 11 88 F1 9D B3 6F | : AB 6D 90 51 B3 C2 E6 8E FA 2F A9 79 9A 70 68 78 | |||
: 4B 16 5F 3F 03 F7 D2 04 3D DE 5F 30 CD 8B BB 3A | : D5 F4 62 01 8C 02 1D 66 69 ED 64 9F 9A CD F7 84 | |||
: 38 DA 9D EC 16 6C 36 4F 8B 7E 99 AA 99 FB 42 D6 | : 76 81 01 98 BF B8 BD 41 FF ED C5 85 EA FA 95 7E | |||
: 1A FF 3C 85 D7 A2 30 74 2C D3 AA F7 18 2A 25 3C | : EA 1D 36 25 E4 BE D3 76 E7 AE 49 71 8A EE 2F 57 | |||
: B5 02 C4 17 62 21 97 F1 E9 81 83 D0 4E BF 5B 5D | : 5C 40 1A 26 A2 99 41 D8 DA 5B 7E E9 AC A3 64 71 | |||
: } | ||||
: } | : } | |||
: } | ||||
541 40: OCTET STRING | 541 40: OCTET STRING | |||
: AE 4E A1 D9 9E 78 FC DC EA 12 D9 F1 0D 99 1A C7 | : EA 09 47 25 0F A6 6C D5 25 59 5E 52 A6 9A AA DE | |||
: 15 02 93 9E E0 C3 0E BD CC 97 DD 1F C5 BA 35 66 | : 88 EF CF 1B 0F 10 8A BE 29 10 60 39 1B 1C DF 59 | |||
: C8 3D 0D D5 D1 B4 FA A5 | : 07 F3 6B 40 67 E4 53 42 | |||
: } | ||||
: } | : } | |||
: } | : } | |||
: } | ||||
583 55: SEQUENCE { | 583 55: SEQUENCE { | |||
585 9: OBJECT IDENTIFIER data { 1 2 840 113549 1 7 1 } | 585 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1) | |||
596 27: SEQUENCE { | 596 27: SEQUENCE { | |||
598 9: OBJECT IDENTIFIER aes256-GCM | 598 9: OBJECT IDENTIFIER | |||
: { 2 16 840 1 101 3 4 1 46 } | : aes256-GCM (2 16 840 1 101 3 4 1 46) | |||
609 14: SEQUENCE { | 609 14: SEQUENCE { | |||
611 12: OCTET STRING CA FE BA BE FA CE DB AD DE CA F8 88 | 611 12: OCTET STRING | |||
: CA FE BA BE FA CE DB AD DE CA F8 88 | ||||
: } | ||||
: } | : } | |||
625 13: [0] | ||||
: 9A F2 D1 6F 21 54 7F CE FE D9 B3 EF 2D | ||||
: } | : } | |||
625 13: [0] 9A F2 D1 6F 21 54 7F CE FE D9 B3 EF 2D | ||||
: } | ||||
640 12: OCTET STRING A0 E5 92 5C C1 84 E0 17 24 63 C4 4C | 640 12: OCTET STRING A0 E5 92 5C C1 84 E0 17 24 63 C4 4C | |||
: } | : } | |||
: } | : } | |||
: } | : } | |||
A.3. Recipient Processing Example | A.3. Recipient Processing Example | |||
Bob's private key: | Bob's private key is: | |||
-----BEGIN RSA PRIVATE KEY----- | -----BEGIN RSA 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 | |||
khjDHKSMdl2WG6mO9TCDZc9qY3cAJDU6Ir0vSH7qUl8/vN13y4UOFkn8hM4kmZ6b | khjDHKSMdl2WG6mO9TCDZc9qY3cAJDU6Ir0vSH7qUl8/vN13y4UOFkn8hM4kmZ6b | |||
JqbZt5NbjHtY4uQ0VMW3RyESzhrO02mrp39auLNnH3EXdXaV1tk75H3qC7zJaeGW | JqbZt5NbjHtY4uQ0VMW3RyESzhrO02mrp39auLNnH3EXdXaV1tk75H3qC7zJaeGW | |||
MJyQfOE3YfEGRKn8fxubji716D8UecAxAzFyFL6m1JiOyV5acAiOpxN14qRYZdHn | MJyQfOE3YfEGRKn8fxubji716D8UecAxAzFyFL6m1JiOyV5acAiOpxN14qRYZdHn | |||
XOM9DqGIGpoeY1UuD4Mo05osOqOUpBJHA9fSwhSZG7VNf+vgNWTLNYSYLI04KiMd | XOM9DqGIGpoeY1UuD4Mo05osOqOUpBJHA9fSwhSZG7VNf+vgNWTLNYSYLI04KiMd | |||
ulnvU6ds+QPz+KKtAgMBAAECggGATFfkSkUjjJCjLvDk4aScpSx6+Rakf2hrdS3x | ulnvU6ds+QPz+KKtAgMBAAECggGATFfkSkUjjJCjLvDk4aScpSx6+Rakf2hrdS3x | |||
skipping to change at page 24, line 49 ¶ | skipping to change at line 1119 ¶ | |||
x+c5H30YFJ4ipE3eRRRmAUi4ghY5WgD+1hw8fqyUW7E7l5LbSbGEUVXtrkU5G64T | x+c5H30YFJ4ipE3eRRRmAUi4ghY5WgD+1hw8fqyUW7E7l5LbSbGEUVXtrkU5G64T | |||
UR91LEyMF8OPATdiV/KD4PWYkgaqRm3tVEuCVACDTQkqNsOOi3YPQcm270w6gxfQ | UR91LEyMF8OPATdiV/KD4PWYkgaqRm3tVEuCVACDTQkqNsOOi3YPQcm270w6gxfQ | |||
SOEy/kdhCFexJFA8uZvmh6Cp2crczxyBilR/yCxqKOONqlFdOQKBwFbJk5eHPjJz | SOEy/kdhCFexJFA8uZvmh6Cp2crczxyBilR/yCxqKOONqlFdOQKBwFbJk5eHPjJz | |||
AYueKMQESPGYCrwIqxgZGCxaqeVArHvKsEDx5whI6JWoFYVkFA8F0MyhukoEb/2x | AYueKMQESPGYCrwIqxgZGCxaqeVArHvKsEDx5whI6JWoFYVkFA8F0MyhukoEb/2x | |||
2qB5T88Dg3EbqjTiLg3qxrWJ2OxtUo8pBP2I2wbl2NOwzcbrlYhzEZ8bJyxZu5i1 | 2qB5T88Dg3EbqjTiLg3qxrWJ2OxtUo8pBP2I2wbl2NOwzcbrlYhzEZ8bJyxZu5i1 | |||
sYILC8PJ4Qzw6jS4Qpm4y1WHz8e/ElW6VyfmljZYA7f9WMntdfeQVqCVzNTvKn6f | sYILC8PJ4Qzw6jS4Qpm4y1WHz8e/ElW6VyfmljZYA7f9WMntdfeQVqCVzNTvKn6f | |||
hg6GSpJTzp4LV3ougi9nQuWXZF2wInsXkLYpsiMbL6Fz34RwohJtYA== | hg6GSpJTzp4LV3ougi9nQuWXZF2wInsXkLYpsiMbL6Fz34RwohJtYA== | |||
-----END RSA PRIVATE KEY----- | -----END RSA PRIVATE KEY----- | |||
Bob decrypts the key-derivation key with his RSA private key: | Bob decrypts the key-derivation key with his RSA private key: | |||
df85af9e3cebffde6e9b9d24263db31114d0a8e33a0d50e05eb64578ccde81eb | df85af9e3cebffde6e9b9d24263db31114d0a8e33a0d50e05eb64578ccde81eb | |||
Bob produces a 256-bit key-encryption key with HKDF using SHA-384; | Bob produces a 256-bit key-encryption key with HKDF using SHA-384; | |||
the secret value is the key-derivation key; the 'info' is the DER- | the secret value is the key-derivation key; and the 'info' is the | |||
encoded CMSORIforPSKOtherInfo structure with the same values as | DER-encoded CMSORIforPSKOtherInfo structure with the same values as | |||
shown in A.1. The HKDF output is 256 bits: | shown in Appendix A.1. The HKDF output is 256 bits: | |||
a14d87451dfd11d83cd54ffe2bd38c49a2adfed3ac49f1d3e62bbdc64ae43b32 | ||||
f319e9cebb35f1c6a7a9709b8760b9d0d3e30e16c5b2b69347e9f00ca540a232 | ||||
Bob uses AES-KEY-WRAP to decrypt the content-encryption key with the | ||||
key-encryption key; the content-encryption key is: | ||||
Bob uses AES-KEY-WRAP to decrypt the content-encryption key | ||||
with the key-encryption key; the content-encryption key is: | ||||
c8adc30f4a3e20ac420caa76a68f5787c02ab42afea20d19672fd963a5338e83 | c8adc30f4a3e20ac420caa76a68f5787c02ab42afea20d19672fd963a5338e83 | |||
Bob decrypts the content using AES-256-GCM with the content- | Bob decrypts the content using AES-256-GCM with the content- | |||
encryption key, and checks the received authentication tag. The | encryption key and checks the received authentication tag. The | |||
12-octet nonce used is: | 12-octet nonce used is: | |||
cafebabefacedbaddecaf888 | cafebabefacedbaddecaf888 | |||
The 12-octet authentication tag is: | The 12-octet authentication tag is: | |||
a0e5925cc184e0172463c44c | a0e5925cc184e0172463c44c | |||
The received ciphertext content is: | The received ciphertext content is: | |||
9af2d16f21547fcefed9b3ef2d | 9af2d16f21547fcefed9b3ef2d | |||
The resulting plaintext content is: | The resulting plaintext content is: | |||
48656c6c6f2c20776f726c6421 | 48656c6c6f2c20776f726c6421 | |||
Appendix B: Key Agreement with PSK Example | Appendix B. Key Agreement with PSK Example | |||
This example shows the establishment of an AES-256 content-encryption | This example shows the establishment of an AES-256 content-encryption | |||
key using: | key using: | |||
- a pre-shared key of 256 bits; | ||||
- key agreement using ECDH on curve P-384 and X9.63 KDF | * a pre-shared key of 256 bits; | |||
with SHA-384; | ||||
- key derivation using HKDF with SHA-384; and | * key agreement using ECDH on curve P-384 and X9.63 KDF with SHA- | |||
- key wrap using AES-256-KEYWRAP. | 384; | |||
* key derivation using HKDF with SHA-384; and | ||||
* key wrap using AES-256-KEYWRAP. | ||||
In real-world use, the originator would treat themselves as an | In real-world use, the originator would treat themselves as an | |||
additional recipient by performing key agreement with their own | additional recipient by performing key agreement with their own | |||
static public key and the ephemeral private key generated for this | static public key and the ephemeral private key generated for this | |||
message. This is omitted in an attempt to simplify the example. | message. This is omitted in an attempt to simplify the example. | |||
B.1. Originator Processing Example | B.1. Originator Processing Example | |||
The pre-shared key known to Alice and Bob, in hexadecimal: | The pre-shared key known to Alice and Bob, in hexadecimal, is: | |||
4aa53cbf500850dd583a5d9821605c6fa228fb5917f87c1c078660214e2d83e4 | 4aa53cbf500850dd583a5d9821605c6fa228fb5917f87c1c078660214e2d83e4 | |||
The identifier assigned to the pre-shared key is: | The identifier assigned to the pre-shared key is: | |||
ptf-kmc:216840110121 | ptf-kmc:216840110121 | |||
Alice randomly generates a content-encryption key: | Alice randomly generates a content-encryption key: | |||
937b1219a64d57ad81c05cc86075e86017848c824d4e85800c731c5b7b091033 | 937b1219a64d57ad81c05cc86075e86017848c824d4e85800c731c5b7b091033 | |||
Alice obtains Bob's static ECDH public key: | Alice obtains Bob's static ECDH public key: | |||
-----BEGIN PUBLIC KEY----- | -----BEGIN PUBLIC KEY----- | |||
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEScGPBO9nmUwGrgbGEoFY9HR/bCo0WyeY | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEScGPBO9nmUwGrgbGEoFY9HR/bCo0WyeY | |||
/dePQVrwZmwN2yMJmO2d1kWCvLTz8U7atinxyIRe9CV54yau1KWU/wbkhPDnzuSM | /dePQVrwZmwN2yMJmO2d1kWCvLTz8U7atinxyIRe9CV54yau1KWU/wbkhPDnzuSM | |||
YkcpxMGo32z3JetEloW5aFOja13vv/W5 | YkcpxMGo32z3JetEloW5aFOja13vv/W5 | |||
-----END PUBLIC KEY----- | -----END PUBLIC KEY----- | |||
It has a key identifier of: | It has a key identifier of: | |||
e8218b98b8b7d86b5e9ebdc8aeb8c4ecdc05c529 | e8218b98b8b7d86b5e9ebdc8aeb8c4ecdc05c529 | |||
Alice generates an ephemeral ECDH key pair on the same curve: | Alice generates an ephemeral ECDH key pair on the same curve: | |||
-----BEGIN EC PRIVATE KEY----- | -----BEGIN EC PRIVATE KEY----- | |||
MIGkAgEBBDCMiWLG44ik+L8cYVvJrQdLcFA+PwlgRF+Wt1Ab25qUh8OB7OePWjxp | MIGkAgEBBDCMiWLG44ik+L8cYVvJrQdLcFA+PwlgRF+Wt1Ab25qUh8OB7OePWjxp | |||
/b8P6IOuI6GgBwYFK4EEACKhZANiAAQ5G0EmJk/2ks8sXY1kzbuG3Uu3ttWwQRXA | /b8P6IOuI6GgBwYFK4EEACKhZANiAAQ5G0EmJk/2ks8sXY1kzbuG3Uu3ttWwQRXA | |||
LFDJICjvYfr+yTpOQVkchm88FAh9MEkw4NKctokKNgpsqXyrT3DtOg76oIYENpPb | LFDJICjvYfr+yTpOQVkchm88FAh9MEkw4NKctokKNgpsqXyrT3DtOg76oIYENpPb | |||
GE5lJdjPx9sBsZQdABwlsU0Zb7P/7i8= | GE5lJdjPx9sBsZQdABwlsU0Zb7P/7i8= | |||
-----END EC PRIVATE KEY----- | -----END EC PRIVATE KEY----- | |||
Alice computes a shared secret, called Z, using the Bob's static | Alice computes a shared secret called "Z" using Bob's static ECDH | |||
ECDH public key and her ephemeral ECDH private key; Z is: | public key and her ephemeral ECDH private key; Z is: | |||
3f015ed0ff4b99523a95157bbe77e9cc0ee52fcffeb7e41eac79d1c11b6cc556 | 3f015ed0ff4b99523a95157bbe77e9cc0ee52fcffeb7e41eac79d1c11b6cc556 | |||
19cf8807e6d800c2de40240fe0e26adc | 19cf8807e6d800c2de40240fe0e26adc | |||
Alice computes the pairwise key-encryption key, called KEK1, from Z | Alice computes the pairwise key-encryption key, called "KEK1", from Z | |||
using the X9.63 KDF with the ECC-CMS-SharedInfo structure with the | using the X9.63 KDF with the ECC-CMS-SharedInfo structure with the | |||
following values: | following values: | |||
0 21: SEQUENCE { | ||||
2 11: SEQUENCE { | 0 21: SEQUENCE { | |||
4 9: OBJECT IDENTIFIER aes256-wrap | 2 11: SEQUENCE { | |||
: { 2 16 840 1 101 3 4 1 45 } | 4 9: OBJECT IDENTIFIER aes256-wrap (2 16 840 1 101 3 4 1 45) | |||
: } | : } | |||
15 6: [2] { | 15 6: [2] { | |||
17 4: OCTET STRING 00 00 00 20 | 17 4: OCTET STRING 00 00 00 20 | |||
: } | : } | |||
: } | : } | |||
The DER encoding of ECC-CMS-SharedInfo produces 23 octets: | The DER encoding of ECC-CMS-SharedInfo produces 23 octets: | |||
3015300b060960864801650304012da206040400000020 | 3015300b060960864801650304012da206040400000020 | |||
The X9.63 KDF output is the 256-bit KEK1: | The X9.63 KDF output is the 256-bit KEK1: | |||
27dc25ddb0b425f7a968ceada80a8f73c6ccaab115baafcce4a22a45d6b8f3da | 27dc25ddb0b425f7a968ceada80a8f73c6ccaab115baafcce4a22a45d6b8f3da | |||
Alice produces the 256-bit KEK2 with HKDF using SHA-384; the secret | Alice produces the 256-bit KEK2 with HKDF using SHA-384; the secret | |||
value is KEK1; the 'info' is the DER-encoded CMSORIforPSKOtherInfo | value is KEK1; and the 'info' is the DER-encoded | |||
structure with the following values: | CMSORIforPSKOtherInfo structure with the following values: | |||
0 56: SEQUENCE { | ||||
2 32: OCTET STRING | 0 56: SEQUENCE { | |||
: 4A A5 3C BF 50 08 50 DD 58 3A 5D 98 21 60 5C 6F | 2 32: OCTET STRING | |||
: A2 28 FB 59 17 F8 7C 1C 07 86 60 21 4E 2D 83 E4 | : 4A A5 3C BF 50 08 50 DD 58 3A 5D 98 21 60 5C 6F | |||
36 1: ENUMERATED 10 | : A2 28 FB 59 17 F8 7C 1C 07 86 60 21 4E 2D 83 E4 | |||
39 11: SEQUENCE { | 36 1: ENUMERATED 10 | |||
41 9: OBJECT IDENTIFIER aes256-wrap | 39 11: SEQUENCE { | |||
: { 2 16 840 1 101 3 4 1 45 } | 41 9: OBJECT IDENTIFIER aes256-wrap (2 16 840 1 101 3 4 1 45) | |||
: } | : } | |||
52 1: INTEGER 32 | 52 1: INTEGER 32 | |||
55 1: INTEGER 32 | 55 1: INTEGER 32 | |||
: } | : } | |||
The DER encoding of CMSORIforPSKOtherInfo produces 58 octets: | The DER encoding of CMSORIforPSKOtherInfo produces 58 octets: | |||
303804204aa53cbf500850dd583a5d9821605c6fa228fb5917f87c1c07866021 | 303804204aa53cbf500850dd583a5d9821605c6fa228fb5917f87c1c07866021 | |||
4e2d83e40a010a300b060960864801650304012d020120020120 | 4e2d83e40a010a300b060960864801650304012d020120020120 | |||
The HKDF output is the 256-bit KEK2: | The HKDF output is the 256-bit KEK2: | |||
7de693ee30ae22b5f8f6cd026c2164103f4e1430f1ab135dc1fb98954f9830bb | 7de693ee30ae22b5f8f6cd026c2164103f4e1430f1ab135dc1fb98954f9830bb | |||
Alice uses AES-KEY-WRAP to encrypt the content-encryption key | Alice uses AES-KEY-WRAP to encrypt the content-encryption key with | |||
with the KEK2; the wrapped key is: | the KEK2; the wrapped key is: | |||
229fe0b45e40003e7d8244ec1b7e7ffb2c8dca16c36f5737222553a71263a92b | 229fe0b45e40003e7d8244ec1b7e7ffb2c8dca16c36f5737222553a71263a92b | |||
de08866a602d63f4 | de08866a602d63f4 | |||
Alice encrypts the content using AES-256-GCM with the content- | Alice encrypts the content using AES-256-GCM with the content- | |||
encryption key. The 12-octet nonce used is: | encryption key. The 12-octet nonce used is: | |||
dbaddecaf888cafebabeface | dbaddecaf888cafebabeface | |||
The plaintext is: | The plaintext is: | |||
48656c6c6f2c20776f726c6421 | 48656c6c6f2c20776f726c6421 | |||
The resulting ciphertext is: | The resulting ciphertext is: | |||
fc6d6f823e3ed2d209d0c6ffcf | fc6d6f823e3ed2d209d0c6ffcf | |||
The resulting 12-octet authentication tag is: | The resulting 12-octet authentication tag is: | |||
550260c42e5b29719426c1ff | 550260c42e5b29719426c1ff | |||
B.2. ContentInfo and AuthEnvelopedData | B.2. ContentInfo and AuthEnvelopedData | |||
Alice encodes the AuthEnvelopedData and the ContentInfo, and | Alice encodes the AuthEnvelopedData and the ContentInfo and sends the | |||
sends the result to Bob. The resulting structure is: | result to Bob. The resulting structure is: | |||
0 327: SEQUENCE { | 0 327: SEQUENCE { | |||
4 11: OBJECT IDENTIFIER authEnvelopedData | 4 11: OBJECT IDENTIFIER | |||
: { 1 2 840 113549 1 9 16 1 23 } | : authEnvelopedData (1 2 840 113549 1 9 16 1 23) | |||
17 310: [0] { | 17 310: [0] { | |||
21 306: SEQUENCE { | 21 306: SEQUENCE { | |||
25 1: INTEGER 0 | 25 1: INTEGER 0 | |||
28 229: SET { | 28 229: SET { | |||
31 226: [4] { | 31 226: [4] { | |||
34 11: OBJECT IDENTIFIER ** Placeholder ** | 34 11: OBJECT IDENTIFIER | |||
: { 1 2 840 113549 1 9 16 TBD 2 } | : keyAgreePSK (1 2 840 113549 1 9 16 13 2) | |||
47 210: SEQUENCE { | 47 210: SEQUENCE { | |||
50 1: INTEGER 0 | 50 1: INTEGER 0 | |||
53 20: OCTET STRING 'ptf-kmc:216840110121' | 53 20: OCTET STRING 'ptf-kmc:216840110121' | |||
75 85: [0] { | 75 85: [0] { | |||
77 83: [1] { | 77 83: [1] { | |||
79 19: SEQUENCE { | 79 19: SEQUENCE { | |||
81 6: OBJECT IDENTIFIER | 81 6: OBJECT IDENTIFIER | |||
: dhSinglePass-stdDH-sha256kdf-scheme | : ecdhX963KDF-SHA256 (1 3 132 1 11 1) | |||
: { 1 3 132 1 11 1 } | 89 9: OBJECT IDENTIFIER | |||
89 9: OBJECT IDENTIFIER aes256-wrap | : aes256-wrap (2 16 840 1 101 3 4 1 45) | |||
: { 2 16 840 1 101 3 4 1 45 } | : } | |||
: } | ||||
100 60: BIT STRING, encapsulates { | 100 60: BIT STRING, encapsulates { | |||
103 57: OCTET STRING | 103 57: OCTET STRING | |||
: 1B 41 26 26 4F F6 92 CF 2C 5D 8D 64 CD BB 86 DD | : 1B 41 26 26 4F F6 92 CF 2C 5D 8D 64 CD BB 86 DD | |||
: 4B B7 B6 D5 B0 41 15 C0 2C 50 C9 20 28 EF 61 FA | : 4B B7 B6 D5 B0 41 15 C0 2C 50 C9 20 28 EF 61 FA | |||
: FE C9 3A 4E 41 59 1C 86 6F 3C 14 08 7D 30 49 30 | : FE C9 3A 4E 41 59 1C 86 6F 3C 14 08 7D 30 49 30 | |||
: E0 D2 9C B6 89 0A 36 0A 6C | : E0 D2 9C B6 89 0A 36 0A 6C | |||
: } | : } | |||
: } | : } | |||
: } | : } | |||
162 13: SEQUENCE { | 162 13: SEQUENCE { | |||
164 11: OBJECT IDENTIFIER ** Placeholder ** | 164 11: OBJECT IDENTIFIER | |||
: { 1 2 840 113549 1 9 16 3 TBD } | : hkdf-with-sha384 (1 2 840 113549 1 9 16 3 29) | |||
: } | : } | |||
177 11: SEQUENCE { | 177 11: SEQUENCE { | |||
179 9: OBJECT IDENTIFIER aes256-wrap | 179 9: OBJECT IDENTIFIER | |||
: { 2 16 840 1 101 3 4 1 45 } | : aes256-wrap (2 16 840 1 101 3 4 1 45) | |||
: } | : } | |||
190 68: SEQUENCE { | 190 68: SEQUENCE { | |||
192 66: SEQUENCE { | 192 66: SEQUENCE { | |||
194 22: [0] { | 194 22: [0] { | |||
196 20: OCTET STRING | 196 20: OCTET STRING | |||
: E8 21 8B 98 B8 B7 D8 6B 5E 9E BD C8 AE B8 C4 EC | : E8 21 8B 98 B8 B7 D8 6B 5E 9E BD C8 AE B8 C4 EC | |||
: DC 05 C5 29 | : DC 05 C5 29 | |||
: } | : } | |||
218 40: OCTET STRING | 218 40: OCTET STRING | |||
: 22 9F E0 B4 5E 40 00 3E 7D 82 44 EC 1B 7E 7F FB | : 22 9F E0 B4 5E 40 00 3E 7D 82 44 EC 1B 7E 7F FB | |||
: 2C 8D CA 16 C3 6F 57 37 22 25 53 A7 12 63 A9 2B | : 2C 8D CA 16 C3 6F 57 37 22 25 53 A7 12 63 A9 2B | |||
: DE 08 86 6A 60 2D 63 F4 | : DE 08 86 6A 60 2D 63 F4 | |||
: } | : } | |||
: } | : } | |||
: } | : } | |||
: } | : } | |||
: } | : } | |||
260 55: SEQUENCE { | 260 55: SEQUENCE { | |||
262 9: OBJECT IDENTIFIER data { 1 2 840 113549 1 7 1 } | 262 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1) | |||
273 27: SEQUENCE { | 273 27: SEQUENCE { | |||
275 9: OBJECT IDENTIFIER aes256-GCM | 275 9: OBJECT IDENTIFIER | |||
: { 2 16 840 1 101 3 4 1 46 } | : aes256-GCM (2 16 840 1 101 3 4 1 46) | |||
286 14: SEQUENCE { | 286 14: SEQUENCE { | |||
288 12: OCTET STRING DB AD DE CA F8 88 CA FE BA BE FA CE | 288 12: OCTET STRING | |||
: DB AD DE CA F8 88 CA FE BA BE FA CE | ||||
: } | ||||
: } | : } | |||
302 13: [0] | ||||
: FC 6D 6F 82 3E 3E D2 D2 09 D0 C6 FF CF | ||||
: } | : } | |||
302 13: [0] FC 6D 6F 82 3E 3E D2 D2 09 D0 C6 FF CF | ||||
: } | ||||
317 12: OCTET STRING 55 02 60 C4 2E 5B 29 71 94 26 C1 FF | 317 12: OCTET STRING 55 02 60 C4 2E 5B 29 71 94 26 C1 FF | |||
: } | ||||
: } | : } | |||
: } | : } | |||
: } | ||||
B.3. Recipient Processing Example | B.3. Recipient Processing Example | |||
Bob obtains Alice's ephemeral ECDH public key from the message: | Bob obtains Alice's ephemeral ECDH public key from the message: | |||
-----BEGIN PUBLIC KEY----- | -----BEGIN PUBLIC KEY----- | |||
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEORtBJiZP9pLPLF2NZM27ht1Lt7bVsEEV | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEORtBJiZP9pLPLF2NZM27ht1Lt7bVsEEV | |||
wCxQySAo72H6/sk6TkFZHIZvPBQIfTBJMODSnLaJCjYKbKl8q09w7ToO+qCGBDaT | wCxQySAo72H6/sk6TkFZHIZvPBQIfTBJMODSnLaJCjYKbKl8q09w7ToO+qCGBDaT | |||
2xhOZSXYz8fbAbGUHQAcJbFNGW+z/+4v | 2xhOZSXYz8fbAbGUHQAcJbFNGW+z/+4v | |||
-----END PUBLIC KEY----- | -----END PUBLIC KEY----- | |||
Bob's static ECDH private key: | Bob's static ECDH private key is: | |||
-----BEGIN EC PRIVATE KEY----- | -----BEGIN EC PRIVATE KEY----- | |||
MIGkAgEBBDAnJ4hB+tTUN9X03/W0RsrYy+qcptlRSYkhaDIsQYPXfTU0ugjJEmRk | MIGkAgEBBDAnJ4hB+tTUN9X03/W0RsrYy+qcptlRSYkhaDIsQYPXfTU0ugjJEmRk | |||
NTPj4y1IRjegBwYFK4EEACKhZANiAARJwY8E72eZTAauBsYSgVj0dH9sKjRbJ5j9 | NTPj4y1IRjegBwYFK4EEACKhZANiAARJwY8E72eZTAauBsYSgVj0dH9sKjRbJ5j9 | |||
149BWvBmbA3bIwmY7Z3WRYK8tPPxTtq2KfHIhF70JXnjJq7UpZT/BuSE8OfO5Ixi | 149BWvBmbA3bIwmY7Z3WRYK8tPPxTtq2KfHIhF70JXnjJq7UpZT/BuSE8OfO5Ixi | |||
RynEwajfbPcl60SWhbloU6NrXe+/9bk= | RynEwajfbPcl60SWhbloU6NrXe+/9bk= | |||
-----END EC PRIVATE KEY----- | -----END EC PRIVATE KEY----- | |||
Bob computes a shared secret, called Z, using the Alice's ephemeral | Bob computes a shared secret called "Z" using Alice's ephemeral ECDH | |||
ECDH public key and his static ECDH private key; Z is: | public key and his static ECDH private key; Z is: | |||
3f015ed0ff4b99523a95157bbe77e9cc0ee52fcffeb7e41eac79d1c11b6cc556 | 3f015ed0ff4b99523a95157bbe77e9cc0ee52fcffeb7e41eac79d1c11b6cc556 | |||
19cf8807e6d800c2de40240fe0e26adc | 19cf8807e6d800c2de40240fe0e26adc | |||
Bob computes the pairwise key-encryption key, called KEK1, from Z | Bob computes the pairwise key-encryption key, KEK1, from Z using the | |||
using the X9.63 KDF with the ECC-CMS-SharedInfo structure with the | X9.63 KDF with the ECC-CMS-SharedInfo structure with the values shown | |||
values shown in B.1. The X9.63 KDF output is the 256-bit KEK1: | in Appendix B.1. The X9.63 KDF output is the 256-bit KEK1: | |||
27dc25ddb0b425f7a968ceada80a8f73c6ccaab115baafcce4a22a45d6b8f3da | 27dc25ddb0b425f7a968ceada80a8f73c6ccaab115baafcce4a22a45d6b8f3da | |||
Bob produces the 256-bit KEK2 with HKDF using SHA-384; the secret | Bob produces the 256-bit KEK2 with HKDF using SHA-384; the secret | |||
value is KEK1; the 'info' is the DER-encoded CMSORIforPSKOtherInfo | value is KEK1; and the 'info' is the DER-encoded | |||
structure with the values shown in B.1. The HKDF output is the | CMSORIforPSKOtherInfo structure with the values shown in | |||
256-bit KEK2: | Appendix B.1. The HKDF output is the 256-bit KEK2: | |||
7de693ee30ae22b5f8f6cd026c2164103f4e1430f1ab135dc1fb98954f9830bb | 7de693ee30ae22b5f8f6cd026c2164103f4e1430f1ab135dc1fb98954f9830bb | |||
Bob uses AES-KEY-WRAP to decrypt the content-encryption key | Bob uses AES-KEY-WRAP to decrypt the content-encryption key with the | |||
with the KEK2; the content-encryption key is: | KEK2; the content-encryption key is: | |||
937b1219a64d57ad81c05cc86075e86017848c824d4e85800c731c5b7b091033 | 937b1219a64d57ad81c05cc86075e86017848c824d4e85800c731c5b7b091033 | |||
Bob decrypts the content using AES-256-GCM with the content- | Bob decrypts the content using AES-256-GCM with the content- | |||
encryption key, and checks the received authentication tag. The | encryption key and checks the received authentication tag. The | |||
12-octet nonce used is: | 12-octet nonce used is: | |||
dbaddecaf888cafebabeface | dbaddecaf888cafebabeface | |||
The 12-octet authentication tag is: | The 12-octet authentication tag is: | |||
550260c42e5b29719426c1ff | 550260c42e5b29719426c1ff | |||
The received ciphertext content is: | The received ciphertext content is: | |||
fc6d6f823e3ed2d209d0c6ffcf | fc6d6f823e3ed2d209d0c6ffcf | |||
The resulting plaintext content is: | The resulting plaintext content is: | |||
48656c6c6f2c20776f726c6421 | 48656c6c6f2c20776f726c6421 | |||
Acknowledgements | Acknowledgements | |||
Many thanks to Roman Danyliw, Ben Kaduk, Burt Kaliski, Panos | Many thanks to Roman Danyliw, Ben Kaduk, Burt Kaliski, Panos | |||
Kampanakis, Jim Schaad, Robert Sparks, Sean Turner, and Daniel Van | Kampanakis, Jim Schaad, Robert Sparks, Sean Turner, and Daniel Van | |||
Geest for their review and insightful comments. They have greatly | Geest for their review and insightful comments. They have greatly | |||
improved the design, clarity, and implementation guidance. | improved the design, clarity, and implementation guidance. | |||
Author's Address | Author's Address | |||
skipping to change at page 31, line 11 ¶ | skipping to change at line 1432 ¶ | |||
Kampanakis, Jim Schaad, Robert Sparks, Sean Turner, and Daniel Van | Kampanakis, Jim Schaad, Robert Sparks, Sean Turner, and Daniel Van | |||
Geest for their review and insightful comments. They have greatly | Geest for their review and insightful comments. They have greatly | |||
improved the design, clarity, and implementation guidance. | improved the design, clarity, and implementation guidance. | |||
Author's Address | Author's Address | |||
Russ Housley | Russ Housley | |||
Vigil Security, LLC | Vigil Security, LLC | |||
516 Dranesville Road | 516 Dranesville Road | |||
Herndon, VA 20170 | Herndon, VA 20170 | |||
USA | United States of America | |||
EMail: housley@vigilsec.com | ||||
Email: housley@vigilsec.com | ||||
End of changes. 204 change blocks. | ||||
420 lines changed or deleted | 489 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |