<?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.21 (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-14" 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 abbrev="H-BRS">University of Applied Sciences Bonn-Rhein-Sieg</organization>
      <address>
        <postal>
          <country>Germany</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>bibital</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="2025" month="July" day="07"/>

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

    <abstract>


<?line 69?>

<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 the pre-shared key authenticated
variant of HPKE.</t>

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



    </abstract>



  </front>

  <middle>


<?line 83?>

<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.</t>

<t>This document defines the use of the HPKE with 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 modes of HPKE in COSE, namely</t>

<t><list style="symbols">
  <t>HPKE Direct Encryption mode, where HPKE is used to encrypt the plaintext. This mode can only be used with a single recipient. <xref target="one-layer"/> provides the details.</t>
  <t>HPKE Key Encryption mode, where HPKE is used to encrypt a content encryption key (CEK) and the CEK is subsequently used to encrypt the plaintext. This mode supports multiple recipients. <xref target="two-layer"/> provides the details.</t>
</list></t>

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

<t>When used with HPKE, the 'ek' header parameter MUST be present in
the unprotected header and MUST contain the encapsulated key,
which is the output of the HPKE KEM. The value of 'ek' MUST be a
bstr.</t>

<t>For all modes, the HPKE info parameter defaults to the empty string; mutually known private information MAY be used instead. The concept of mutually known private information is defined in <xref target="NIST.SP.800-56Ar3"/> as an input to the key derivation function.</t>

<t>HPKE defines several authentication modes, as described in Table 1 of <xref target="RFC9180"/>.
In COSE HPKE, only 'mode_base' and 'mode_psk' are supported. The mode is 'mode_psk' if
the 'psk_id' header parameter is present; otherwise, the mode defaults to 'mode_base'.
'mode_base' is described in Section 5.1.1 of <xref target="RFC9180"/>, which only enables encryption
to the holder of a given KEM private key. 'mode_psk' is described in Section 5.1.2 of <xref target="RFC9180"/>,
which authenticates using a pre-shared key.</t>

<section anchor="one-layer"><name>HPKE Direct Encryption Mode</name>

<t>This mode applies if the COSE_Encrypt0 structure uses a COSE-HPKE algorithm
and has no recipient structure(s).</t>

<t>Because COSE-HPKE supports header protection, if the 'alg' parameter is present, it MUST be included
in the protected header and MUST be a COSE-HPKE algorithm.</t>

<t>Although the use of the 'kid' parameter in COSE_Encrypt0 is
discouraged by RFC 9052, this documents RECOMMENDS the use of the 'kid' parameter
(or other parameters) to explicitly identify the static recipient public key
used by the sender. If the COSE_Encrypt0 structure includes a 'kid' parameter, the
recipient MAY use it to select the corresponding private key.</t>

<t>When encrypting, the inputs to the HPKE Seal operation are set as follows:</t>

<t><list style="symbols">
  <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>pkR: The recipient public key, converted into an HPKE public key.</t>
  <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>info: Defaults to the empty string; mutually known private information MAY be used instead.</t>
  <t>aad: Canonical encoding of the Enc_structure from <xref target="RFC9052"/>).</t>
  <t>pt: The raw message plaintext.</t>
</list></t>

<t>The outputs are used as follows:</t>

<t><list style="symbols">
  <t>enc: MUST be placed raw into the 'ek' (encapsulated key) parameter in the unprotected bucket.</t>
  <t>ct: MUST be used as layer ciphertext. If not using detached content, this is directly placed as
ciphertext in COSE_Encrypt0 structure. Otherwise, it is transported separately and the ciphertext field is nil.
See Section 5 of <xref target="RFC9052"/> for a description of detached payloads.</t>
</list></t>

<t>If 'mode_psk' has been selected, then the 'psk_id' parameter MUST be present.
If 'mode_base' has been chosen, then the 'psk_id' parameter MUST NOT be present.</t>

<t>When decrypting, the inputs to the HPKE Open operation are set as follows:</t>

