rfc8696xml2.original.xml | rfc8696.xml | |||
---|---|---|---|---|
<?xml version='1.0' encoding='utf-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.2119.xml"> | ||||
<!ENTITY RFC5083 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.5083.xml"> | ||||
<!ENTITY RFC5652 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.5652.xml"> | ||||
<!ENTITY RFC5912 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.5912.xml"> | ||||
<!ENTITY RFC6268 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.6268.xml"> | ||||
<!ENTITY RFC8126 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8126.xml"> | ||||
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8174.xml"> | ||||
<!ENTITY RFC2631 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.2631.xml"> | ||||
<!ENTITY RFC4086 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.4086.xml"> | ||||
<!ENTITY RFC5280 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.5280.xml"> | ||||
<!ENTITY RFC5753 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.5753.xml"> | ||||
<!ENTITY RFC5869 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.5869.xml"> | ||||
<!ENTITY RFC8017 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8017.xml"> | ||||
<!ENTITY RFC8619 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8619.xml"> | ||||
]> | ||||
<rfc submissionType="IETF" docName="draft-ietf-lamps-cms-mix-with-psk-07" catego | ||||
ry="std" ipr="trust200902"> | ||||
<!-- Generated by id2xml 1.5.0 on 2019-10-08T19:51:53Z --> | ||||
<?rfc compact="yes"?> | ||||
<?rfc text-list-symbols="-o*+"?> | ||||
<?rfc subcompact="no"?> | ||||
<?rfc sortrefs="no"?> | ||||
<?rfc symrefs="yes"?> | ||||
<?rfc strict="yes"?> | ||||
<?rfc toc="yes"?> | ||||
<front> | ||||
<title abbrev="Using Pre-Shared Key (PSK) in the Crypto">Using Pre-Shared | ||||
Key (PSK) in the Cryptographic Message Syntax (CMS)</title> | ||||
<author fullname="Russ Housley" initials="R." surname="Housley"> | ||||
<organization abbrev="Vigil Security">Vigil Security, LLC</organization> | ||||
<address><postal><street>516 Dranesville Road</street> | ||||
<street>Herndon, VA 20170</street> | ||||
<street>USA</street> | ||||
</postal> | ||||
<email>housley@vigilsec.com</email> | ||||
</address> | ||||
</author> | ||||
<date month="October" year="2019"/> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<abstract><t> | ||||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" | ||||
docName="draft-ietf-lamps-cms-mix-with-psk-07" number="8696" category="std" | ||||
consensus="true" ipr="trust200902" obsoletes="" updates="" | ||||
xml:lang="en" sortRefs="true" symRefs="true" tocInclude="true" version="3"> | ||||
<!-- xml2rfc v2v3 conversion 2.33.0 --> | ||||
<!-- Generated by id2xml 1.5.0 on 2019-10-08T19:51:53Z --> | ||||
<front> | ||||
<title abbrev="Using PSK in the CMS">Using Pre-Shared Key (PSK) in the Crypt | ||||
ographic Message Syntax (CMS)</title> | ||||
<seriesInfo name="RFC" value="8696"/> | ||||
<author fullname="Russ Housley" initials="R." surname="Housley"> | ||||
<organization abbrev="Vigil Security">Vigil Security, LLC</organization> | ||||
<address> | ||||
<postal> | ||||
<street>516 Dranesville Road</street> | ||||
<city>Herndon</city> | ||||
<region>VA</region> | ||||
<code>20170</code> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>housley@vigilsec.com</email> | ||||
</address> | ||||
</author> | ||||
<date month="December" year="2019"/> | ||||
<abstract> | ||||
<t> | ||||
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 not accommodate them. In the near-term, this document describes | does not accommodate them. This document describes | |||
a mechanism to protect today's communication from the future | a mechanism to protect today's communication from the future | |||
invention of a large-scale quantum computer by mixing the output of | invention of a large-scale quantum computer by mixing the output of | |||
key transport and key agreement algorithms with a pre-shared key.</t> | key transport and key agreement algorithms with a pre-shared key.</t> | |||
</abstract> | ||||
</abstract> | </front> | |||
</front> | <middle> | |||
<section anchor="sect-1" numbered="true" toc="default"> | ||||
<middle> | <name>Introduction</name> | |||
<section title="Introduction" anchor="sect-1"><t> | <t> | |||
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 <xref target="S1994"/>. It is an open question whether or not it is fe | today <xref target="S1994" format="default"/>. It is an open question whethe | |||
asible | r 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 <xref target="NAS2019"/>. However, if such a quantum computer is inve | happen <xref target="NAS2019" format="default"/>. However, if such a quantum | |||
nted, | 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.</t> | use them would become vulnerable.</t> | |||
<t> | ||||
<t> | The Cryptographic Message Syntax (CMS) <xref target="RFC5652" format="default | |||
The Cryptographic Message Syntax (CMS) <xref target="RFC5652"/><xref target=" | "/><xref target="RFC5083" format="default"/> supports | |||
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 <xref target="C2PQ"/>. These | the invention of a large-scale quantum computer <xref target="I-D.hoffman-c2p | |||
algorithms include RSA <xref target="RFC8017"/>, Diffie-Hellman <xref target= | q" format="default"/>. These | |||
"RFC2631"/>, and | algorithms include RSA <xref target="RFC8017" format="default"/>, Diffie-Hell | |||
Elliptic Curve Diffie-Hellman <xref target="RFC5753"/>. As a result, an adve | man <xref target="RFC2631" format="default"/>, and | |||
rsary | Elliptic Curve Diffie-Hellman (ECDH) <xref target="RFC5753" format="default"/ | |||
that stores CMS-protected communications today, could decrypt those | >. As a result, an adversary | |||
that stores CMS-protected communications today could decrypt those | ||||
communications in the future when a large-scale quantum computer | communications in the future when a large-scale quantum computer | |||
becomes available.</t> | becomes available.</t> | |||
<t> | ||||
<t> | ||||
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.</t> | already accommodate the new algorithms.</t> | |||
<t> | <t> | |||
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 <xref target="RFC8017 | output of an existing key transport algorithm, like RSA <xref target="RFC8017 | |||
"/>, or | " format="default"/>, or | |||
an existing key agreement algorithm, like Diffie-Hellman <xref target="RFC263 | an existing key agreement algorithm, like Diffie-Hellman <xref target="RFC263 | |||
1"/> or | 1" format="default"/> or | |||
Elliptic Curve Diffie-Hellman <xref target="RFC5753"/>. A security solution | Elliptic Curve Diffie-Hellman (ECDH) <xref target="RFC5753" format="default"/ | |||
that is | >. A | |||
security solution that is | ||||
believed to be quantum resistant can be achieved by using a PSK with | believed to be quantum resistant can be achieved by using a PSK with | |||
sufficient entropy along with a quantum resistant key derivation | sufficient entropy along with a quantum-resistant key derivation | |||
function (KDF), like HKDF <xref target="RFC5869"/>, and a quantum resistant | function (KDF), like an HMAC-based key derivation function | |||
encryption algorithm, like 256-bit AES <xref target="AES"/>. In this way, to | (HKDF) <xref target="RFC5869" format="default"/>, and a quantum-resistant | |||
day's | encryption algorithm, like 256-bit AES <xref target="AES" format="default"/>. | |||
In this way, today's | ||||
CMS-protected communication can be resistant to an attacker with a | CMS-protected communication can be resistant to an attacker with a | |||
large-scale quantum computer.</t> | large-scale quantum computer.</t> | |||
<t> | ||||
<t> | ||||
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 <xref target="FGHT2016"/>. Inclusion | trapdoors in Diffie-Hellman parameters <xref target="FGHT2016" format="defaul | |||
of a | t"/>. 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.</t> | protection against these concerns.</t> | |||
<t> | ||||
<t> | ||||
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.</t> | derivation function and a sufficiently large password.</t> | |||
<section anchor="sect-1.1" numbered="true" toc="default"> | ||||
<section title="Terminology" anchor="sect-1.1"><t> | <name>Terminology</name> | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t> | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
"OPTIONAL" in this document are to be interpreted as described in | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
they appear in all | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
capitals, as shown here.</t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
be interpreted as | ||||
</section> | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
when, and only when, they appear in all capitals, as shown here. | ||||
<section title="ASN.1" anchor="sect-1.2"><t> | </t> | |||
CMS values are generated using ASN.1 <xref target="X680"/>, which uses the Ba | </section> | |||
sic | <section anchor="sect-1.2" numbered="true" toc="default"> | |||
<name>ASN.1</name> | ||||
<t> | ||||
CMS values are generated using ASN.1 <xref target="X680" format="default"/>, | ||||
which uses the Basic | ||||
Encoding Rules (BER) and the Distinguished Encoding Rules (DER) | Encoding Rules (BER) and the Distinguished Encoding Rules (DER) | |||
<xref target="X690"/>.</t> | <xref target="X690" format="default"/>.</t> | |||
</section> | ||||
</section> | <section anchor="sect-1.3" numbered="true" toc="default"> | |||
<name>Version Numbers</name> | ||||
<section title="Version Numbers" anchor="sect-1.3"><t> | <t> | |||
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.</t> | version number is used by the sender.</t> | |||
<t> | ||||
<t> | ||||
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.</t> | is used.</t> | |||
</section> | ||||
</section> | </section> | |||
<section anchor="sect-2" numbered="true" toc="default"> | ||||
</section> | <name>Overview</name> | |||
<t> | ||||
<section title="Overview" anchor="sect-2"><t> | The CMS enveloped-data content type <xref target="RFC5652" format="default"/> | |||
The CMS enveloped-data content type <xref target="RFC5652"/> and the CMS | and the CMS | |||
authenticated-enveloped-data content type <xref target="RFC5083"/> support bo | authenticated-enveloped-data content type <xref target="RFC5083" format="defa | |||
th key | ult"/> 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 | |||
generated symmetric content-encryption key for decryption.</t> | symmetric content-encryption key for decryption.</t> | |||
<t> | ||||
<t> | ||||
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 c | |||
generated content-encryption key. In both cases, the PSK is used as | ontent-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 | |||
resistant key-encryption key. The PSK MUST be distributed to the | key-encryption key. The PSK <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be assigned to the PS K. 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.</t> | messages, with a lifetime of weeks or months.</t> | |||
<t> | ||||
<t> | ||||
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:</t> | quantum resistant, and the sender establishes it using these steps:</t> | |||
<t><list style="hanging" hangIndent="3"> | <t>When using a key transport algorithm:</t> | |||
<t hangText="When using a key transport algorithm:"> | ||||
<list style="numbers"> | <ol spacing="normal" type="1"> | |||
<t>The content-encryption key or the content-authenticated- | ||||
encryption key, called CEK, is generated at random.</t> | ||||
<t>The key-derivation key, called KDK, is generated at random.</t> | ||||
<t>For each recipient, the KDK is encrypted in the recipient's | ||||
public key, then the key derivation function (KDF) is used to | ||||
mix the pre-shared key (PSK) and the KDK to produce the key- | ||||
encryption key, called KEK.</t> | ||||
<t>The KEK is used to encrypt the CEK.</t> | ||||
</list> | ||||
</t> | ||||
<t hangText="When using a key agreement algorithm:"> | <li>The content-encryption key or the | |||
content-authenticated-encryption key, called "CEK", is generated at r | ||||
andom.</li> | ||||
<li>The key-derivation key, called "KDK", is generated at random.</l | ||||
i> | ||||
<li>For each recipient, the KDK is encrypted in the recipient's | ||||
public key, then the KDF is used to | ||||
mix the PSK and the KDK to produce the | ||||
key-encryption key, called "KEK".</li> | ||||
<li>The KEK is used to encrypt the CEK.</li> | ||||
</ol> | ||||
<list style="numbers"> | <t>When using a key agreement algorithm:</t> | |||
<t>The content-encryption key or the content-authenticated- | ||||
encryption key, called CEK, is generated at random.</t> | ||||
<t>For each recipient, a pairwise key-encryption key, called KEK1, | ||||
is established using the recipient's public key and the | ||||
sender's private key. Note that KEK1 will be used as a key- | ||||
derivation key.</t> | ||||
<t>For each recipient, the key derivation function (KDF) is used | ||||
to mix the pre-shared key (PSK) and the pairwise KEK1, and the | ||||
result is called KEK2.</t> | ||||
<t>For each recipient, the pairwise KEK2 is used to encrypt the | ||||
CEK.</t> | ||||
</list> | ||||
</t> | ||||
</list> | <ol spacing="normal" type="1"> | |||
</t> | <li>The content-encryption key or the | |||
content-authenticated-encryption key, called "CEK", is generated at r | ||||
andom.</li> | ||||
<li>For each recipient, a pairwise key-encryption key, | ||||
called "KEK1", | ||||
is established using the recipient's public key and the | ||||
sender's private key. Note that KEK1 will be used as a key-derivation k | ||||
ey.</li> | ||||
<li>For each recipient, the KDF is used | ||||
to mix the PSK and the pairwise KEK1, and the | ||||
result is called "KEK2".</li> | ||||
<li>For each recipient, the pairwise KEK2 is used to encrypt the | ||||
CEK.</li> | ||||
</ol> | ||||
<t> | <t> | |||
As specified in Section 6.2.5 of <xref target="RFC5652"/>, recipient informat | As specified in <xref target="RFC5652" sectionFormat="of" section="6.2.5"/>, | |||
ion for | 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.</t> | object identifier.</t> | |||
<t> | ||||
<t> | The first key management technique, called "keyTransPSK" (see | |||
The first key management technique, called keyTransPSK, see | <xref target="sect-3" format="default"/>), uses a key transport algorithm to | |||
<xref target="sect-3"/>, uses a key transport algorithm to transfer the key- | transfer the key-derivation key from the sender to the recipient, and then the k | |||
derivation key from the sender to the recipient, and then the key- | ey-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.</t> | the content-encryption key or content-authenticated-encryption key.</t> | |||
<t> | ||||
<t> | The second key management technique, called "keyAgreePSK" (see | |||
The second key management technique, called keyAgreePSK, see | <xref target="sect-4" format="default"/>), uses a key agreement algorithm to | |||
<xref target="sect-4"/>, uses a key agreement algorithm to establish a pairwi | establish a pairwise key-encryption | |||
se | key. This pairwise key-encryption key is then mixed with the PSK using a | |||
key-encryption key, which is then mixed with the PSK using a KDF to | KDF to produce a second pairwise key-encryption key, which is then used to | |||
produce a second pairwise key-encryption key, which is then used to | encrypt the content-encryption key or content-authenticated-encryption key.</t> | |||
encrypt the content-encryption key or content-authenticated- | </section> | |||
encryption key.</t> | <section anchor="sect-3" numbered="true" toc="default"> | |||
<name>keyTransPSK</name> | ||||
</section> | <t> | |||
<section title="keyTransPSK" anchor="sect-3"><t> | ||||
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 o | |||
keyTransPSK object identifier. Each instance of | bject 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.</t> | have access to the same PSK.</t> | |||
<t>The id-ori-keyTransPSK object identifier is:</t> | ||||
<t>The id-ori-keyTransPSK object identifier is:</t> | <sourcecode name="" type="asn.1"><![CDATA[ | |||
<figure><artwork><![CDATA[ | ||||
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 } | ||||
]]></artwork> | ||||
</figure> | ||||
<t>The KeyTransPSKRecipientInfo type is:</t> | ||||
<figure><artwork><![CDATA[ | id-ori-keyTransPSK OBJECT IDENTIFIER ::= { id-ori 1 } ]]></sourcecode> | |||
<t>The KeyTransPSKRecipientInfo type is:</t> | ||||
<sourcecode name="" type="asn.1"><![CDATA[ | ||||
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 ]]></sourcecode> | |||
]]></artwork> | <t>The fields of the KeyTransPSKRecipientInfo type have the following | |||
</figure> | ||||
<t>The fields of the KeyTransPSKRecipientInfo type have the following | ||||
meanings:</t> | meanings:</t> | |||
<t><list hangIndent="3" style="hanging"><t> | <ul> | |||
version is the syntax version number. The version MUST be 0. The | <li> | |||
CMSVersion type is described in Section 10.2.5 of <xref target="RFC5652"/> | version is the syntax version number. The version <bcp14>MUST</bcp14> be | |||
.</t> | 0. The | |||
CMSVersion type is described in <xref target="RFC5652" | ||||
</list> | sectionFormat="of" section="10.2.5"/>.</li> | |||
</t> | <li> | |||
<t><list hangIndent="3" style="hanging"><t> | ||||
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.</t> | identifier is an OCTET STRING, and it need not be human readable.</li> | |||
<li> | ||||
</list> | kdfAlgorithm identifies the key-derivation algorithm and any associated pa | |||
</t> | rameters used by the sender to mix the key-derivation key and the PSK to generat | |||
e the key-encryption key. | ||||
<t><list hangIndent="3" style="hanging"><t> | The KeyDerivationAlgorithmIdentifier is described in <xref target="RFC5652 | |||
kdfAlgorithm identifies the key-derivation algorithm, and any | " sectionFormat="of" section="10.1.6"/>.</li> | |||
associated parameters, used by the sender to mix the key- | <li> | |||
derivation key and the PSK to generate the key-encryption key. | ||||
The KeyDerivationAlgorithmIdentifier is described in Section | ||||
10.1.6 of <xref target="RFC5652"/>.</t> | ||||
</list> | ||||
</t> | ||||
<t><list hangIndent="3" style="hanging"><t> | ||||
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 <xref target="RFC5652" se | |||
<xref target="RFC5652"/>.</t> | ctionFormat="of" section="10.1.3"/>.</li> | |||
<li> | ||||
</list> | ||||
</t> | ||||
<t><list hangIndent="3" style="hanging"><t> | ||||
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 <xref target="RFC5652" section | |||
<xref target="RFC5652"/>.</t> | Format="of" section="6.2.1"/>.</li> | |||
<li> | ||||
</list> | ||||
</t> | ||||
<t><list hangIndent="3" style="hanging"><t> | ||||
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 ke | |||
encryption key. EncryptedKey is an OCTET STRING.</t> | y. EncryptedKey is an OCTET STRING.</li> | |||
</ul> | ||||
</list> | </section> | |||
</t> | <section anchor="sect-4" numbered="true" toc="default"> | |||
<name>keyAgreePSK</name> | ||||
</section> | <t> | |||
<section title="keyAgreePSK" anchor="sect-4"><t> | ||||
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 o | |||
keyAgreePSK object identifier. Each instance of | bject 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 | |||
have access to the same PSK.</t> | have access to the same PSK.</t> | |||
<t>The id-ori-keyAgreePSK object identifier is:</t> | ||||
<t>The id-ori-keyAgreePSK object identifier is:</t> | <sourcecode name="" type="asn.1"><![CDATA[ | |||
<figure><artwork><![CDATA[ | ||||
id-ori-keyAgreePSK OBJECT IDENTIFIER ::= { id-ori 2 } | id-ori-keyAgreePSK OBJECT IDENTIFIER ::= { id-ori 2 } | |||
The KeyAgreePSKRecipientInfo type is: | The KeyAgreePSKRecipientInfo type is: | |||
KeyAgreePSKRecipientInfo ::= SEQUENCE { | KeyAgreePSKRecipientInfo ::= SEQUENCE { | |||
version CMSVersion, -- always set to 0 | version CMSVersion, -- always set to 0 | |||
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 } ]]></sourcecode> | |||
]]></artwork> | <t> | |||
</figure> | ||||
<t> | ||||
The fields of the KeyAgreePSKRecipientInfo type have the following meanings:< /t> | The fields of the KeyAgreePSKRecipientInfo type have the following meanings:< /t> | |||
<ul> | ||||
<t><list hangIndent="3" style="hanging"><t> | <li> | |||
version is the syntax version number. The version MUST be 0. The | version is the syntax version number. The version <bcp14>MUST</bcp14> be | |||
CMSVersion type is described in Section 10.2.5 of <xref target="RFC5652"/> | 0. The | |||
.</t> | CMSVersion type is described in <xref target="RFC5652" | |||
format="default" section="10.2.5" sectionFormat="of"/>.</li> | ||||
</list> | <li> | |||
</t> | ||||
<t><list hangIndent="3" style="hanging"><t> | ||||
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.</t> | identifier is an OCTET STRING, and it need not be human readable.</li> | |||
<li> | ||||
</list> | ||||
</t> | ||||
<t><list hangIndent="3" style="hanging"><t> | ||||
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 <bcp14>MUST</bcp14> su pport | |||
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 | |||
function (KDF) is used to mix the PSK and the pairwise key- | is used to mix the PSK and the pairwise key-encryption key to produce a se | |||
encryption key to produce a second key-encryption key. The | cond key-encryption key. The | |||
OriginatorIdentifierOrKey type is described in Section 6.2.2 of | OriginatorIdentifierOrKey type is described in <xref target="RFC5652" sect | |||
<xref target="RFC5652"/>.</t> | ionFormat="of" section="6.2.2"/>.</li> | |||
<li> | ||||
</list> | ||||
</t> | ||||
<t><list hangIndent="3" style="hanging"><t> | ||||
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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> gracefully handle the presence of UKM | |||
UserKeyingMaterial type is described in Section 10.2.6 of | s. The | |||
<xref target="RFC5652"/>.</t> | UserKeyingMaterial type is described in <xref target="RFC5652" sectionForm | |||
at="of" section="10.2.6" />.</li> | ||||
</list> | <li> | |||
</t> | kdfAlgorithm identifies the key-derivation algorithm and any | |||
associated parameters used by the sender to mix the pairwise key-encryptio | ||||
<t><list hangIndent="3" style="hanging"><t> | n key and the PSK to produce a second key-encryption key | |||
kdfAlgorithm identifies the key-derivation algorithm, and any | ||||
associated parameters, used by the sender to mix the pairwise 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 <xref target="RFC5652" se | |||
<xref target="RFC5652"/>.</t> | ctionFormat="of" section="10.1.6"/>.</li> | |||
<li> | ||||
</list> | ||||
</t> | ||||
<t><list hangIndent="3" style="hanging"><t> | ||||
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-encrypt | |||
authenticated-encryption key. The | ion key. The | |||
KeyEncryptionAlgorithmIdentifier type is described in Section | KeyEncryptionAlgorithmIdentifier type is described in <xref target="RFC565 | |||
10.1.3 of <xref target="RFC5652"/>.</t> | 2" sectionFormat="of" section="10.1.3"/>.</li> | |||
<li> | ||||
</list> | ||||
</t> | ||||
<t><list hangIndent="3" style="hanging"><t> | ||||
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-encrypt | |||
authenticated-encryption key with the second pairwise key- | ion key with the second pairwise key-encryption key. EncryptedKey is an OCTET S | |||
encryption key. EncryptedKey is an OCTET STRING. The | TRING. The | |||
RecipientEncryptedKeys type is defined in Section 6.2.2 of | RecipientEncryptedKeys type is defined in <xref target="RFC5652" sectionFo | |||
<xref target="RFC5652"/>.</t> | rmat="of" section="6.2.2" />.</li> | |||
</ul> | ||||
</list> | </section> | |||
</t> | <section anchor="sect-5" numbered="true" toc="default"> | |||
<name>Key Derivation</name> | ||||
</section> | <t> | |||
Many KDFs internally employ a one-way hash | ||||
<section title="Key Derivation" anchor="sect-5"><t> | ||||
Many key derivation functions (KDFs) internally employ a one-way hash | ||||
function. When this is the case, the hash function that is used is | function. When this is the case, the hash function that is used is | |||
indirectly indicated by the KeyDerivationAlgorithmIdentifier. HKDF | indirectly indicated by the KeyDerivationAlgorithmIdentifier. HKDF | |||
<xref target="RFC5869"/> is one example of a KDF that makes use of a hash fun | <xref target="RFC5869" format="default"/> is one example of a KDF that makes | |||
ction.</t> | use of a hash function.</t> | |||
<t> | ||||
<t> | ||||
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 <xref target="NIST201 | used for randomness extraction in a KDF as described in <xref target="NIST201 | |||
8"/>.</t> | 8" format="default"/>.</t> | |||
<t> | ||||
<t> | ||||
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 <xref target="RFC5869"/> specifi | simplicity, the terminology used in the HKDF specification <xref target="RFC5 | |||
cation | 869" format="default"/> is used here.</t> | |||
is used here.</t> | ||||
<t>The KDF inputs are:</t> | <t>The KDF inputs are:</t> | |||
<ul> | ||||
<li>IKM is the input keying material; it is the symmetric secret input | ||||
to the KDF. For KeyTransPSKRecipientInfo, it is the key-derivation key. | ||||
For KeyAgreePSKRecipientInfo, it is the pairwise | ||||
key-encryption key produced by the key agreement algorithm.</li> | ||||
<t> <list style="hanging" hangIndent="3"> | <li> salt is an optional non-secret random value. Many KDFs do not | |||
<t>IKM is the input keying material; it is the symmetric secret input | ||||
to the KDF. For KeyTransPSKRecipientInfo, it is the key- | ||||
derivation key. For KeyAgreePSKRecipientInfo, it is the pairwise | ||||
key-encryption key produced by the key agreement algorithm.</t> | ||||
</list> | ||||
</t> | ||||
<t> <list style="hanging" hangIndent="3"> | ||||
<t> 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 <xref target="RFC8619"/> do not offer a parameter for a | assignments for HKDF <xref target="RFC8619" format="default"/> do not offe r 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.</t> | provided as a parameter of the KeyDerivationAlgorithmIdentifier.</li> | |||
</list> | ||||
</t> | ||||
<t> <list style="hanging" hangIndent="3"> | <li>L is the length of output keying material in octets; the value | |||
<t>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.</t> | value, called "info".</li> | |||
</list> | ||||
</t> | ||||
<t> <list style="hanging" hangIndent="3"> | <li>info is optional context and application specific information. | |||
<t>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: </t> | ASN.1 structure: </li> | |||
</list> | </ul> | |||
</t> | <sourcecode name="" type="asn.1"><![CDATA[ | |||
<figure><artwork><![CDATA[ | ||||
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) } ]]></sourcecode> | |||
]]></artwork> | <t>The fields of type CMSORIforPSKOtherInfo have the following | |||
</figure> | meanings:</t> | |||
<ul> | ||||
<t>The fields of type CMSORIforPSKOtherInfo have the following meanings:</t> | <li> | |||
psk is an OCTET STRING; it contains the PSK.</li> | ||||
<t><list hangIndent="3" style="hanging"><t> | <li> | |||
psk is an OCTET STRING; it contains the PSK.</t> | ||||
</list> | ||||
</t> | ||||
<t><list hangIndent="3" style="hanging"><t> | ||||
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.</t> | KeyAgreePSKRecipientInfo, the ENUMERATED value of 10 is used.</li> | |||
</list> | <li> | |||
</t> | ||||
<t><list hangIndent="3" style="hanging"><t> | ||||
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.</t> | if any.</li> | |||
</list> | <li> | |||
</t> | ||||
<t><list hangIndent="3" style="hanging"><t> | ||||
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.</t> | in octets.</li> | |||
</list> | <li> | |||
</t> | ||||
<t><list hangIndent="3" style="hanging"><t> | ||||
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.</t> | key-encryption key produced by the key agreement algorithm.</li> | |||
</list> | </ul> | |||
</t> | ||||
<t>The KDF output is:</t> | <t>The KDF output is:</t> | |||
<ul> | ||||
<t><list hangIndent="3" style="hanging"><t> | <li> | |||
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-encrypti | |||
encryption key or the content-authenticated-encryption key.</t> | on key or the content-authenticated-encryption key.</li> | |||
</list> | </ul> | |||
</t> | <t> | |||
An acceptable KDF <bcp14>MUST</bcp14> accept IKM, L, and info inputs; an acce | ||||
<t> | ptable | |||
An acceptable KDF MUST accept IKM, L, and info inputs; and acceptable | KDF <bcp14>MAY</bcp14> also accept salt and other inputs. All of these input | |||
KDF MAY also accept salt and other inputs. All of these inputs MUST | s <bcp14>MUST</bcp14> | |||
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 <bcp14>MUST</bcp14> be provided as parameters of th e | |||
KeyDerivationAlgorithmIdentifier.</t> | KeyDerivationAlgorithmIdentifier.</t> | |||
</section> | ||||
</section> | <section anchor="sect-6" numbered="true" toc="default"> | |||
<name>ASN.1 Module</name> | ||||
<section title="ASN.1 Module" anchor="sect-6"><t> | <t> | |||
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 <xref target="RFC5912"/> and <xref ta | other ASN.1 modules that are defined in <xref target="RFC5912" format="defaul | |||
rget="RFC6268"/>.</t> | t"/> and <xref target="RFC6268" format="default"/>.</t> | |||
<sourcecode name="" type="asn.1" markers="true"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
<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 line 621 ¶ | skipping to change at line 483 ¶ | |||
... } | ... } | |||
-- | -- | |||
-- 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 line 668 ¶ | skipping to change at line 530 ¶ | |||
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 ]]></sourcecode> | |||
</section> | ||||
<CODE ENDS> | <section anchor="sect-7" numbered="true" toc="default"> | |||
]]></artwork> | <name>Security Considerations</name> | |||
</figure> | <t> | |||
</section> | The security considerations related to the CMS enveloped-data | |||
content type in <xref target="RFC5652" format="default"/> and the security co | ||||
<section title="Security Considerations" anchor="sect-7"><t> | nsiderations related to | |||
The security considerations in related to the CMS enveloped-data | the CMS authenticated-enveloped-data content type in <xref target="RFC5083" f | |||
content type in <xref target="RFC5652"/> and the security considerations rela | ormat="default"/> | |||
ted to | ||||
the CMS authenticated-enveloped-data content type in <xref target="RFC5083"/> | ||||
continue to apply.</t> | continue to apply.</t> | |||
<t> | ||||
<t> | ||||
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 ke | |||
encryption key must be protected. Compromise of the key-encryption | y 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.</t> | compromise of either one of these keys.</t> | |||
<t> | ||||
<t> | Implementations must protect the PSK, key transport | |||
Implementations must protect the pre-shared key (PSK), key transport | private key, agreement private key, and key-derivation key. | |||
private key, the agreement private key, and the key-derivation key. | ||||
Compromise of the PSK will make the encrypted content vulnerable to | Compromise of the PSK will make the encrypted content vulnerable to | |||
the future invention of a large-scale quantum computer. Compromise | the future invention of a large-scale quantum computer. Compromise | |||
of the PSK and either the key transport private key or the agreement | of the PSK and either the key transport private key or the agreement | |||
private key may result in the disclosure of all contents protected | private key may result in the disclosure of all contents protected | |||
with that combination of keying material. Compromise of the PSK and | with that combination of keying material. Compromise of the PSK and | |||
the key-derivation key may result in disclosure of all contents | the key-derivation key may result in the disclosure of all contents | |||
protected with that combination of keying material.</t> | protected with that combination of keying material.</t> | |||
<t> | ||||
<t> | ||||
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 qua | |||
scale quantum computer effectively cuts the security provided by a | ntum 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.</t> | length.</t> | |||
<t> | ||||
<t> | ||||
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 | |||
128 bits of protection is provided. Implementers must ensure that | 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.</t> | algorithm.</t> | |||
<t> | ||||
<t> | ||||
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 <xref target="NIST2018"/> offers advice on the security strength o f | Revision 1 <xref target="NIST2018" format="default"/> offers advice on the se curity strength of | |||
several popular key-derivation functions.</t> | several popular key-derivation functions.</t> | |||
<t> | ||||
<t> | ||||
Implementers should not mix quantum-resistant key management | Implementers should not mix quantum-resistant key management | |||
algorithms with their non-quantum-resistant counterparts. For | algorithms with their non-quantum-resistant counterparts. For | |||
example, the same content should not be protected with | example, the same content should not be protected with | |||
KeyTransRecipientInfo and KeyTransPSKRecipientInfo. Likewise, the | KeyTransRecipientInfo and KeyTransPSKRecipientInfo. Likewise, the | |||
same content should not be protected with KeyAgreeRecipientInfo and | same content should not be protected with KeyAgreeRecipientInfo and | |||
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.</t> | to the future invention of a large-scale quantum computer.</t> | |||
<t> | ||||
<t> | ||||
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.</t> | vulnerable to the future invention of a large-scale quantum computer.</t> | |||
<t> | ||||
<t> | This specification does not require that PSK be known only by the | |||
This specification does not require that PSK is 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 enable | |||
inherently eavesdropping. However, group members can record the | eavesdropping. However, group members can record the | |||
traffic of other members, and then decrypt it if they ever gain | traffic of other members and then decrypt it if they ever gain | |||
access to a large-scale quantum computer. Also, when many parties | access to a large-scale quantum computer. Also, when many parties | |||
know the PSK, there are many opportunities for theft of the PSK by an | know the PSK, there are many opportunities for theft of the PSK by an | |||
attacker. Once an attacker has the PSK, they can decrypt stored | attacker. Once an attacker has the PSK, they can decrypt stored | |||
traffic if they ever gain access to a large-scale quantum computer in | traffic if they ever gain access to a large-scale quantum computer in | |||
the same manner as a legitimate group member.</t> | the same manner as a legitimate group member.</t> | |||
<t> | ||||
<t> | ||||
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 pur | |||
example, a purpose identifier for use in the X.509 extended key usage | pose identifier for use in the X.509 extended key usage | |||
certificate extension <xref target="RFC5280"/> could be identified in the fut | certificate extension <xref target="RFC5280" format="default"/> could be identi | |||
ure to | fied 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.</t> | without a PSK.</t> | |||
<t> | ||||
<t> | ||||
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. <xref target="RFC4086 | The generation of quality random numbers is difficult. <xref target="RFC4086 | |||
"/> | " format="default"/> | |||
offers important guidance in this area.</t> | offers important guidance in this area.</t> | |||
<t> | ||||
<t> | ||||
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.</t> | the set of supported algorithms to change over time.</t> | |||
<t> | ||||
<t> | ||||
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 | |||
<xref target="H2019"/> shows that an attacker with a large-scale quantum comp uter | <xref target="H2019" format="default"/> shows that an attacker with a large-s cale 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-encryption | |||
key from the protocol exchange.</t> | key from the protocol exchange.</t> | |||
</section> | ||||
<section anchor="sect-8" numbered="true" toc="default"> | ||||
<name>Privacy Considerations</name> | ||||
</section> | <t> | |||
<section title="Privacy Considerations" anchor="sect-8"><t> | ||||
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 identif | |||
identifiers is not really making privacy worse. When key transport | iers does not really weaken | |||
the privacy situation. When key transport | ||||
is used, the RecipientIdentifier is always present, and it clearly | is used, the RecipientIdentifier is always present, and it clearly | |||
identifies each recipient to an observer. When key agreement is | identifies each recipient to an observer. When key agreement is | |||
used, either the IssuerAndSerialNumber or the RecipientKeyIdentifier | used, either the IssuerAndSerialNumber or the RecipientKeyIdentifier | |||
is always present, and these clearly identify each recipient.</t> | is always present, and these clearly identify each recipient.</t> | |||
</section> | ||||
<section anchor="sect-9" numbered="true" toc="default"> | ||||
<name>IANA Considerations</name> | ||||
</section> | <t> | |||
One object identifier for the ASN.1 module in <xref target="sect-6" format="d | ||||
<section title="IANA Considerations" anchor="sect-9"><t> | efault"/> was assigned | |||
One object identifier for the ASN.1 module in <xref target="sect-6"/> was ass | in the "SMI Security for S/MIME Module Identifier | |||
igned | (1.2.840.113549.1.9.16.0)" registry <xref target="IANA" format="default"/>:</ | |||
in the SMI Security for S/MIME Module Identifiers | t> | |||
(1.2.840.113549.1.9.16.0) <xref target="IANA-MOD"/> registry:</t> | <sourcecode name="" type="asn.1"><![CDATA[ | |||
<figure><artwork><![CDATA[ | ||||
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 } ]]></sourcecode> | |||
]]></artwork> | <t> | |||
</figure> | One new entry has been added in the "SMI Security for S/MIME Mail | |||
<t> | Security (1.2.840.113549.1.9.16)" registry <xref target="IANA" format="def | |||
One new registry was created for Other Recipient Info Identifiers | ault"/>:</t> | |||
within the SMI Security for S/MIME Mail Security | <sourcecode name="" type="asn.1"><![CDATA[ | |||
(1.2.840.113549.1.9.16) <xref target="IANA-SMIME"/> registry:</t> | ||||
<figure><artwork><![CDATA[ | ||||
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 } ]]></sourcecode> | |||
]]></artwork> | <t>A new registry titled "SMI Security for S/MIME Other | |||
</figure> | Recipient Info Identifiers (1.2.840.113549.1.9.16.13)" has been created. | |||
<t> | ||||
</t> | ||||
<t> | ||||
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 <xref target="RFC8126"/>. The ex | Specification Required policy as defined in <xref target="RFC8126" format="de | |||
pert is | fault"/>. The expert is expected to ensure that any new values identify additio | |||
expected to ensure that any new values identify additions | nal | |||
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.</t> | for other purposes should not be assigned in this arc.</t> | |||
<t> | ||||
<t> | Two assignments were made in the new "SMI Security for S/MIME Other Recipient | |||
Two assignments were made in the new SMI Security for Other Recipient | Info Identifiers (1.2.840.113549.1.9.16.13)" registry <xref target="IANA" for | |||
Info Identifiers (1.2.840.113549.1.9.16.TBD1) <xref target="IANA-ORI"/> regis | mat="default"/> | |||
try | ||||
with references to this document:</t> | with references to this document:</t> | |||
<sourcecode name="" type="asn.1"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
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 } ]]></sourcecode> | |||
]]></artwork> | </section> | |||
</figure> | </middle> | |||
</section> | <back> | |||
</middle> | ||||
<back> | ||||
<references title="Normative References"> | ||||
&RFC2119; | ||||
&RFC5083; | ||||
&RFC5652; | ||||
&RFC5912; | ||||
&RFC6268; | ||||
&RFC8126; | ||||
&RFC8174; | ||||
<reference anchor="X680"><front> | ||||
<title>Information technology -- Abstract Syntax Notation One (ASN.1): Sp | ||||
ecification of basic notation</title> | ||||
<author> | ||||
<organization>ITU-T</organization> | ||||
</author> | ||||
<date year="2015"/> | ||||
</front> | ||||
<seriesInfo name="ITU-T" value="Recommendation X.680"/> | ||||
</reference> | ||||
<reference anchor="X690"><front> | ||||
<title>Information technology -- ASN.1 encoding rules: Specification of B | ||||
asic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Enco | ||||
ding Rules (DER)</title> | ||||
<author> | ||||
<organization>ITU-T</organization> | ||||
</author> | ||||
<date year="2015"/> | ||||
</front> | ||||
<seriesInfo name="ITU-T" value="Recommendation X.690"/> | ||||
</reference> | ||||
</references> | ||||
<references title="Informative References"> | ||||
<reference anchor="AES"><front> | ||||
<title>FIPS Pub 197: Advanced Encryption Standard (AES)</title> | ||||
<author> | ||||
<organization>National Institute of Standards and Technology</organizatio | ||||
n> | ||||
</author> | ||||
<date month="26" year="November 2001"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor='C2PQ'> | ||||
<front> | ||||
<title>The Transition from Classical to Post-Quantum Cryptography</title> | ||||
<author initials='P' surname='Hoffman' fullname='Paul Hoffman'> | ||||
<organization /> | ||||
</author> | ||||
<date month='May' day='21' year='2019' /> | ||||
<abstract><t>Quantum computing is the study of computers that use quantum | ||||
features in calculatio ns. For over 20 years, it has been known that if very | ||||
large, specialized quantum computers coul d be built, they could have a | ||||
devastating effect on asymmetric classical cryptographic algorithm s such as | ||||
RSA and elliptic curve signatures and key exchange, as well as (but in smaller | ||||
scale) on symmetric cryptographic algorithms such as block ciphers, MACs, and | ||||
hash functions. There ha s already been a great deal of study on how to | ||||
create algorithms that will resist large, special ized quantum computers, but | ||||
so far, the properties of those algorithms make them onerous to adopt before | ||||
they are needed. Small quantum computers are being built today, but it is | ||||
still far fr om clear when large, specialized quantum computers will be built | ||||
that can recover private or sec ret keys in classical algorithms at the key | ||||
sizes commonly used today. It is important to be ab le to predict when large, | ||||
specialized quantum computers usable for cryptanalysis will be possibl e so | ||||
that organization can change to post-quantum cryptographic algorithms well | ||||
before they are needed. This document describes quantum computing, how it | ||||
might be used to attack classical cry ptographic algorithms, and possibly how | ||||
to predict when large, specialized quantum computers wil l become | ||||
feasible.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='Work in Progress,' value='draft-hoffman-c2pq-05' /> | ||||
</reference> | ||||
<reference anchor="FGHT2016" target="https://eprint.iacr.org/2016/961.pdf | ||||
"><front> | ||||
<title>A kilobit hidden SNFS discrete logarithm computation</title> | ||||
<author fullname="J. Fried" initials="J." surname="Fried"> | ||||
</author> | ||||
<author fullname="P. Gaudry" initials="P." surname="Gaudry"> | ||||
</author> | ||||
<author fullname="N. Heninger" initials="N." surname="Heninger"> | ||||
</author> | ||||
<author fullname="E. Thome" initials="E." surname="Thome"> | ||||
</author> | ||||
<date year="2016"/> | ||||
</front> | ||||
<seriesInfo name="Cryptology" value="ePrint Archive Report 2016/961"/> | <displayreference target="I-D.hoffman-c2pq" to="C2PQ"/> | |||
</reference> | ||||
<reference anchor="H2019" target="https://mailarchive.ietf.org/arch/msg/s | ||||
pasm/_6d_4jp3sOprAnbU2fp_yp_-6-k"><front> | ||||
<title>Re: [lamps] WG Last Call for draft-ietf-lamps-cms-mix-with-psk"</t | ||||
itle> | ||||
<author fullname="J. Hammell" initials="J." surname="Hammell"> | ||||
</author> | ||||
<date month="May" year="2019"/> | <references> | |||
</front> | <name>References</name> | |||
</reference> | <references> | |||
<reference anchor="IANA-MOD" target="https://www.iana.org/assignments/smi | <name>Normative References</name> | |||
-numbers/smi-numbers.xhtml#security-smime-0"><front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<title>IANA-MOD</title> | FC.2119.xml"/> | |||
<author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
</author> | FC.5083.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5652.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5912.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6268.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8126.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8174.xml"/> | ||||
<date/> | <reference anchor="X680"> | |||
</front> | <front> | |||
<title>Information technology -- Abstract Syntax Notation One (ASN.1 | ||||
): Specification of basic notation</title> | ||||
<seriesInfo name="ITU-T" value="Recommendation X.680"/> | ||||
<author> | ||||
<organization>ITU-T</organization> | ||||
</author> | ||||
<date month="August" year="2015"/> | ||||
</front> | ||||
</reference> | ||||
</reference> | <reference anchor="X690"> | |||
<reference anchor="IANA-SMIME" target="https://www.iana.org/assignments/s | <front> | |||
mi-numbers/smi-numbers.xhtml#security-smime"><front> | <title>Information technology -- ASN.1 encoding rules: Specification | |||
<title>IANA-SMIME</title> | of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished | |||
<author> | Encoding Rules (DER)</title> | |||
</author> | <seriesInfo name="ITU-T" value="Recommendation X.690"/> | |||
<author> | ||||
<organization>ITU-T</organization> | ||||
</author> | ||||
<date month="August" year="2015"/> | ||||
</front> | ||||
</reference> | ||||
<date/> | </references> | |||
</front> | <references> | |||
</reference> | <name>Informative References</name> | |||
<reference anchor="IANA-ORI" target="https://www.iana.org/assignments/smi | ||||
-numbers/smi-numbers.xhtml#security-smime-TBD1"><front> | ||||
<title>IANA-ORI</title> | ||||
<author> | ||||
</author> | ||||
<date/> | <reference anchor="AES"> | |||
</front> | <front> | |||
<title>Advanced Encryption Standard (AES)</title> | ||||
<seriesInfo name="NIST PUB" value="197"/> | ||||
<seriesInfo name="DOI" value="10.6028/NIST.FIPS.197"/> | ||||
<author> | ||||
<organization>National Institute of Standards and Technology</orga | ||||
nization> | ||||
</author> | ||||
<date month="November" year="2001"/> | ||||
</front> | ||||
</reference> | ||||
</reference> | <!-- <reference anchor="I-D.hoffman-c2pq">; I-D Exists --> | |||
<reference anchor="NAS2019"><front> | <xi:include href="https://www.rfc-editor.org/refs/bibxml3/reference.I-D. | |||
<title>Quantum Computing: Progress and Prospects</title> | hoffman-c2pq.xml"/> | |||
<author> | ||||
<organization>National Academies of Sciences, Engineering, and Medicine</ | ||||
organization> | ||||
</author> | ||||
<date year="2019"/> | <reference anchor="FGHT2016" target="https://eprint.iacr.org/2016/961.pd | |||
</front> | f"> | |||
<front> | ||||
<title>A kilobit hidden SNFS discrete logarithm computation</title> | ||||
<seriesInfo name="Cryptology ePrint Archive Report" value="2016/961" | ||||
/> | ||||
<author fullname="J. Fried" initials="J." surname="Fried"/> | ||||
<author fullname="P. Gaudry" initials="P." surname="Gaudry"/> | ||||
<author fullname="N. Heninger" initials="N." surname="Heninger"/> | ||||
<author fullname="E. Thome" initials="E." surname="Thome"/> | ||||
<date year="2016" month="October"/> | ||||
</front> | ||||
</reference> | ||||
<seriesInfo name="The" value="National Academies Press DOI 10.17226/25196 | <reference anchor="H2019" target="https://mailarchive.ietf.org/arch/msg/ | |||
"/> | spasm/_6d_4jp3sOprAnbU2fp_yp_-6-k"> | |||
</reference> | <front> | |||
<reference anchor="NIST2018" target="https://nvlpubs.nist.gov/nistpubs/Sp | <title>Subject: [lamps] WG Last Call for | |||
ecialPublications/NIST.SP.800-56Cr1.pdf"><front> | draft-ietf-lamps-cms-mix-with-psk"</title> | |||
<title>Recommendation for Key-Derivation Methods in Key-Establishment Sch | <author fullname="J. Hammell" initials="J." surname="Hammell"/> | |||
emes</title> | <date month="May" year="2019"/> | |||
<author fullname="E. Barker" initials="E." surname="Barker"> | </front> | |||
</author> | <refcontent> message to the IETF mailing list</refcontent> | |||
</reference> | ||||
<author fullname="L. Chen" initials="L." surname="Chen"> | <reference anchor="IANA" target="https://www.iana.org/assignments/smi-nu | |||
</author> | mbers"> | |||
<front> | ||||
<title>Structure of Management Information (SMI) Numbers (MIB Module | ||||
Registrations)</title> | ||||
<author><organization>IANA</organization></author> | ||||
<date/> | ||||
</front> | ||||
</reference> | ||||
<author fullname="R. Davis" initials="R." surname="Davis"> | <reference anchor="NAS2019"> | |||
</author> | <front> | |||
<title>Quantum Computing: Progress and Prospects</title> | ||||
<seriesInfo name="DOI" value="10.17226/25196"/> | ||||
<author> | ||||
<organization>National Academies of Sciences, Engineering, and Med | ||||
icine</organization> | ||||
</author> | ||||
<date year="2019"/> | ||||
</front> | ||||
</reference> | ||||
<date month="April" year="2018"/> | <reference anchor="NIST2018" target="https://nvlpubs.nist.gov/nistpubs/S | |||
</front> | pecialPublications/NIST.SP.800-56Cr1.pdf"> | |||
<front> | ||||
<title>Recommendation for Key-Derivation Methods in Key-Establishmen | ||||
t Schemes</title> | ||||
<seriesInfo name="NIST Special Publication" value="800-56C Revision | ||||
1"/> | ||||
<author fullname="E. Barker" initials="E." surname="Barker"/> | ||||
<author fullname="L. Chen" initials="L." surname="Chen"/> | ||||
<author fullname="R. Davis" initials="R." surname="Davis"/> | ||||
<date month="April" year="2018"/> | ||||
</front> | ||||
</reference> | ||||
<seriesInfo name="NIST" value="Special Publication 800-56C Rev. 1"/> | <reference anchor="S1994"> | |||
</reference> | <front> | |||
<reference anchor="S1994"><front> | <title>Algorithms for Quantum Computation: Discrete Logarithms and F | |||
<title>Algorithms for Quantum Computation: Discrete Logarithms and Factor | actoring</title> | |||
ing</title> | <author fullname="P. Shor" initials="P." surname="Shor"/> | |||
<author fullname="P. Shor" initials="P." surname="Shor"> | <date year="1994" month="November"/> | |||
</author> | </front> | |||
<refcontent>Proceedings of the 35th Annual Symposium on Foundations | ||||
of Computer Science, pp. 124-134"</refcontent> | ||||
</reference> | ||||
<date year="1994"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
</front> | FC.2631.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4086.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5280.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5753.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5869.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8017.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8619.xml"/> | ||||
</references> | ||||
</references> | ||||
<seriesInfo name="Proceedings" value="of the 35th Annual Symposium on Fou | <section anchor="sect-a" numbered="true" toc="default"> | |||
ndations of Computer Science pp. 124-134"/> | <name>Key Transport with PSK Example</name> | |||
</reference> | <t> | |||
&RFC2631; | ||||
&RFC4086; | ||||
&RFC5280; | ||||
&RFC5753; | ||||
&RFC5869; | ||||
&RFC8017; | ||||
&RFC8619; | ||||
</references> | ||||
<section title="Key Transport with PSK Example" anchor="sect-a"><t> | ||||
This example shows the establishment of an AES-256 content-encryption | This example shows the establishment of an AES-256 content-encryption | |||
key using:</t> | key using:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols" hangIndent="3"> | <li>a pre-shared key of 256 bits;</li> | |||
<t>a pre-shared key of 256 bits;</t> | <li>key transport using RSA PKCS#1 v1.5 with a 3072-bit key;</li> | |||
<t>key transport using RSA PKCS#1 v1.5 with a 3072-bit key;</t> | <li>key derivation using HKDF with SHA-384; and</li> | |||
<t>key derivation using HKDF with SHA-384; and</t> | <li>key wrap using AES-256-KEYWRAP.</li> | |||
<t>key wrap using AES-256-KEYWRAP.</t> | </ul> | |||
</list> | <t> | |||
</t> | ||||
<t> | ||||
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.</t> | key. This is omitted in an attempt to simplify the example.</t> | |||
<section anchor="sect-a.1" numbered="true" toc="default"> | ||||
<section title="Originator Processing Example" anchor="sect-a.1"> | <name>Originator Processing Example</name> | |||
<t> The pre-shared key known to Alice and Bob, in hexadecimal, is:</t> | ||||
<t> The pre-shared key known to Alice and Bob, in hexadecimal:</t> | <sourcecode type="test-vectors"><![CDATA[ | |||
c244cdd11a0d1f39d9b61282770244fb0f6befb91ab7f96cb05213365cf95b15 ]]></sourcec | ||||
<figure><artwork> | ode> | |||
c244cdd11a0d1f39d9b61282770244fb0f6befb91ab7f96cb05213365cf95b15 | <t> The identifier assigned to the pre-shared key is:</t> | |||
</artwork></figure> | <sourcecode type="test-vectors"><![CDATA[ | |||
ptf-kmc:13614122112 ]]></sourcecode> | ||||
<t> The identifier assigned to the pre-shared key is:</t> | <t>Alice obtains Bob's public key:</t> | |||
<figure><artwork> | <sourcecode type="test-vectors"><![CDATA[ | |||
ptf-kmc:13614122112 | ||||
</artwork></figure> | ||||
<t>Alice obtains Bob's public key:</t> | ||||
<figure><artwork><![CDATA[ | ||||
-----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= | |||
-----END PUBLIC KEY----- | -----END PUBLIC KEY----- ]]></sourcecode> | |||
]]></artwork> | <t> Bob's RSA public key has the following key identifier: </t> | |||
</figure> | <sourcecode type="test-vectors"><![CDATA[ | |||
9eeb67c9b95a74d44d2f16396680e801b5cba49c ]]></sourcecode> | ||||
<t> Bob's RSA public key has the following key identifier: </t> | <t> Alice randomly generates a content-encryption key: </t> | |||
<figure><artwork> | <sourcecode type="test-vectors"><![CDATA[ | |||
9eeb67c9b95a74d44d2f16396680e801b5cba49c | c8adc30f4a3e20ac420caa76a68f5787c02ab42afea20d19672fd963a5338e83 ]]></sourcec | |||
</artwork></figure> | ode> | |||
<t> Alice randomly generates a key-derivation key: </t> | ||||
<t> Alice randomly generates a content-encryption key: </t> | <sourcecode type="test-vectors"><![CDATA[ | |||
<figure><artwork> | df85af9e3cebffde6e9b9d24263db31114d0a8e33a0d50e05eb64578ccde81eb ]]></sourcec | |||
c8adc30f4a3e20ac420caa76a68f5787c02ab42afea20d19672fd963a5338e83 | ode> | |||
</artwork></figure> | <t> Alice encrypts the key-derivation key in Bob's public key: </t> | |||
<sourcecode type="test-vectors"><![CDATA[ | ||||
<t> Alice randomly generates a key-derivation key: </t> | 52693f12140c91dea2b44c0b7936f6be46de8a7bfab072bcb6ecfd56b06a9f65 | |||
<figure><artwork> | 1bd4669d336aef7b449e5cd9b151893b7c7a3b8e364394840b0a5434cbf10e1b | |||
df85af9e3cebffde6e9b9d24263db31114d0a8e33a0d50e05eb64578ccde81eb | 5670aefd074faf380665d204fb95153543346f36c2125dba6f4d23d2bc61434b | |||
</artwork></figure> | 5e36ff72b3eafe57c6cf7f74924c309f174b0b8753554b58ed33a8848d707a98 | |||
c0c2b1ddcfd09e31fe213ca0a48dd157bd7d842e85cc76f77710d58efeaa0525 | ||||
<t> Alice encrypts the key-derivation key in Bob's public key: </t> | c651bcd1410fb47534ecabaf5ab7daabed809d4b97220caf6d4929c5fb684f7b | |||
b8692e6e70332ff9b3f7c11d6cac51d4a35593173d48f80ca843b89789d625e7 | ||||
<figure><artwork><![CDATA[ | 997ad7d674d25a2a7d165a5f39b3cb6358e937bdb02ac8a524ac93113cedd9ad | |||
4e6200431ed95e0e28f7288dba56d4b90e75959e068884664c43368f3d978f3d | c68263025c0bb0997d716e58d4d7b69739bf591f3e71c7678dc0df96f3df9e8a | |||
8179e5837e3c27bf8dc1f6e2827b9ede969be77417516de07d90e37c560add01 | a5738f4f9ce21489f300e040891b20b2ab6d9051b3c2e68efa2fa9799a706878 | |||
48deb0c9178088ccb72c068d8a9076b6a5e7ecc9093e30fdeaecc9e138d80626 | d5f462018c021d6669ed649f9acdf78476810198bfb8bd41ffedc585eafa957e | |||
74fcf685f3082b910839551cd8741beedeee6e87c08ff84f03ba87118730cdf7 | ea1d3625e4bed376e7ae49718aee2f575c401a26a29941d8da5b7ee9aca36471 ]]></sourcec | |||
667002316f1a29a6cc596c7ddf95a51e398927d1916bf27929945de080fc7c80 | ode> | |||
6af6281aed6492acffa4ef1b4f53e67fca9a417db2350a2277d586ee3cabefd3 | <t> Alice produces a 256-bit key-encryption key with HKDF using | |||
b4a44f04d3c6803d54fe9a7159210dabedda9a94f310d303331da51c0218d92a | SHA-384; the secret value is the key-derivation key; and the 'info' is th | |||
2efb003792259195a9fd4cc403af613fdf1a6265ea70bf702fd1c6f734264c9a | e DER-encoded CMSORIforPSKOtherInfo structure with the following values: </t> | |||
59196e8e8fd657fa028e272ef741eb7711fd5b3f4ea7da9c33df66bf487da710 | <sourcecode type="test-vectors"><![CDATA[ | |||
1c9bbfddaf1c073900a3ea99da513d8aa32605db07dc1c47504cab30c9304a85 | 0 56: SEQUENCE { | |||
d87377f603ec3df4056ddcf3d756fb7ed98254421a4ae151f17ad4e28c5ea077 | 2 32: OCTET STRING | |||
63358dfb1ef5f73435f337b21a38c1a3fa697a530dd97e462f6b5fb2052a2d53 | : C2 44 CD D1 1A 0D 1F 39 D9 B6 12 82 77 02 44 FB | |||
]]></artwork> | : 0F 6B EF B9 1A B7 F9 6C B0 52 13 36 5C F9 5B 15 | |||
</figure> | 36 1: ENUMERATED 5 | |||
39 11: SEQUENCE { | ||||
<t> Alice produces a 256-bit key-encryption key with HKDF using SHA-384; | 41 9: OBJECT IDENTIFIER aes256-wrap (2 16 840 1 101 3 4 1 45) | |||
the secret value is the key-derivation key; the 'info' is the DER- | : } | |||
encoded CMSORIforPSKOtherInfo structure with the following values: </t> | 52 1: INTEGER 32 | |||
55 1: INTEGER 32 | ||||
<figure><artwork><![CDATA[ | : } ]]></sourcecode> | |||
0 56: SEQUENCE { | <t> The DER encoding of CMSORIforPSKOtherInfo produces 58 octets:</t> | |||
2 32: OCTET STRING | <sourcecode type="test-vectors"> | |||
: C2 44 CD D1 1A 0D 1F 39 D9 B6 12 82 77 02 44 FB | <![CDATA[ 30380420c244cdd11a0d1f39d9b61282770244fb0f6befb91ab7f96cb0521336 | |||
: 0F 6B EF B9 1A B7 F9 6C B0 52 13 36 5C F9 5B 15 | 5cf95b150a0105300b060960864801650304012d020120020120 ]]></sourcecode> | |||
36 1: ENUMERATED 5 | <t>The HKDF output is 256 bits:</t> | |||
39 11: SEQUENCE { | <sourcecode type="test-vectors"> | |||
41 9: OBJECT IDENTIFIER aes256-wrap | <![CDATA[ f319e9cebb35f1c6a7a9709b8760b9d0d3e30e16c5b2b69347e9f00ca540a232 ]]>< | |||
: { 2 16 840 1 101 3 4 1 45 } | /sourcecode> | |||
: } | <t> Alice uses AES-KEY-WRAP to encrypt the 256-bit content-encryption ke | |||
52 1: INTEGER 32 | y with the key-encryption key:</t> | |||
55 1: INTEGER 32 | <sourcecode type="test-vectors"> | |||
: } | <![CDATA[ ea0947250fa66cd525595e52a69aaade88efcf1b0f108abe291060391b1cdf59 | |||
07f36b4067e45342 ]]></sourcecode> | ||||
]]></artwork> | <t>Alice encrypts the content using AES-256-GCM with the content-encrypt | |||
</figure> | ion key. The 12-octet nonce used is:</t> | |||
<sourcecode type="test-vectors"> | ||||
<t> The DER encoding of CMSORIforPSKOtherInfo produces 58 octets:</t> | <![CDATA[ cafebabefacedbaddecaf888 ]]></sourcecode> | |||
<figure><artwork> | <t>The content plaintext is:</t> | |||
30380420c244cdd11a0d1f39d9b61282770244fb0f6befb91ab7f96cb0521336 | <sourcecode type="test-vectors"> | |||
5cf95b150a0105300b060960864801650304012d020120020120 | <![CDATA[ 48656c6c6f2c20776f726c6421 ]]></sourcecode> | |||
</artwork></figure> | <t>The resulting ciphertext is:</t> | |||
<sourcecode type="test-vectors"> | ||||
<t>The HKDF output is 256 bits:</t> | <![CDATA[ 9af2d16f21547fcefed9b3ef2d ]]></sourcecode> | |||
<figure><artwork> | <t>The resulting 12-octet authentication tag is:</t> | |||
a14d87451dfd11d83cd54ffe2bd38c49a2adfed3ac49f1d3e62bbdc64ae43b32 | <sourcecode type="test-vectors"> | |||
</artwork></figure> | <![CDATA[ a0e5925cc184e0172463c44c ]]></sourcecode> | |||
</section> | ||||
<t> Alice uses AES-KEY-WRAP to encrypt the 256-bit content-encryption key wi | <section anchor="sect-a.2" numbered="true" toc="default"> | |||
th the key-encryption key:</t> | <name>ContentInfo and AuthEnvelopedData</name> | |||
<figure><artwork> | <t> | |||
ae4ea1d99e78fcdcea12d9f10d991ac71502939ee0c30ebdcc97dd1fc5ba3566 | Alice encodes the AuthEnvelopedData and the ContentInfo and | |||
c83d0dd5d1b4faa5 | ||||
</artwork></figure> | ||||
<t>Alice encrypts the content using AES-256-GCM with the content-encryption k | ||||
ey. The 12-octet nonce used is:</t> | ||||
<figure><artwork> | ||||
cafebabefacedbaddecaf888 | ||||
</artwork></figure> | ||||
<t>The content plaintext is:</t> | ||||
<figure><artwork> | ||||
48656c6c6f2c20776f726c6421 | ||||
</artwork></figure> | ||||
<t>The resulting ciphertext is:</t> | ||||
<figure><artwork> | ||||
9af2d16f21547fcefed9b3ef2d | ||||
</artwork></figure> | ||||
<t>The resulting 12-octet authentication tag is:</t> | ||||
<figure><artwork> | ||||
a0e5925cc184e0172463c44c | ||||
</artwork></figure> | ||||
</section> | ||||
<section title="ContentInfo and AuthEnvelopedData" anchor="sect-a.2"><t> | ||||
Alice encodes the AuthEnvelopedData and the ContentInfo, and | ||||
sends the result to Bob. The resulting structure is:</t> | sends the result to Bob. The resulting structure is:</t> | |||
<sourcecode type="test-vectors"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
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 | |||
: } | : } | |||
: } | : } | |||
: } | : } ]]></sourcecode> | |||
]]></artwork> | </section> | |||
</figure> | <section anchor="sect-a.3" numbered="true" toc="default"> | |||
</section> | <name>Recipient Processing Example</name> | |||
<t>Bob's private key is:</t> | ||||
<section title="Recipient Processing Example" anchor="sect-a.3"> | <sourcecode type="test-vectors"><![CDATA[ | |||
<t>Bob's private key:</t> | ||||
<figure><artwork><![CDATA[ | ||||
-----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 line 1322 ¶ | skipping to change at line 1068 ¶ | |||
B8oph/jD8O2YCk4YCTDOXPEi8Rjusxzro+whvRR+kG0gsGGcKSVNCPj1fNISEte4 | B8oph/jD8O2YCk4YCTDOXPEi8Rjusxzro+whvRR+kG0gsGGcKSVNCPj1fNISEte4 | |||
gJId7O1mUAAzeDjn/VaS/PXQovEMolssPPKn9NocbKbpAoHBAJnFHJunl22W/lrr | gJId7O1mUAAzeDjn/VaS/PXQovEMolssPPKn9NocbKbpAoHBAJnFHJunl22W/lrr | |||
ppmPnIzjI30YVcYOA5vlqLKyGaAsnfYqP1WUNgfVhq2jRsrHx9cnHQI9Hu442PvI | ppmPnIzjI30YVcYOA5vlqLKyGaAsnfYqP1WUNgfVhq2jRsrHx9cnHQI9Hu442PvI | |||
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----- ]]></sourcecode> | |||
]]></artwork> | <t> Bob decrypts the key-derivation key with his RSA private key:</t> | |||
</figure> | <sourcecode type="test-vectors"> | |||
<![CDATA[ df85af9e3cebffde6e9b9d24263db31114d0a8e33a0d50e05eb64578ccde81eb | ||||
<t> Bob decrypts the key-derivation key with his RSA private key:</t> | ]]></sourcecode> | |||
<figure><artwork> | <t>Bob produces a 256-bit key-encryption key with HKDF using SHA-384; | |||
df85af9e3cebffde6e9b9d24263db31114d0a8e33a0d50e05eb64578ccde81eb | the secret value is the key-derivation key; and the 'info' is | |||
</artwork></figure> | the DER-encoded CMSORIforPSKOtherInfo structure with the same | |||
values as shown in <xref target="sect-a.1"/>. The HKDF output is 256 bits | ||||
<t>Bob produces a 256-bit key-encryption key with HKDF using SHA-384; the sec | :</t> | |||
ret value is the key-derivation key; the 'info' is the DER-encoded CMSORIforPSKO | <sourcecode type="test-vectors"><![CDATA[ | |||
therInfo structure with the same values as shown in A.1. The HKDF output is 256 | f319e9cebb35f1c6a7a9709b8760b9d0d3e30e16c5b2b69347e9f00ca540a232 ]]></sourcec | |||
bits:</t> | ode> | |||
<figure><artwork> | <t>Bob uses AES-KEY-WRAP to decrypt the content-encryption key with the | |||
a14d87451dfd11d83cd54ffe2bd38c49a2adfed3ac49f1d3e62bbdc64ae43b32 | key-encryption key; the content-encryption key is:</t> | |||
</artwork></figure> | <sourcecode type="test-vectors"><![CDATA[ | |||
c8adc30f4a3e20ac420caa76a68f5787c02ab42afea20d19672fd963a5338e83 ]]></sourcec | ||||
<t>Bob uses AES-KEY-WRAP to decrypt the content-encryption key with the key-e | ode> | |||
ncryption key; the content-encryption key is:</t> | <t>Bob decrypts the content using AES-256-GCM with the content-encryptio | |||
<figure><artwork> | n key and checks the received authentication tag. The 12-octet nonce used is:</t | |||
c8adc30f4a3e20ac420caa76a68f5787c02ab42afea20d19672fd963a5338e83 | > | |||
</artwork></figure> | <sourcecode type="test-vectors"> | |||
<![CDATA[ cafebabefacedbaddecaf888 ]]></sourcecode> | ||||
<t>Bob decrypts the content using AES-256-GCM with the content-encryption key | <t>The 12-octet authentication tag is: </t> | |||
, and checks the received authentication tag. The 12-octet nonce used is:</t> | <sourcecode type="test-vectors"> | |||
<figure><artwork> | <![CDATA[ a0e5925cc184e0172463c44c ]]></sourcecode> | |||
cafebabefacedbaddecaf888 | <t>The received ciphertext content is:</t> | |||
</artwork></figure> | <sourcecode type="test-vectors"> | |||
<![CDATA[ 9af2d16f21547fcefed9b3ef2d ]]></sourcecode> | ||||
<t>The 12-octet authentication tag is: </t> | <t>The resulting plaintext content is:</t> | |||
<figure><artwork> | <sourcecode type="test-vectors"> | |||
a0e5925cc184e0172463c44c | <![CDATA[ 48656c6c6f2c20776f726c6421 ]]></sourcecode> | |||
</artwork></figure> | </section> | |||
</section> | ||||
<t>The received ciphertext content is:</t> | <section anchor="sect-b" numbered="true" toc="default"> | |||
<figure><artwork> | <name>Key Agreement with PSK Example</name> | |||
9af2d16f21547fcefed9b3ef2d | <t> | |||
</artwork></figure> | ||||
<t>The resulting plaintext content is:</t> | ||||
<figure><artwork> | ||||
48656c6c6f2c20776f726c6421 | ||||
</artwork></figure> | ||||
</section> | ||||
</section> | ||||
<section title="Key Agreement with PSK Example" anchor="sect-b"><t> | ||||
This example shows the establishment of an AES-256 content-encryption | This example shows the establishment of an AES-256 content-encryption | |||
key using:</t> | key using:</t> | |||
<ul spacing="normal"> | ||||
<li>a pre-shared key of 256 bits;</li> | ||||
<t><list style="symbols" hangIndent="3"> | <li>key agreement using ECDH on curve P-384 and X9.63 KDF | |||
<t>a pre-shared key of 256 bits;</t> | with SHA-384;</li> | |||
<t>key agreement using ECDH on curve P-384 and X9.63 KDF | <li>key derivation using HKDF with SHA-384; and</li> | |||
with SHA-384;</t> | <li>key wrap using AES-256-KEYWRAP.</li> | |||
<t>key derivation using HKDF with SHA-384; and</t> | </ul> | |||
<t>key wrap using AES-256-KEYWRAP.</t> | <t> | |||
</list> | ||||
</t> | ||||
<t> | ||||
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.</t> | message. This is omitted in an attempt to simplify the example.</t> | |||
<section anchor="sect-b.1" numbered="true" toc="default"> | ||||
<section title="Originator Processing Example" anchor="sect-b.1"> | <name>Originator Processing Example</name> | |||
<t> The pre-shared key known to Alice and Bob, in hexadecimal, is:</t> | ||||
<t> The pre-shared key known to Alice and Bob, in hexadecimal:</t> | <sourcecode type="test-vectors"><![CDATA[ | |||
<figure><artwork> | 4aa53cbf500850dd583a5d9821605c6fa228fb5917f87c1c078660214e2d83e4 ]]></sourcec | |||
4aa53cbf500850dd583a5d9821605c6fa228fb5917f87c1c078660214e2d83e4 | ode> | |||
</artwork></figure> | <t>The identifier assigned to the pre-shared key is:</t> | |||
<sourcecode type="test-vectors"><![CDATA[ | ||||
<t>The identifier assigned to the pre-shared key is:</t> | ptf-kmc:216840110121 ]]></sourcecode> | |||
<figure><artwork> | <t>Alice randomly generates a content-encryption key:</t> | |||
ptf-kmc:216840110121 | <sourcecode type="test-vectors"><![CDATA[ | |||
</artwork></figure> | 937b1219a64d57ad81c05cc86075e86017848c824d4e85800c731c5b7b091033 ]]></sourcec | |||
ode> | ||||
<t>Alice randomly generates a content-encryption key:</t> | <t>Alice obtains Bob's static ECDH public key:</t> | |||
<figure><artwork> | <sourcecode type="test-vectors"><![CDATA[ | |||
937b1219a64d57ad81c05cc86075e86017848c824d4e85800c731c5b7b091033 | ||||
</artwork></figure> | ||||
<t>Alice obtains Bob's static ECDH public key:</t> | ||||
<figure><artwork><![CDATA[ | ||||
-----BEGIN PUBLIC KEY----- | -----BEGIN PUBLIC KEY----- | |||
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEScGPBO9nmUwGrgbGEoFY9HR/bCo0WyeY | MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEScGPBO9nmUwGrgbGEoFY9HR/bCo0WyeY | |||
/dePQVrwZmwN2yMJmO2d1kWCvLTz8U7atinxyIRe9CV54yau1KWU/wbkhPDnzuSM | /dePQVrwZmwN2yMJmO2d1kWCvLTz8U7atinxyIRe9CV54yau1KWU/wbkhPDnzuSM | |||
YkcpxMGo32z3JetEloW5aFOja13vv/W5 | YkcpxMGo32z3JetEloW5aFOja13vv/W5 | |||
-----END PUBLIC KEY----- | -----END PUBLIC KEY----- ]]></sourcecode> | |||
]]></artwork> | <t>It has a key identifier of:</t> | |||
</figure> | <sourcecode type="test-vectors"><![CDATA[ | |||
e8218b98b8b7d86b5e9ebdc8aeb8c4ecdc05c529 ]]></sourcecode> | ||||
<t>It has a key identifier of:</t> | <t> Alice generates an ephemeral ECDH key pair on the same curve:</t> | |||
<figure><artwork> | <sourcecode type="test-vectors"><![CDATA[ | |||
e8218b98b8b7d86b5e9ebdc8aeb8c4ecdc05c529 | ||||
</artwork></figure> | ||||
<t> Alice generates an ephemeral ECDH key pair on the same curve:</t> | ||||
<figure><artwork><![CDATA[ | ||||
-----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----- ]]></sourcecode> | |||
]]></artwork> | <t>Alice computes a shared secret called "Z" using Bob's static ECDH | |||
</figure> | ||||
<t>Alice computes a shared secret, called Z, using the Bob's static ECDH | ||||
public key and her ephemeral ECDH private key; Z is: </t> | public key and her ephemeral ECDH private key; Z is: </t> | |||
<figure><artwork> | <sourcecode type="test-vectors"><![CDATA[ | |||
3f015ed0ff4b99523a95157bbe77e9cc0ee52fcffeb7e41eac79d1c11b6cc556 | 3f015ed0ff4b99523a95157bbe77e9cc0ee52fcffeb7e41eac79d1c11b6cc556 | |||
19cf8807e6d800c2de40240fe0e26adc | 19cf8807e6d800c2de40240fe0e26adc ]]></sourcecode> | |||
</artwork></figure> | <t> Alice computes the pairwise key-encryption key, called "KEK1", from | |||
Z using | ||||
<t> Alice computes the pairwise key-encryption key, called KEK1, from Z using | ||||
the X9.63 KDF with the ECC-CMS-SharedInfo structure with the following values: | the X9.63 KDF with the ECC-CMS-SharedInfo structure with the following values: | |||
</t> | </t> | |||
<sourcecode type="test-vectors"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | 0 21: SEQUENCE { | |||
0 21: SEQUENCE { | 2 11: SEQUENCE { | |||
2 11: SEQUENCE { | 4 9: OBJECT IDENTIFIER aes256-wrap (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] { | |||
: } | 17 4: OCTET STRING 00 00 00 20 | |||
15 6: [2] { | : } | |||
17 4: OCTET STRING 00 00 00 20 | : } ]]></sourcecode> | |||
: } | <t>The DER encoding of ECC-CMS-SharedInfo produces 23 octets:</t> | |||
: } | <sourcecode type="test-vectors"><![CDATA[ | |||
]]></artwork> | 3015300b060960864801650304012da206040400000020 ]]></sourcecode> | |||
</figure> | <t>The X9.63 KDF output is the 256-bit KEK1:</t> | |||
<sourcecode type="test-vectors"><![CDATA[ | ||||
<t>The DER encoding of ECC-CMS-SharedInfo produces 23 octets:</t> | 27dc25ddb0b425f7a968ceada80a8f73c6ccaab115baafcce4a22a45d6b8f3da ]]></source | |||
<figure><artwork> | code> | |||
3015300b060960864801650304012da206040400000020 | <t>Alice produces the 256-bit KEK2 with HKDF using SHA-384; the secret | |||
</artwork></figure> | value is KEK1; and the 'info' is the DER-encoded CMSORIforPSKOtherInfo | |||
<t>The X9.63 KDF output is the 256-bit KEK1:</t> | ||||
<figure><artwork> | ||||
27dc25ddb0b425f7a968ceada80a8f73c6ccaab115baafcce4a22a45d6b8f3da | ||||
</artwork></figure> | ||||
<t>Alice produces the 256-bit KEK2 with HKDF using SHA-384; the secret | ||||
value is KEK1; the 'info' is the DER-encoded CMSORIforPSKOtherInfo | ||||
structure with the following values:</t> | structure with the following values:</t> | |||
<sourcecode type="test-vectors"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | 0 56: SEQUENCE { | |||
0 56: SEQUENCE { | 2 32: OCTET STRING | |||
2 32: OCTET STRING | : 4A A5 3C BF 50 08 50 DD 58 3A 5D 98 21 60 5C 6F | |||
: 4A A5 3C BF 50 08 50 DD 58 3A 5D 98 21 60 5C 6F | : A2 28 FB 59 17 F8 7C 1C 07 86 60 21 4E 2D 83 E4 | |||
: A2 28 FB 59 17 F8 7C 1C 07 86 60 21 4E 2D 83 E4 | 36 1: ENUMERATED 10 | |||
36 1: ENUMERATED 10 | 39 11: SEQUENCE { | |||
39 11: SEQUENCE { | 41 9: OBJECT IDENTIFIER aes256-wrap (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 | |||
: } | 55 1: INTEGER 32 | |||
52 1: INTEGER 32 | : } ]]></sourcecode> | |||
55 1: INTEGER 32 | <t>The DER encoding of CMSORIforPSKOtherInfo produces 58 octets:</t> | |||
: } | <sourcecode type="test-vectors"><![CDATA[ | |||
]]></artwork> | ||||
</figure> | ||||
<t>The DER encoding of CMSORIforPSKOtherInfo produces 58 octets:</t> | ||||
<figure><artwork> | ||||
303804204aa53cbf500850dd583a5d9821605c6fa228fb5917f87c1c07866021 | 303804204aa53cbf500850dd583a5d9821605c6fa228fb5917f87c1c07866021 | |||
4e2d83e40a010a300b060960864801650304012d020120020120 | 4e2d83e40a010a300b060960864801650304012d020120020120 ]]></sourcecode> | |||
</artwork></figure> | <t>The HKDF output is the 256-bit KEK2:</t> | |||
<sourcecode type="test-vectors"><![CDATA[ | ||||
<t>The HKDF output is the 256-bit KEK2:</t> | 7de693ee30ae22b5f8f6cd026c2164103f4e1430f1ab135dc1fb98954f9830bb ]]></source | |||
<figure><artwork> | code> | |||
7de693ee30ae22b5f8f6cd026c2164103f4e1430f1ab135dc1fb98954f9830bb | <t>Alice uses AES-KEY-WRAP to encrypt the content-encryption key with th | |||
</artwork></figure> | e KEK2; the wrapped key is:</t> | |||
<sourcecode type="test-vectors"><![CDATA[ | ||||
<t>Alice uses AES-KEY-WRAP to encrypt the content-encryption key with the KEK | ||||
2; the wrapped key is:</t> | ||||
<figure><artwork> | ||||
229fe0b45e40003e7d8244ec1b7e7ffb2c8dca16c36f5737222553a71263a92b | 229fe0b45e40003e7d8244ec1b7e7ffb2c8dca16c36f5737222553a71263a92b | |||
de08866a602d63f4 | de08866a602d63f4 ]]></sourcecode> | |||
</artwork></figure> | <t>Alice encrypts the content using AES-256-GCM with the content-encrypt | |||
ion key. The 12-octet nonce used is:</t> | ||||
<t>Alice encrypts the content using AES-256-GCM with the content-encryption k | <sourcecode type="test-vectors"><![CDATA[ | |||
ey. The 12-octet nonce used is:</t> | dbaddecaf888cafebabeface ]]></sourcecode> | |||
<figure><artwork> | <t>The plaintext is:</t> | |||
dbaddecaf888cafebabeface | <sourcecode type="test-vectors"><![CDATA[ | |||
</artwork></figure> | 48656c6c6f2c20776f726c6421 ]]></sourcecode> | |||
<t>The resulting ciphertext is:</t> | ||||
<t>The plaintext is:</t> | <sourcecode type="test-vectors"><![CDATA[ | |||
<figure><artwork> | fc6d6f823e3ed2d209d0c6ffcf ]]></sourcecode> | |||
48656c6c6f2c20776f726c6421 | <t>The resulting 12-octet authentication tag is:</t> | |||
</artwork></figure> | <sourcecode type="test-vectors"><![CDATA[ | |||
550260c42e5b29719426c1ff ]]></sourcecode> | ||||
<t>The resulting ciphertext is:</t> | </section> | |||
<figure><artwork> | <section anchor="sect-b.2" numbered="true" toc="default"> | |||
fc6d6f823e3ed2d209d0c6ffcf | <name>ContentInfo and AuthEnvelopedData</name> | |||
</artwork></figure> | <t> | |||
Alice encodes the AuthEnvelopedData and the ContentInfo and | ||||
<t>The resulting 12-octet authentication tag is:</t> | ||||
<figure><artwork> | ||||
550260c42e5b29719426c1ff | ||||
</artwork></figure> | ||||
</section> | ||||
<section title="ContentInfo and AuthEnvelopedData" anchor="sect-b.2"><t> | ||||
Alice encodes the AuthEnvelopedData and the ContentInfo, and | ||||
sends the result to Bob. The resulting structure is:</t> | sends the result to Bob. The resulting structure is:</t> | |||
<sourcecode type="test-vectors"><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
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 | |||
: } | ||||
: } | : } | |||
: } | : } ]]></sourcecode> | |||
: } | </section> | |||
]]></artwork> | ||||
</figure> | ||||
</section> | ||||
<section title="Recipient Processing Example" anchor="sect-b.3"> | ||||
<t> Bob obtains Alice's ephemeral ECDH public key from the message:</t> | ||||
<figure><artwork><![CDATA[ | <section anchor="sect-b.3" numbered="true" toc="default"> | |||
<name>Recipient Processing Example</name> | ||||
<t> Bob obtains Alice's ephemeral ECDH public key from the message:</t> | ||||
<sourcecode type="test-vectors"><![CDATA[ | ||||
-----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----- ]]></sourcecode> | |||
]]></artwork> | <t> Bob's static ECDH private key is:</t> | |||
</figure> | <sourcecode type="test-vectors"><![CDATA[ | |||
<t> Bob's static ECDH private key:</t> | ||||
<figure><artwork><![CDATA[ | ||||
-----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----- ]]></sourcecode> | |||
]]></artwork> | <t> Bob computes a shared secret called "Z" using Alice's ephemeral | |||
</figure> | ||||
<t> Bob computes a shared secret, called Z, using the Alice's ephemeral | ||||
ECDH public key and his static ECDH private key; Z is:</t> | ECDH public key and his static ECDH private key; Z is:</t> | |||
<figure><artwork> | <sourcecode type="test-vectors"><![CDATA[ | |||
3f015ed0ff4b99523a95157bbe77e9cc0ee52fcffeb7e41eac79d1c11b6cc556 | 3f015ed0ff4b99523a95157bbe77e9cc0ee52fcffeb7e41eac79d1c11b6cc556 | |||
19cf8807e6d800c2de40240fe0e26adc | 19cf8807e6d800c2de40240fe0e26adc ]]></sourcecode> | |||
</artwork></figure> | <t> Bob computes the pairwise key-encryption key, KEK1, from Z using | |||
<t> Bob computes the pairwise key-encryption key, called KEK1, from Z using | ||||
the X9.63 KDF with the ECC-CMS-SharedInfo structure with the values shown | the X9.63 KDF with the ECC-CMS-SharedInfo structure with the values shown | |||
in B.1. The X9.63 KDF output is the 256-bit KEK1:</t> | in <xref target="sect-b.1"/>. The X9.63 KDF output is the 256-bit KEK1:</t> | |||
<figure><artwork> | <sourcecode type="test-vectors"><![CDATA[ | |||
27dc25ddb0b425f7a968ceada80a8f73c6ccaab115baafcce4a22a45d6b8f3da | 27dc25ddb0b425f7a968ceada80a8f73c6ccaab115baafcce4a22a45d6b8f3da ]]></sourc | |||
</artwork></figure> | ecode> | |||
<t>Bob produces the 256-bit KEK2 with HKDF using SHA-384; the secret v | ||||
<t>Bob produces the 256-bit KEK2 with HKDF using SHA-384; the secret v | alue | |||
alue | is KEK1; and the 'info' is the DER-encoded CMSORIforPSKOtherInfo structure wi | |||
is KEK1; the 'info' is the DER-encoded CMSORIforPSKOtherInfo structure with | th | |||
the values shown in B.1. The HKDF output is the 256-bit KEK2:</t> | the values shown in <xref target="sect-b.1"/>. The HKDF output is the 256-bi | |||
<figure><artwork> | t KEK2:</t> | |||
7de693ee30ae22b5f8f6cd026c2164103f4e1430f1ab135dc1fb98954f9830bb | <sourcecode type="test-vectors"><![CDATA[ | |||
</artwork></figure> | 7de693ee30ae22b5f8f6cd026c2164103f4e1430f1ab135dc1fb98954f9830bb ]]></sourcec | |||
ode> | ||||
<t> Bob uses AES-KEY-WRAP to decrypt the content-encryption key with the | <t> Bob uses AES-KEY-WRAP to decrypt the content-encryption key with the | |||
KEK2; the content-encryption key is: </t> | KEK2; the content-encryption key is: </t> | |||
<figure><artwork> | <sourcecode type="test-vectors"><![CDATA[ | |||
937b1219a64d57ad81c05cc86075e86017848c824d4e85800c731c5b7b091033 | 937b1219a64d57ad81c05cc86075e86017848c824d4e85800c731c5b7b091033 ]]></sourc | |||
</artwork></figure> | ecode> | |||
<t>Bob decrypts the content using AES-256-GCM with the content-encryptio | ||||
<t>Bob decrypts the content using AES-256-GCM with the content-encryption | n | |||
key, and checks the received authentication tag. The 12-octet nonce used is: | key and checks the received authentication tag. The 12-octet nonce used is:< | |||
</t> | /t> | |||
<figure><artwork> | <sourcecode type="test-vectors"><![CDATA[ | |||
dbaddecaf888cafebabeface | dbaddecaf888cafebabeface ]]></sourcecode> | |||
</artwork></figure> | <t>The 12-octet authentication tag is:</t> | |||
<sourcecode type="test-vectors"><![CDATA[ | ||||
<t>The 12-octet authentication tag is:</t> | 550260c42e5b29719426c1ff ]]></sourcecode> | |||
<figure><artwork> | <t>The received ciphertext content is:</t> | |||
550260c42e5b29719426c1ff | <sourcecode type="test-vectors"><![CDATA[ | |||
</artwork></figure> | fc6d6f823e3ed2d209d0c6ffcf ]]></sourcecode> | |||
<t>The resulting plaintext content is:</t> | ||||
<t>The received ciphertext content is:</t> | <sourcecode type="test-vectors"><![CDATA[ | |||
<figure><artwork> | 48656c6c6f2c20776f726c6421 ]]></sourcecode> | |||
fc6d6f823e3ed2d209d0c6ffcf | </section> | |||
</artwork></figure> | </section> | |||
<section numbered="false" anchor="acknowledgements" toc="default"> | ||||
<t>The resulting plaintext content is:</t> | <name>Acknowledgements</name> | |||
<figure><artwork> | <t> | |||
48656c6c6f2c20776f726c6421 | ||||
</artwork></figure> | ||||
</section> | ||||
</section> | ||||
<section title="Acknowledgements" numbered="no" anchor="acknowledgements" | ||||
><t> | ||||
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.</t> | improved the design, clarity, and implementation guidance.</t> | |||
</section> | ||||
</back> | ||||
</section> | </rfc> | |||
</back> | ||||
</rfc> | ||||
End of changes. 190 change blocks. | ||||
1195 lines changed or deleted | 919 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |