<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.1 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="pre5378Trust200902" docName="draft-ietf-cose-hpke-07" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="COSE HPKE">Use of Hybrid Public-Key Encryption (HPKE) with CBOR Object Signing and Encryption (COSE)</title>

    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization></organization>
      <address>
        <postal>
          <country>Austria</country>
        </postal>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="O." surname="Steele" fullname="Orie Steele" role="editor">
      <organization>Transmute</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>orie@transmute.industries</email>
      </address>
    </author>
    <author initials="D." surname="Ajitomi" fullname="Daisuke Ajitomi">
      <organization></organization>
      <address>
        <postal>
          <country>Japan</country>
        </postal>
        <email>dajiaji@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Lundblade" fullname="Laurence Lundblade">
      <organization>Security Theory LLC</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>lgl@securitytheory.com</email>
      </address>
    </author>

    <date year="2023" month="October" day="22"/>

    <area>Security</area>
    <workgroup>COSE</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 60?>

<t>This specification defines hybrid public-key encryption (HPKE) for use with 
CBOR Object Signing and Encryption (COSE). HPKE offers a variant of
public-key encryption of arbitrary-sized plaintexts for a recipient public key.</t>

<t>HPKE works for any combination of an asymmetric key encapsulation mechanism (KEM),
key derivation function (KDF), and authenticated encryption with
additional data (AEAD) function. Authentication for HPKE in COSE is
provided by COSE-native security mechanisms or by one of the authenticated
variants of HPKE.</t>

<t>This document defines the use of the HPKE with COSE.</t>



    </abstract>



  </front>

  <middle>


<?line 74?>

<section anchor="introduction"><name>Introduction</name>

<t>Hybrid public-key encryption (HPKE) <xref target="RFC9180"/> is a scheme that 
provides public key encryption of arbitrary-sized plaintexts given a 
recipient's public key. HPKE utilizes a non-interactive ephemeral-static 
Diffie-Hellman exchange to establish a shared secret. The motivation for
standardizing a public key encryption scheme is explained in the introduction
of <xref target="RFC9180"/>.</t>

<t>The HPKE specification provides a variant of public key encryption of
arbitrary-sized plaintexts for a recipient public key. It also
includes three authenticated variants, including one that authenticates
possession of a pre-shared key, one that authenticates possession of
a key encapsulation mechanism (KEM) private key, and one that
authenticates possession of both a pre-shared key and a KEM private key.</t>

<t>This specification utilizes HPKE as a foundational building block and
carries the output to COSE (<xref target="RFC9052"/>, <xref target="RFC9053"/>).</t>

</section>
<section anchor="conventions-and-terminology"><name>Conventions and Terminology</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>

<t>This specification uses the following abbreviations and terms:</t>

<t><list style="symbols">
  <t>Content-encryption key (CEK), a term defined in CMS <xref target="RFC2630"/>.</t>
  <t>Hybrid Public Key Encryption (HPKE) is defined in <xref target="RFC9180"/>.</t>
  <t>pkR is the public key of the recipient, as defined in <xref target="RFC9180"/>.</t>
  <t>skR is the private key of the recipient, as defined in <xref target="RFC9180"/>.</t>
  <t>Key Encapsulation Mechanism (KEM), see <xref target="RFC9180"/>.</t>
  <t>Key Derivation Function (KDF), see <xref target="RFC9180"/>.</t>
  <t>Authenticated Encryption with Associated Data (AEAD), see <xref target="RFC9180"/>.</t>
  <t>Additional Authenticated Data (AAD), see <xref target="RFC9180"/>.</t>
</list></t>

</section>
<section anchor="hpke-for-cose"><name>HPKE for COSE</name>

<section anchor="overview"><name>Overview</name>

<t>This specification supports two uses of HPKE in COSE, namely</t>

<t><list style="symbols">
  <t>HPKE in a single recipient setup.
This use case utilizes a one layer COSE structure. 
<xref target="one-layer"/> provides the details.</t>
  <t>HPKE in a multiple recipient setup. 
This use case requires a two layer COSE structure.  <xref target="two-layer"/> 
provides the details. While it is possible to support the single 
recipient use case with a two layer structure, the single 
layer setup is more efficient.</t>
</list></t>

<t>In both cases a new COSE header parameter, called 'encapsulated_key',
is used to convey the content of the enc structure defined in the HPKE
specification. "Enc" represents the serialized public key.</t>

<t>For use with HPKE the 'encapsulated_key' header parameter MUST
be present in the unprotected header parameter and MUST contain
the encapsulated key, which is output of the HPKE KEM, and it
is a bstr.</t>

<section anchor="one-layer"><name>Single Recipient / One Layer Structure</name>

<t>With the one layer structure the information carried inside the 
COSE_recipient structure is embedded inside the COSE_Encrypt0.</t>

<t>HPKE is used to directly encrypt the plaintext and the resulting ciphertext
is either included in the COSE_Encrypt0 or is detached. If a payload is
transported separately then it is called "detached content". A nil CBOR
object is placed in the location of the ciphertext. See Section 5
of <xref target="RFC9052"/> for a description of detached payloads.</t>

<t>The sender MUST set the alg parameter in the protected header, which
indicates the use of HPKE.</t>

<t>The sender MUST place the 'encapsulated_key' parameter into the unprotected
header. Although the use of the 'kid' parameter in COSE_Encrypt0 is
discouraged by RFC 9052, this profile allows the use of the 'kid' parameter
(or other parameters) to identify the static recipient public key used by
the sender. If the COSE_Encrypt0 contains the 'kid' then the recipient may
use it to select the appropriate private key.</t>

<t>HPKE defines an API and this API uses an "aad" parameter as input. When
COSE_Encrypt0 is used then there is no AEAD function executed by COSE
natively and HPKE offers this functionality.</t>

<t>The "aad" parameter provided to the HPKE API is constructed
as follows (and the design has been re-used from <xref target="RFC9052"/>):</t>

<figure><artwork><![CDATA[
Enc_structure = [
    context : "Encrypt0",
    protected : empty_or_serialized_map,
    external_aad : bstr
]

empty_or_serialized_map = bstr .cbor header_map / bstr .size 0
]]></artwork></figure>

<t>The protected field in the Enc_structure contains the protected attributes 
from the COSE_Encrypt0 structure at layer 0, encoded in a bstr type.</t>

<t>The external_aad field in the Enc_structure contains the Externally Supplied
Data described in Section 4.3 and Section 5.3 in RFC 9052. If this field is
not supplied, it defaults to a zero-length byte string.</t>

<t>The HPKE APIs also use an "info" parameter as input and the details are
provided in <xref target="info"/>.</t>

<t><xref target="cddl-hpke-one-layer"/> shows the COSE_Encrypt0 CDDL structure.</t>

<figure title="CDDL for HPKE-based COSE_Encrypt0 Structure" anchor="cddl-hpke-one-layer"><artwork><![CDATA[
COSE_Encrypt0_Tagged = #6.16(COSE_Encrypt0)

; Layer 0
COSE_Encrypt0 = [
    Headers,
    ciphertext : bstr / nil,
]
]]></artwork></figure>

<t>The COSE_Encrypt0 MAY be tagged or untagged.</t>

<t>An example is shown in <xref target="one-layer-example"/>.</t>

</section>
<section anchor="two-layer"><name>Multiple Recipients / Two Layer Structure</name>

<t>With the two layer structure the HPKE information is conveyed in the COSE_recipient 
structure, i.e. one COSE_recipient structure per recipient.</t>

<t>In this approach the following layers are involved:</t>

<t><list style="symbols">
  <t>Layer 0 (corresponding to the COSE_Encrypt structure) contains the content (plaintext)
encrypted with the CEK. This ciphertext MAY be detached. If not detached, then
it is included in the COSE_Encrypt structure.</t>
  <t>Layer 1 (corresponding to a recipient structure) contains parameters needed for 
HPKE to generate a shared secret used to encrypt the CEK. This layer conveys the 
encrypted CEK in the encCEK structure. The protected header MUST contain the HPKE 
alg parameter and the unprotected header MUST contain the 'encapsulated_key' parameter.
The unprotected header MAY contain the kid parameter to identify the static recipient
public key the sender has been using with HPKE.</t>
</list></t>

<t>This two-layer structure is used to encrypt content that can also be shared with
multiple parties at the expense of a single additional encryption operation.
As stated above, the specification uses a CEK to encrypt the content at layer 0.</t>

<t>The COSE_recipient structure, shown in <xref target="cddl-hpke"/>, is repeated for each
recipient.</t>

<figure title="CDDL for HPKE-based COSE_Encrypt Structure" anchor="cddl-hpke"><artwork><![CDATA[
COSE_Encrypt_Tagged = #6.96(COSE_Encrypt)
 
/ Layer 0 /
COSE_Encrypt = [
  Headers,
  ciphertext : bstr / nil,
  recipients : + COSE_recipient
]

/ Layer 1 /
COSE_recipient = [
  protected   : bstr .cbor header_map,
  unprotected : header_map,
  encCEK      : bstr,
]

header_map = {
  Generic_Headers,
  * label => values,
}
]]></artwork></figure>

<t>The COSE_Encrypt MAY be tagged or untagged.</t>

<t>An example is shown in <xref target="two-layer-example"/>.</t>

</section>
</section>
<section anchor="info"><name>Info Parameter</name>

<t>The HPKE specification defines the "info" parameter as a context information
structure that is used to ensure that the derived keying material is bound to
the context of the transaction.</t>

<t>This section provides a suggestion for constructing the info structure. HPKE leaves
the info parameter for these two functions as optional. Application profiles of this
specification MAY populate the fields of the COSE_KDF_Context structure or MAY use
a different structure as input to the "info" parameter. If no content for the
"info" parameter is not supplied, it defaults to a zero-length byte string.</t>

<t>This specification re-uses the context information structure defined in
<xref target="RFC9053"/> as a foundation for the info structure. This payload becomes the content
of the info parameter for the HPKE functions, when utilized. For better readability of
this specification the COSE_KDF_Context structure is repeated in <xref target="cddl-cose-kdf"/>.</t>

<figure title="COSE_KDF_Context Data Structure as 'info' Parameter for HPKE" anchor="cddl-cose-kdf"><artwork><![CDATA[
   PartyInfo = (
       identity : bstr / nil,
       nonce : bstr / int / nil,
       other : bstr / nil
   )

   COSE_KDF_Context = [
       AlgorithmID : int / tstr,
       PartyUInfo : [ PartyInfo ],
       PartyVInfo : [ PartyInfo ],
       SuppPubInfo : [
           keyDataLength : uint,
           protected : empty_or_serialized_map,
           ? other : bstr
       ],
       ? SuppPrivInfo : bstr
   ]
]]></artwork></figure>

</section>
</section>
<section anchor="ciphersuite-registration"><name>Ciphersuite Registration</name>

<t>This specification registers a number of ciphersuites for use with HPKE.
A ciphersuite is thereby a combination of several algorithm configurations:</t>

<t><list style="symbols">
  <t>HPKE Mode</t>
  <t>KEM algorithm</t>
  <t>KDF algorithm</t>
  <t>AEAD algorithm</t>
</list></t>

<t>The "KEM", "KDF", and "AEAD" values are conceptually taken from the HPKE IANA
registry <xref target="HPKE-IANA"/>. Hence, COSE-HPKE cannot use a algorithm combination
that is not already available with HPKE.</t>

<t>For better readability of the algorithm combination ciphersuites labels are
build according to the following scheme:</t>

<figure><artwork><![CDATA[
HPKE-<Version>-<Mode>-<KEM>-<KDF>-<AEAD>
]]></artwork></figure>

<t>The "Mode" indicator may be populated with the following values from
Table 1 of <xref target="RFC9180"/>:</t>

<t><list style="symbols">
  <t>"Base" refers to "mode_base" described in Section 5.1.1 of <xref target="RFC9180"/>,
which only enables encryption to the holder of a given KEM private key.</t>
  <t>"PSK" refers to "mode_psk", described in Section 5.1.2 of <xref target="RFC9180"/>,
which authenticates using a pre-shared key.</t>
  <t>"Auth" refers to "mode_auth", described in Section 5.1.3 of <xref target="RFC9180"/>,
which authenticates using an asymmetric key.</t>
  <t>"Auth_Psk" refers to "mode_auth_psk", described in Section 5.1.4 of <xref target="RFC9180"/>,
which authenticates using both a PSK and an asymmetric key.</t>
</list></t>

<t>For a list of ciphersuite registrations, please see <xref target="IANA"/>. The following
table summarizes the relationship between the ciphersuites registered in this
document and the values registered in the HPKE IANA registry <xref target="HPKE-IANA"/>.</t>

<figure><artwork><![CDATA[
+--------------------------------------------------+------------------+
| COSE-HPKE                                        |      HPKE        |
| Cipher Suite Label                               | KEM | KDF | AEAD |
+--------------------------------------------------+-----+-----+------+
| HPKE-Base-P256-SHA256-AES128GCM                  |0x10 | 0x1 | 0x1  |
| HPKE-Base-P256-SHA256-ChaCha20Poly1305           |0x10 | 0x1 | 0x3  |
| HPKE-Base-P384-SHA384-AES256GCM                  |0x11 | 0x2 | 0x2  |
| HPKE-Base-P384-SHA384-ChaCha20Poly1305           |0x11 | 0x2 | 0x3  |
| HPKE-Base-P521-SHA512-AES256GCM                  |0x12 | 0x3 | 0x2  |
| HPKE-Base-P521-SHA512-ChaCha20Poly1305           |0x12 | 0x3 | 0x3  |
| HPKE-Base-X25519-SHA256-AES128GCM                |0x20 | 0x1 | 0x1  |
| HPKE-Base-X25519-SHA256-ChaCha20Poly1305         |0x20 | 0x1 | 0x3  |
| HPKE-Base-X448-SHA512-AES256GCM                  |0x21 | 0x3 | 0x2  |
| HPKE-Base-X448-SHA512-ChaCha20Poly1305           |0x21 | 0x3 | 0x3  |
| HPKE-Base-X25519Kyber768-SHA256-AES256GCM        |0x30 | 0x1 | 0x2  |
| HPKE-Base-X25519Kyber768-SHA256-ChaCha20Poly1305 |0x30 | 0x1 | 0x3  |
| HPKE-Base-CP256-SHA256-ChaCha20Poly1305          |0x13 | 0x1 | 0x3  |
| HPKE-Base-CP256-SHA256-AES128GCM                 |0x13 | 0x1 | 0x1  |
| HPKE-Base-CP521-SHA512-ChaCha20Poly1305          |0x15 | 0x3 | 0x3  |
| HPKE-Base-CP521-SHA512-AES256GCM                 |0x15 | 0x3 | 0x2  |
+--------------------------------------------------+-----+-----+------+
]]></artwork></figure>

<t>Note that the last four entries in the table refer to the compact encoding
of the public keys defined in <xref target="I-D.irtf-cfrg-dnhpke"/>.</t>

<t>As the list indicates, the ciphersuite labels have been abbreviated at least
to some extend to maintain the tradeoff between readability and length.</t>

</section>
<section anchor="examples"><name>Examples</name>

<t>This section provides a set of examples that shows all COSE message types
(COSE_Encrypt0, COSE_Encrypt and COSE_MAC) to which the COSE-HPKE can be
applied. Each example includes the following information that can be used
to check the interoperability of COSE-HPKE implementations:</t>

<t><list style="symbols">
  <t>plaintext: Original data of the encrypted payload.</t>
  <t>external_aad: Externally supplied AAD.</t>
  <t>skR: A recipient private key.</t>
  <t>skE: An ephemeral sender private key paired with the encapsulated_key.</t>
</list></t>

<section anchor="one-layer-example"><name>Single Recipient / One Layer Example</name>

<t>This example assumes that a sender wants to communicate an
encrypted payload to a single recipient in the most efficient way.</t>

<t>An example of the COSE_Encrypt0 structure using the HPKE scheme is
shown in <xref target="hpke-example-one"/>. Line breaks and comments have been inserted
for better readability.</t>

<t>This example uses the following:</t>

<t><list style="symbols">
  <t>alg: HPKE-Base-P256-SHA256-AES128GCM</t>
  <t>plaintext: "This is the content."</t>
  <t>external_aad: "COSE-HPKE app"</t>
  <t>skR: h'57c92077664146e876760c9520d054aa93c3afb04e306705db6090308507b4d3'</t>
  <t>skE: h'42dd125eefc409c3b57366e721a40043fb5a58e346d51c133128a77237160218'</t>
</list></t>

<figure title="COSE_Encrypt0 Example for HPKE" anchor="hpke-example-one"><artwork><![CDATA[
16([
    / alg = HPKE-Base-P256-SHA256-AES128GCM (Assumed: 35) /
    h'a1011823',
    {
        / kid /
        4: h'3031',
        / encapsulated_key /
        -4: h'045df24272faf43849530db6be01f42708b3c3a9
              df8e268513f0a996ed09ba7840894a3fb946cb28
              23f609c59463093d8815a7400233b75ca8ecb177
              54d241973e',
    },
    / encrypted plaintext /
    h'35aa3d98739289b83751125abe44e3b977e4b9abbf2c8cfaade
      b15f7681eef76df88f096',
])
]]></artwork></figure>

</section>
<section anchor="two-layer-example"><name>Multiple Recipients / Two Layer</name>

<t>In this example we assume that a sender wants to transmit a
payload to two recipients using the two-layer structure.
Note that it is possible to send two single-layer payloads, 
although it will be less efficient.</t>

<section anchor="coseencrypt"><name>COSE_Encrypt</name>

<t>An example of the COSE_Encrypt structure using the HPKE scheme is
shown in <xref target="hpke-example-cose-encrypt"/>. Line breaks and comments have been
inserted for better readability.</t>

<t>This example uses the following:</t>

<t><list style="symbols">
  <t>Encryption alg: AES-128-GCM</t>
  <t>plaintext: "This is the content."</t>
  <t>detatched ciphertext: h'cc168c4e148c52a83010a75250935a47ccb8682deebcef8fce5d60c161e849f53a2dc664'</t>
  <t>kid:"01"
  <list style="symbols">
      <t>alg: HPKE-Base-P256-SHA256-AES128GCM</t>
      <t>external_aad: "COSE-HPKE app"</t>
      <t>skR: h'57c92077664146e876760c9520d054aa93c3afb04e306705db6090308507b4d3'</t>
      <t>skE: h'97ad883f949f4cdcb1301b9446950efd4eb519e16c4a3d78304eec832692f9f6'</t>
    </list></t>
  <t>kid:"02"
  <list style="symbols">
      <t>alg: HPKE-Base-X25519-SHA256-CHACHA20POLY1305</t>
      <t>external_aad: "COSE-HPKE app"</t>
      <t>skR: h'bec275a17e4d362d0819dc0695d89a73be6bf94b66ab726ae0b1afe3c43f41ce'</t>
      <t>skE: h'b8ed3f4df56c230e36fa6620a47f24d08856d242ea547c5521ff7bd69af8fd6f'</t>
    </list></t>
</list></t>

<figure title="COSE_Encrypt Example for HPKE" anchor="hpke-example-cose-encrypt"><artwork><![CDATA[
96_0([
    / alg = AES-128-GCM (1) /
    h'a10101',
    {
        / iv /
        5: h'b3fb95dde18c6f90a9f0ae55',
    },
    / detached ciphertext /
    null,
    [
        [
            / alg = HPKE-Base-P256-SHA256-AES128GCM (Assumed: 35) /
            h'a1011823',
            {
                / kid /
                4: h'3031',
                / encapsulated_key /
                -4: h'04d97b79486fe2e7b98fb1bd43
                      c4faee316ff38d28609a1cf568
                      40a809298a91e601f1cc0c2ba4
                      6cb67b41f4651b769cafd9df78
                      e58aa7f5771291bd4f0f420ba6',
            },
            / ciphertext containing encrypted CEK /
            h'24450f54ae93375351467d17aa7a795cfede2
              c03eced1ad21fcb7e7c2fe64397',
        ],
        [
            / alg = HPKE-Base-X25519-SHA256-CHACHA20POLY1305 (Assumed: 42) /
            h'a101182a',
            {
                / kid /
                4: h'3032',
                / encapsulated_key /
                -4: h'd1afbdc95b0e735676f6bca34f
                      be50f2822259ac09bfc3c500f1
                      4a05de9b2833',
            },
            / ciphertext containing encrypted CEK /
            h'079b443ec6dfcda6a5f8748aff3875146a8ed
              40359e1279b545166385d8d9b59',
        ],
    ],
])
]]></artwork></figure>

<t>To offer authentication of the sender the payload in <xref target="hpke-example-cose-encrypt"/>
is signed with a COSE_Sign1 wrapper, which is outlined in <xref target="hpke-example-sign"/>.
The payload in <xref target="hpke-example-sign"/> is meant to contain the content of
<xref target="hpke-example-cose-encrypt"/>.</t>

<figure title="COSE_Encrypt Example for HPKE" anchor="hpke-example-sign"><artwork><![CDATA[
18(
  [
    / protected / h'a10126' / {
            \ alg \ 1:-7 \ ECDSA 256 \
          } / ,
    / unprotected / {
          / kid / 4:'sender@example.com'
        },
    / payload /     h'AA19...B80C',
    / signature /   h'E3B8...25B8'
  ]
)
]]></artwork></figure>

</section>
<section anchor="cosemac"><name>COSE_MAC</name>

<t>An example of the COSE_MAC structure using the HPKE scheme is
shown in <xref target="hpke-example-cose-mac"/>.</t>

<t>This example uses the following:</t>

<t><list style="symbols">
  <t>MAC alg: HMAC 256/256</t>
  <t>payload: "This is the content."</t>
  <t>kid:"01"
  <list style="symbols">
      <t>alg: HPKE-Base-P256-SHA256-AES128GCM</t>
      <t>external_aad: "COSE-HPKE app"</t>
      <t>skR: h'57c92077664146e876760c9520d054aa93c3afb04e306705db6090308507b4d3'</t>
      <t>skE: h'e5dd9472b5807636c95be0ba2575020ba91cbb3561b52be141da89678c664307'</t>
    </list></t>
  <t>kid:"02"
  <list style="symbols">
      <t>alg: HPKE-Base-X25519-SHA256-CHACHA20POLY1305</t>
      <t>external_aad: "COSE-HPKE app"</t>
      <t>skR: h'bec275a17e4d362d0819dc0695d89a73be6bf94b66ab726ae0b1afe3c43f41ce'</t>
      <t>skE: h'78a49d7af71b5244498e943f361aa0250184afc48b8098a68ae97ccd2cd7e56f'</t>
    </list></t>
</list></t>