<t><list style="symbols">
  <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>skR: The recipient private key, converted into an HPKE private key.</t>
  <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>info: Defaults to the empty string; mutually known private information MAY be used instead.</t>
  <t>aad: Canonical encoding of the Enc_structure from <xref target="RFC9052"/>).</t>
  <t>enc: The contents of the layer 'ek' parameter.</t>
  <t>ct: The contents of the layer ciphertext.</t>
</list></t>

<t>The plaintext output is the raw message plaintext.</t>

<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>HPKE Key Encryption Mode</name>

<t>This mode is selected if the COSE_recipient structure uses a COSE-HPKE algorithm.</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, and 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 COSE_recipient structure using a COSE-HPKE algorithm.
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>

<section anchor="recipient-encryption"><name>Recipient Encryption</name>

<t>This section describes the Recipient_structure.
It serves instead of COSE_KDF_Context for COSE-HPKE recipients (and possibly other COSE algorithms defined outside this document).
It MUST be used for COSE-HPKE recipients as it provides the protection for recipient protected headers.
It is patterned after the Enc_structure in <xref target="RFC9052"/>, but is specifically for a COSE_recipient, never a COSE_Encrypt.
The COSE_KDF_Context MUST NOT be used in COSE-HPKE.</t>

<figure><artwork><![CDATA[
Recipient_structure = [ 
    context: "Recipient",
    next_layer_alg: int/tstr,
    recipient_protected_header: empty_or_serialize_map,
    recipient_aad: bstr
]
]]></artwork></figure>

<t><list style="symbols">
  <t>"next_layer_alg" is the algorithm ID of the COSE layer for which the COSE_recipient is encrypting a key.
It is the algorithm that the key MUST be used with.
This value MUST match the alg parameter in the next lower COSE layer.
(This serves the same purpose as the alg ID in the COSE_KDF_Context.
It also mitigates attacks where a person-in-the-middle changes the following layer algorithm from an AEAD algorithm to one that is not foiling the protection of the following layer headers).</t>
  <t>"recipient_protected_header" contains the protected headers from the COSE_recipient CBOR-encoded deterministically with the "Core Deterministic Encoding Requirements", specified in Section 4.2.1 of RFC 8949 <xref target="STD94"/>.</t>
  <t>"recipient_aad" contains any additional context the application wishes to protect.
If none, it is a zero-length string.
This is distinct from the external_aad for the whole COSE encrypt.
It is per-recipient.
Since it is not a header, it may be secret data that is not transmitted.
It provides a means to convey many of the fields in COSE_KDF_Context.</t>
</list></t>

</section>
<section anchor="cose-hpke-recipient-construction"><name>COSE-HPKE Recipient Construction</name>

<t>Because COSE-HPKE supports header protection, if the 'alg' parameter is present, it MUST be in the protected header and MUST be a COSE-HPKE algorithm.</t>

<t>The unprotected header MAY contain the kid parameter to identify the static recipient public key the sender used.
Use of the 'kid' parameter is RECOMMENDED
to explicitly identify the static recipient public key
used by the sender.</t>

<t>When encrypting, the inputs to the HPKE Seal operation are set as follows:</t>

<t><list style="symbols">
  <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>pkR: The recipient public key, converted into HPKE public key.</t>
  <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>info: Defaults to the empty string; mutually known private information MAY be used instead.</t>
  <t>aad: Canonical encoding of the Recipient_structure.</t>
  <t>pt: The raw key for the next layer down.</t>
</list></t>

<t>The outputs are used as follows:</t>

<t><list style="symbols">
  <t>enc: MUST be placed raw into the 'ek' (encapsulated key) parameter in the unprotected bucket.</t>
  <t>ct: MUST be placed raw in the ciphertext field in the COSE_recipient.</t>
</list></t>

<t>When decrypting, the inputs to the HPKE Open operation are set as follows:</t>

<t><list style="symbols">
  <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>skR: The recipient private key, converted into HPKE private key.</t>
  <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>info: Defaults to the empty string; mutually known private information MAY be used instead.</t>
  <t>aad: Canonical encoding of the Recipient_structure.</t>
  <t>enc: The contents of the layer 'ek' parameter.</t>
  <t>ct: The contents of the layer ciphertext field.</t>
</list></t>

<t>The plaintext output is the raw key for the next layer down.</t>

<t>It is not necessary to fill in recipient_aad as HPKE itself covers the attacks that recipient_aad (and COSE_KDF_Context (and SP800-56A)) are used to mitigate.
COSE-HPKE use cases may use it for any purpose they wish, but it should generally be for small identifiers, context or secrets, not to protect bulk external data.
Bulk external data should be protected at layer 0 with external_aad.</t>

<t>The COSE_recipient structure is repeated for each recipient.</t>

<t>When encrypting the content at layer 0 then the instructions in
Section 5.3 of <xref target="RFC9052"/> MUST to be followed, which includes the
calculation of the authenticated data strcture.</t>

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

</section>
</section>
</section>
<section anchor="key-representation"><name>Key Representation</name>

<t>The COSE_Key with the existing key types can be used to represent KEM private
or public keys. When using a COSE_Key for COSE-HPKE, the following checks are made:</t>

<t><list style="symbols">
  <t>If the "kty" field is "AKP", then the public and private keys SHALL be the raw HPKE public and private
keys (respectively) for the KEM used by the algorithm.</t>
  <t>Otherwise, the key MUST be suitable for the KEM used by the algorithm. In case the "kty" parameter
is "EC2" or "OKP", this means the value of "crv" parameter is suitable. For the algorithms defined in
this document, the valid combinations of the KEM, "kty" and "crv" are shown in  <xref target="ciphersuite-kty-crv"/>.</t>
  <t>If the "key_ops" field is present, it MUST include only "derive bits" for the private key
and MUST be empty for the public key.</t>
</list></t>

<t>Examples of the COSE_Key for COSE-HPKE are shown in <xref target="key-representation-example"/>.</t>

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

<t>A ciphersuite is a group of algorithms, often sharing component algorithms
such as hash functions, targeting a security level.
A COSE-HPKE algorithm is composed of the following choices:</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 chosen from the HPKE IANA
registry <xref target="HPKE-IANA"/>.</t>

<t>The HPKE mode is determined by the presence or absence of the
'psk_id' parameter and is therefore not explicitly indicated in the
ciphersuite.</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        |
| Ciphersuite Label                                | KEM | KDF | AEAD |
+--------------------------------------------------+-----+-----+------+
| HPKE-0                                           |0x10 | 0x1 | 0x1  |
| HPKE-1                                           |0x11 | 0x2 | 0x2  |
| HPKE-2                                           |0x12 | 0x3 | 0x2  |
| HPKE-3                                           |0x20 | 0x1 | 0x1  |
| HPKE-4                                           |0x20 | 0x1 | 0x3  |
| HPKE-5                                           |0x21 | 0x3 | 0x2  |
| HPKE-6                                           |0x21 | 0x3 | 0x3  |
+--------------------------------------------------+-----+-----+------+
]]></artwork></figure>

<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>

<t>The ciphersuite list above is a minimal starting point. Additional
ciphersuites can be registered into the already existing registry.
For example, once post-quantum cryptographic algorithms have been standardized
it might be beneficial to register ciphersuites for use with COSE-HPKE.
Additionally, ciphersuites utilizing the compact encoding of the public keys,
as defined in <xref target="I-D.irtf-cfrg-dnhpke"/>, may be standardized for use in
constrained environments.</t>

<t>As a guideline for ciphersuite submissions to the IANA COSE algorithm
registry, the designated experts must only register combinations of 
(KEM, KDF, AEAD) triple that consitute valid combinations for use with
HPKE, the KDF used should (if possible) match one internally used by the
KEM, and components should not be mixed between global and national standards.</t>

<section anchor="cosekeys-for-cose-hpke-ciphersuites"><name>COSE_Keys for COSE-HPKE Ciphersuites</name>