<figure title="COSE_MAC Example for HPKE" anchor="hpke-example-cose-mac"><artwork><![CDATA[
97_0([
    / alg = HMAC 256/256 (5) /
    h'a10105',
    {},
    / payload = 'This is the content.' /
    h'546869732069732074686520636f6e74656e742e',
    / tag /
    h'5cdcf6055fcbdb53b4001d8fb88b2a46b200ed28e1ed77e16ddf43fb3cac3a98',
    [
        [
            / alg = HPKE-Base-P256-SHA256-AES128GCM (Assumed: 35) /
            h'a1011823',
            {
                / kid = '01' /
                4: h'3031',
                / encapsulated_key /
                -4: h'043ac21632e45e1fbd733f002a
                      621aa4f3d94737adc395d5a7cb
                      6e9554bd1ad273aec991493786
                      d72616d9759bf8526e6e20c1ed
                      c41ba5739f2b2e441781aa0eb4',
            },
            / ciphertext containing encrypted MAC key /
            h'5cee2b4235a7ff695164f7a8d1e79ccf3ca3d
              e8b22f3592626020a95b2a8d3fb4d7aa7fe37
              432426ee70073a368f29d1',
        ],
        [
            / alg = HPKE-Base-X25519-SHA256-CHACHA20POLY1305 (Assumed: 42) /
            h'a101182a',
            {
                / kid = '02' /
                4: h'3032',
                / encapsulated_key /
                -4: h'02cffacc60def3bb3d0a1c3661
                      227c9de8dc2b1d3939dd2c07d4
                      49ebb0bba324',
            },
            / ciphertext containing encrypted MAC key /
            h'3f5b8b60271d5234dbea554dc1461d0239e9f
              4589f6415e8563b061dbcb37795a616111b78
              2b4c589b534309327ffadc',
        ],
    ],
])
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="sec-cons"><name>Security Considerations</name>

<t>This specification is based on HPKE and the security considerations of
<xref target="RFC9180"/> are therefore applicable also to this specification.</t>

<t>HPKE assumes the sender is in possession of the public key of the recipient and
HPKE COSE makes the same assumptions. Hence, some form of public key distribution
mechanism is assumed to exist but outside the scope of this document.</t>

<t>HPKE relies on a source of randomness to be available on the device. Additionally, 
with the two layer structure the CEK is randomly generated and it MUST be
ensured that the guidelines in <xref target="RFC8937"/> for random number generations are followed.</t>

<t>HPKE in Base mode does not offer authentication as part of the HPKE KEM. In this
case COSE constructs like COSE_Sign, COSE_Sign1, COSE_MAC, or COSE_MAC0 can be
used to add authentication. HPKE also offers modes that offer authentication.</t>

<t>If COSE_Encrypt or COSE_Encrypt0 is used with a detached ciphertext then the
subsequently applied integrity protection via COSE_Sign, COSE_Sign1, COSE_MAC, 
or COSE_MAC0 does not cover this detached ciphertext. Implementers MUST ensure
that the detached ciphertext also experiences integrity protection. This is, for
example, the case when an AEAD cipher is used to produce the detached ciphertext
but may not be guaranteed by non-AEAD ciphers.</t>

</section>
<section anchor="IANA"><name>IANA Considerations</name>

<t>This document requests IANA to add new values to the 'COSE Algorithms' and to 
the 'COSE Header Parameters' registries.</t>

<section anchor="cose-algorithms-registry"><name>COSE Algorithms Registry</name>

<t><list style="symbols">
  <t>Name: HPKE-Base-P256-SHA256-AES128GCM</t>
  <t>Value: TBD1 (Assumed: 35)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(P-256, HKDF-SHA256) KEM, the HKDF-SHA256 KDF and the AES-128-GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-P256-SHA256-ChaCha20Poly1305</t>
  <t>Value: TBD2 (Assumed: 36)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(P-256, HKDF-SHA256) KEM, the HKDF-SHA256 KDF and the ChaCha20Poly1305 AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-P384-SHA384-AES256GCM</t>
  <t>Value: TBD3 (Assumed: 37)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(P-384, HKDF-SHA384) KEM, the HKDF-SHA384 KDF, and the AES-256-GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-P384-SHA384-ChaCha20Poly1305</t>
  <t>Value: TBD4 (Assumed: 38)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(P-384, HKDF-SHA384) KEM, the HKDF-SHA384 KDF, and the ChaCha20Poly1305 AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-P521-SHA512-AES256GCM</t>
  <t>Value: TBD5 (Assumed: 39)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(P-521, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the AES-256-GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-P521-SHA512-ChaCha20Poly1305</t>
  <t>Value: TBD6 (Assumed: 40)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(P-521, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the ChaCha20Poly1305 AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-X25519-SHA256-AES128GCM</t>
  <t>Value: TBD7 (Assumed: 41)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(X25519, HKDF-SHA256) KEM, the HKDF-SHA256 KDF, and the AES-128-GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-X25519-SHA256-ChaCha20Poly1305</t>
  <t>Value: TBD8 (Assumed: 42)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(X25519, HKDF-SHA256) KEM, the HKDF-SHA256 KDF, and the ChaCha20Poly1305 AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-X448-SHA512-AES256GCM</t>
  <t>Value: TBD9 (Assumed: 43)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(X448, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the AES-256-GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-X448-SHA512-ChaCha20Poly1305</t>
  <t>Value: TBD10 (Assumed: 44)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(X448, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the ChaCha20Poly1305 AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-X25519Kyber768-SHA256-AES256GCM</t>
  <t>Value: TBD11 (Assumed: 250)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the X25519Kyber768Draft00 KEM, the HKDF-SHA256 KDF, and the AES-256-GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: No</t>
  <t>Name: HPKE-Base-X25519Kyber768-SHA256-ChaCha20Poly1305</t>
  <t>Value: TBD12 (Assumed: 251)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the X25519Kyber768Draft00 KEM, the HKDF-SHA256 KDF, and the ChaCha20Poly1305 AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: No</t>
  <t>Name: HPKE-Base-CP256-SHA256-ChaCha20Poly1305</t>
  <t>Value: TBD13 (Assumed: 45)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(CP-256, HKDF-SHA256) KEM, the HKDF-SHA256 KDF and the ChaCha20Poly1305 AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-CP521-SHA512-ChaCha20Poly1305</t>
  <t>Value: TBD14 (Assumed: 46)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(CP-521, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the ChaCha20Poly1305 AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-CP256-SHA256-AES128GCM</t>
  <t>Value: TBD15 (Assumed: 47)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(CP-256, HKDF-SHA256) KEM, the HKDF-SHA256 KDF and the AES128GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
  <t>Name: HPKE-Base-CP521-SHA512-AES256GCM</t>
  <t>Value: TBD16 (Assumed: 47)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(CP-521, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the AES256GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="cose-header-parameters"><name>COSE Header Parameters</name>

<t><list style="symbols">
  <t>Name: encapsulated_key</t>
  <t>Label: TBDX (Assumed: -4)</t>
  <t>Value type: bstr</t>
  <t>Value Registry: N/A</t>
  <t>Description: HPKE encapsulated key</t>
  <t>Reference: [[This specification]]</t>
</list></t>

</section>
</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>

<reference anchor="RFC9180">
  <front>
    <title>Hybrid Public Key Encryption</title>
    <author fullname="R. Barnes" initials="R." surname="Barnes"/>
    <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
    <author fullname="B. Lipp" initials="B." surname="Lipp"/>
    <author fullname="C. Wood" initials="C." surname="Wood"/>
    <date month="February" year="2022"/>
    <abstract>
      <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
      <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9180"/>
  <seriesInfo name="DOI" value="10.17487/RFC9180"/>
</reference>

<reference anchor="RFC9052">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
      <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="96"/>
  <seriesInfo name="RFC" value="9052"/>
  <seriesInfo name="DOI" value="10.17487/RFC9052"/>
</reference>

<reference anchor="RFC9053">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
      <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9053"/>
  <seriesInfo name="DOI" value="10.17487/RFC9053"/>
</reference>




    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC8937">
  <front>
    <title>Randomness Improvements for Security Protocols</title>
    <author fullname="C. Cremers" initials="C." surname="Cremers"/>
    <author fullname="L. Garratt" initials="L." surname="Garratt"/>
    <author fullname="S. Smyshlyaev" initials="S." surname="Smyshlyaev"/>
    <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
    <author fullname="C. Wood" initials="C." surname="Wood"/>
    <date month="October" year="2020"/>
    <abstract>
      <t>Randomness is a crucial ingredient for Transport Layer Security (TLS) and related security protocols. Weak or predictable "cryptographically secure" pseudorandom number generators (CSPRNGs) can be abused or exploited for malicious purposes. An initial entropy source that seeds a CSPRNG might be weak or broken as well, which can also lead to critical and systemic security problems. This document describes a way for security protocol implementations to augment their CSPRNGs using long-term private keys. This improves randomness from broken or otherwise subverted CSPRNGs.</t>
      <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8937"/>
  <seriesInfo name="DOI" value="10.17487/RFC8937"/>
</reference>

<reference anchor="RFC2630">
  <front>
    <title>Cryptographic Message Syntax</title>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <date month="June" year="1999"/>
    <abstract>
      <t>This document describes the Cryptographic Message Syntax. This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary messages. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2630"/>
  <seriesInfo name="DOI" value="10.17487/RFC2630"/>
</reference>


<reference anchor="I-D.irtf-cfrg-dnhpke">
   <front>
      <title>Deterministic Nonce-less Hybrid Public Key Encryption</title>
      <author fullname="Dan Harkins" initials="D." surname="Harkins">
         <organization>Hewlett-Packard Enterprise</organization>
      </author>
      <date day="19" month="October" year="2023"/>
      <abstract>
	 <t>   This document describes enhancements to the Hybrid Public Key
   Encryption standard published by CFRG.  These include use of &quot;compact
   representation&quot; of relevant public keys, support for key-wrapping,
   and two ways to address the use of HPKE on lossy networks: a
   determinstic, nonce-less AEAD scheme, and use of a rolling sequence
   number with existing AEAD schemes.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-dnhpke-03"/>
   
</reference>


<reference anchor="HPKE-IANA" target="https://www.iana.org/assignments/hpke/hpke.xhtml">
  <front>
    <title>Hybrid Public Key Encryption (HPKE) IANA Registry</title>
    <author >
      <organization>IANA</organization>
    </author>
    <date year="2023" month="October"/>
  </front>
</reference>


    </references>


<?line 747?>

<section anchor="contributors"><name>Contributors</name>

<t>We would like thank the following individuals for their contributions
to the design of embedding the HPKE output into the COSE structure 
following a long and lively mailing list discussion:</t>

<t><list style="symbols">
  <t>Richard Barnes</t>
  <t>Ilari Liusvaara</t>
</list></t>

<t>Finally, we would like to thank Russ Housley and Brendan Moran for their
contributions to the draft as co-authors of initial versions.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>We would like to thank John Mattsson, Mike Prorock, Michael Richardson,
and Goeran Selander for their review feedback.</t>

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