<t>The COSE-HPKE algorithm uniquely determines the KEM for which a COSE_Key is used.
The following mapping table shows the valid combinations
of the KEM used, COSE_Key type and its curve/key subtype.</t>

<figure title="COSE_Key Types and Curves for COSE-HPKE Ciphersuites" anchor="ciphersuite-kty-crv"><artwork><![CDATA[
+---------------------+--------------+
| HPKE KEM id         | COSE_Key     |
|                     | kty | crv    |
+---------------------+-----+--------+
| 0x0010, 0x0013      | EC2 | P-256  |
| 0x0011, 0x0014      | EC2 | P-384  |
| 0x0012, 0x0015      | EC2 | P-521  |
| 0x0020              | OKP | X25519 |
| 0x0021              | OKP | X448   |
+---------------------+-----+--------+
]]></artwork></figure>

</section>
</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, and also provides some examples of key representation for HPKE KEM.</t>

<t>Each example of the COSE message 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>HPKE Direct Encryption Mode</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 HPKE Direct Encryption Mode 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-0</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-0 (Assumed: 35) /
    h'a1011823',
    {
        / kid /
        4: h'3031',
        / ek /
        -4: h'045df24272faf43849530db6be01f42708b3c3a9
              df8e268513f0a996ed09ba7840894a3fb946cb28
              23f609c59463093d8815a7400233b75ca8ecb177
              54d241973e',
    },
    / encrypted plaintext /
    h'35aa3d98739289b83751125abe44e3b977e4b9abbf2c8cfaade
      b15f7681eef76df88f096',
])
]]></artwork></figure>

</section>
<section anchor="two-layer-example"><name>HPKE Key Encryption Mode</name>

<t>In this example we assume that a sender wants to transmit a
payload to two recipients using the HPKE Key Encryption mode.
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>TODO: recompute this for Recipient_structure</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-0</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-4</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-0 (Assumed: 35) /
            h'a1011823',
            {
                / kid /
                4: h'3031',
                / ek /
                -4: h'04d97b79486fe2e7b98fb1bd43
                      c4faee316ff38d28609a1cf568
                      40a809298a91e601f1cc0c2ba4
                      6cb67b41f4651b769cafd9df78
                      e58aa7f5771291bd4f0f420ba6',
            },
            / ciphertext containing encrypted CEK /
            h'24450f54ae93375351467d17aa7a795cfede2
              c03eced1ad21fcb7e7c2fe64397',
        ],
        [
            / alg = HPKE-4 (Assumed: 42) /
            h'a101182a',
            {
                / kid /
                4: h'3032',
                / ek /
                -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-0</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-4</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'5cdcf6055fcbdb53b4001d8fb88b2a46b200ed28e1e
      d77e16ddf43fb3cac3a98',
    [
        [
            / alg = HPKE-0 (Assumed: 35) /
            h'a1011823',
            {
                / kid = '01' /
                4: h'3031',
                / ek /
                -4: h'043ac21632e45e1fbd733f002a
                      621aa4f3d94737adc395d5a7cb
                      6e9554bd1ad273aec991493786
                      d72616d9759bf8526e6e20c1ed
                      c41ba5739f2b2e441781aa0eb4',
            },
            / ciphertext containing encrypted MAC key /
            h'5cee2b4235a7ff695164f7a8d1e79ccf3ca3d
              e8b22f3592626020a95b2a8d3fb4d7aa7fe37
              432426ee70073a368f29d1',
        ],
        [
            / alg = HPKE-4 (Assumed: 42) /
            h'a101182a',
            {
                / kid = '02' /
                4: h'3032',
                / ek /
                -4: h'02cffacc60def3bb3d0a1c3661
                      227c9de8dc2b1d3939dd2c07d4
                      49ebb0bba324',
            },
            / ciphertext containing encrypted MAC key /
            h'3f5b8b60271d5234dbea554dc1461d0239e9f
              4589f6415e8563b061dbcb37795a616111b78
              2b4c589b534309327ffadc',
        ],
    ],
])
]]></artwork></figure>

</section>
</section>
<section anchor="key-representation-example"><name>Key Representation</name>

<t>Examples of private and public KEM key representation are shown below.</t>

<section anchor="kem-public-key-for-hpke-0"><name>KEM Public Key for HPKE-0</name>

<figure title="Key Representation Example for HPKE-0" anchor="hpke-example-key-1"><artwork><![CDATA[
{
    / kty = 'EC2' /
    1: 2,
    / kid = '01' /
    2: h'3031',
    / alg = HPKE-0 (Assumed: 35) /
    3: 35,
    / crv = 'P-256' /
    -1: 1,
    / x /
    -2: h'65eda5a12577c2bae829437fe338701a10aaa375
          e1bb5b5de108de439c08551d',
    / y /
    -3: h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af
          7e0ca7ca7e9eecd0084d19c'
}
]]></artwork></figure>

</section>
<section anchor="kem-private-key-for-hpke-0"><name>KEM Private Key for HPKE-0</name>

<figure title="Key Representation Example for HPKE-0" anchor="hpke-example-key-2"><artwork><![CDATA[
{
    / kty = 'EC2' /
    1: 2,
    / kid = '01' /
    2: h'3031',
    / alg = HPKE-0 (Assumed: 35) /
    3: 35,
    / key_ops = ['derive_bits'] /
    4: [8],
    / crv = 'P-256' /
    -1: 1,
    / x /
    -2: h'bac5b11cad8f99f9c72b05cf4b9e26d244dc189f7
          45228255a219a86d6a09eff',
    / y /
    -3: h'20138bf82dc1b6d562be0fa54ab7804a3a64b6d72
          ccfed6b6fb6ed28bbfc117e',
    / d /
    -4: h'57c92077664146e876760c9520d054aa93c3afb04
          e306705db6090308507b4d3',
}
]]></artwork></figure>

</section>
<section anchor="kem-public-key-for-hpke-4"><name>KEM Public Key for HPKE-4</name>

<figure title="Key Representation Example for HPKE-4" anchor="hpke-example-key-3"><artwork><![CDATA[
{
    / kty = 'OKP' /
    1: 1,
    / kid = '11' /
    2: h'3131',
    / alg = HPKE-4 (Assumed: 42) /
    3: 42,
    / crv = 'X25519' /
    -1: 4,
    / x /
    -2: h'cb7c09ab7b973c77a808ee05b9bbd373b55c06eaa
          9bd4ad2bd4e9931b1c34c22',
}
]]></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-0</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-1</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-2</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-3</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-4</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-5</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-6</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>
</list></t>

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

<t><list style="symbols">
  <t>Name: ek</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>
  <t>Name: psk_id</t>
  <t>Label: TBDX (Assumed: -5)</t>
  <t>Value type: bstr</t>
  <t>Value Registry: N/A</t>
  <t>Description: A key identifier (kid) for the pre-shared key
as defined in Section 5.1.2 of <xref target="RFC9180"/></t>
  <t>Reference: [[This specification]]</t>
</list></t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <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>

<referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
  <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
    <front>
      <title>Concise Binary Object Representation (CBOR)</title>
      <author fullname="C. Bormann" initials="C." surname="Bormann"/>
      <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
      <date month="December" year="2020"/>
      <abstract>
        <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
        <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
      </abstract>
    </front>
    <seriesInfo name="STD" value="94"/>
    <seriesInfo name="RFC" value="8949"/>
    <seriesInfo name="DOI" value="10.17487/RFC8949"/>
  </reference>
</referencegroup>




    </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="3" month="March" year="2025"/>
      <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-06"/>
   
</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>
<reference anchor="NIST.SP.800-56Ar3" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf">
  <front>
    <title>Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography, NIST Special Publication 800-56A Revision 3</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2018" month="April"/>
  </front>
</reference>


    </references>

</references>


<?line 785?>

<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
Michael B. Jones,
John Mattsson,
Mike Prorock,
Michael Richardson,
and
Goeran Selander
for their review feedback.</t>

</section>


  </back>

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

-->

</rfc>

