<?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.6.24 (Ruby 2.5.1) -->


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

]>


<rfc ipr="pre5378Trust200902" docName="draft-ietf-cose-hpke-04" 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>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="B." surname="Moran" fullname="Brendan Moran">
      <organization>Arm Limited</organization>
      <address>
        <email>Brendan.Moran@arm.com</email>
      </address>
    </author>

    <date year="2023" month="March" day="13"/>

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

    <abstract>


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

<t>This document defines the use of the HPKE base mode with COSE. Other modes are
supported by HPKE but not by this specification.</t>



    </abstract>



  </front>

  <middle>


<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 defines several features for use with public key encryption
and a subset of those features is applied to COSE (<xref target="RFC9052"/>, <xref target="RFC9053"/>). Since COSE provides
constructs for authentication, those are not re-used from the HPKE specification.
This specification uses the "base" mode, as it is called in HPKE specification
language.</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:
- Content-encryption key (CEK), a term defined in CMS <xref target="RFC2630"/>.
- Hybrid Public Key Encryption (HPKE) is defined in <xref target="RFC9180"/>.
- pkR is the public key of the recipient, as defined in <xref target="RFC9180"/>.
- skR is the private key of the recipient, as defined in <xref target="RFC9180"/>.
- Key Encapsulation Mechanism (KEM), see <xref target="RFC9180"/>.
- Key Derivation Function (KDF), see <xref target="RFC9180"/>.
- Authenticated Encryption with Associated Data (AEAD), see <xref target="RFC9180"/>.
- Additional Authenticated Data (AAD), see <xref target="RFC9180"/>.</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 cases uses 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>HPKE in Base mode requires little information to be provided by
the sender, namely</t>

<t><list style="symbols">
  <t>algorithm information (KEM, KDF, and AEAD identifiers),</t>
  <t>an encapsulated key generated by the sender, and</t>
  <t>an identifier of the static recipient key.</t>
</list></t>

<t>In the subsections below we explain how this information is carried
inside the COSE_Encrypt0 and the COSE_Encrypt for the one layer and the
two layer structure, respectively.</t>

<t>In both cases a new structure is used to convey information about the HPKE
sender, namely the HPKE sender information structure (sender_info).</t>

<t>When the alg value is set to 'HPKE-v1-BASE', the sender_info structure MUST
be present in the unprotected header parameter.</t>

<t>The CDDL grammar describing the sender_info structure is:</t>

<figure><artwork><![CDATA[
   sender_info = [
       kem_id : uint,         ; kem identifier
       kdf_id : uint,         ; kdf identifier
       aead_id : uint,        ; aead identifier
       enc : bstr,            ; encapsulated key
   ]
]]></artwork></figure>

<t>The fields have the following meaning:</t>

<figure title="sender_info structure" anchor="_table-hpke-sender"><artwork><![CDATA[
   +---------+----------------+------------+-------------------+
   | Name    | CBOR Type      | Value      | Description       |
   |         |                | Registry   |                   |
   +---------+----------------+------------+-------------------+
   | kem_id  | uint           | HPKE       | Identifier for    |
   |         |                | KEM IDs    | the KEM           |
   |         |                | Registry   |                   |
   |         |                |            |                   |
   | kdf_id  | uint           | HPKE KDF   | Identifier for    |
   |         |                | IDs        | the KDF ID        |
   |         |                |            |                   |
   | aead_id | uint           | HPKE AEAD  | Identifier for    |
   |         |                | IDs        | the AEAD ID       |
   |         |                |            |                   |
   | enc     | bstr           |            | Encapsulated key  |
   |         |                |            | defined by HPKE   |
   +---------+----------------+------------+-------------------+
]]></artwork></figure>

<t>kem_id: This parameter is used to identify the KEM. The registry
          for KEM ids has been established with RFC 9180.</t>

<t>kdf_id: This parameter contains the KDF identifier.
          The registry containing the KDF ids has been established
          with RFC 9180.</t>

<t>aead_id: This parameter contains the AEAD identifier. The registry
           containing the AEAD ids has been established with RFC 9180.</t>

<t>enc: This parameter contains the encapsulated key, which is output
       of the HPKE KEM.</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. The resulting ciphertext
may be included in the COSE_Encrypt0 or may be 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 kid parameter and the sender_info structure
into the unprotected header. The kid identifies the static recipient
public key used by the sender. The recipient uses the kid to determine
the appropriate private key.</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 sender_info structure
as well as 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.
For example, the content encrypted at layer 0 may be a firmware image.  The
same encrypted firmware image may need to be sent to many recipients;
however, each recipient uses their own private key to obtain the CEK.</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>
<section anchor="hpke-encryption-and-decryption"><name>HPKE Encryption and Decryption</name>

<section anchor="hpke-encryption-with-sealbase"><name>HPKE Encryption with SealBase</name>

<t>The SealBase(pkR, info, aad, pt) function is used to encrypt a plaintext pt to
a recipient's public key (pkR).</t>

<t>Two cases of plaintext need to be distinguished:</t>

<t><list style="symbols">
  <t>For use in COSE_Encrypt, the plaintext "pt" passed into<br />
SealBase is the CEK. The CEK is a random byte sequence of length 
appropriate for the encryption algorithm selected in layer 0. For 
example, AES-128-GCM requires a 16 byte key and the CEK would 
therefore be 16 bytes long.</t>
  <t>In case of COSE_Encrypt0, the plaintext "pt" passed into 
SealBase is the content to be encrypted. Hence, there is no 
intermediate layer utilizing a CEK.</t>
</list></t>

<t>The "aad" and the "info" parameters are described in <xref target="aad"/> and <xref target="info"/>, 
respectively.</t>

<t>If SealBase() is successful, it will output a ciphertext "ct" and an encapsulated
key "enc".</t>

</section>
<section anchor="hpke-decryption-with-openbase"><name>HPKE Decryption with OpenBase</name>

<t>The recipient will use the OpenBase(enc, skR, info, aad, ct) function with the "enc" and
the "ct" parameters received from the sender. The "aad" and the "info" parameters are
assumed to be constructed from the context and described
in <xref target="aad"/> and <xref target="info"/>, respectively.</t>

<t>The OpenBase function will, if successful, decrypt "ct". When decrypted, the result
will be either the CEK (when COSE_Encrypt is used), or the content (if 
COSE_Encrypt0 is used). The CEK is the symmetric key used to decrypt the ciphertext at 
layer 0.</t>

</section>
<section anchor="aad"><name>AAD Parameter</name>

<t>HPKE requires an "aad" parameter to be provided to the SealBase and OpenBase functions.
Note that there are three types of additional authenticated data used by this specification:</t>

<t><list style="symbols">
  <t>AAD provided to HPKE for COSE_Encrypt0.</t>
  <t>AAD provided to HPKE for COSE_Encrypt at the recipient layer.</t>
  <t>AAD provided to the AEAD cipher used for content encryption at layer 0 by COSE_Encrypt.</t>
</list></t>

<t>We describe the three variants in the subsections below.</t>

<section anchor="aad-provided-to-hpke-for-coseencrypt0"><name>AAD provided to HPKE for COSE_Encrypt0</name>

<t>When COSE_Encrypt0 is used then there is no separate AEAD function at the content 
encryption layer provided by COSE natively and HPKE offers this functionality.</t>

<t>The "aad" parameter of provided to the SealBase and OpenBase functions is constructed
as follows (again intentionally aligned with COSE by re-using the Enc_structure):</t>

<figure><artwork><![CDATA[
Enc_structure = [
    context : "Encrypt0",
    protected : empty_or_serialized_map,
    external_aad : bstr
]
]]></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 is populated with the API caller
provided AAD information. If this field is not supplied, it defaults to a 
zero-length byte string.</t>

</section>
<section anchor="aad-provided-to-hpke-for-coseencrypt-at-the-recipient-layer"><name>AAD provided to HPKE for COSE_Encrypt at the Recipient Layer</name>

<t>The AAD used at the recipient layer re-uses Enc_structure 
from <xref target="RFC9052"/> and populates it with the following content:</t>

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

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

<t>The external_aad field in the Enc_structure is populated with the API caller
provided AAD information. In the COSE_Encrypt case this AAD information is also
input to the AAD at layer 0, if an AEAD cipher is used at layer 0. If this field 
is not supplied, it defaults to a zero-length byte string.</t>

</section>
<section anchor="aad-provided-to-the-aead-cipher-used-for-content-encryption-at-layer-0-by-coseencrypt"><name>AAD provided to the AEAD cipher used for Content Encryption at Layer 0 by COSE_Encrypt</name>

<t>The construction of AAD is defined in Section 5.3 of <xref target="RFC9052"/> (see Enc_structure
structure).</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, when used with
SealBase() and OpenBase(). 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="examples"><name>Examples</name>

<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>It uses the following algorithm combination: 
- KEM: DHKEM(P-256, HKDF-SHA256)
- KDF: HKDF-SHA256
- AEAD: AES-128-GCM</t>

<figure title="COSE_Encrypt0 Example for HPKE" anchor="hpke-example-one"><artwork><![CDATA[
// payload: "This is the content", aad: ""
// 
16([
    h'a10120',  // alg = HPKE-v1-BASE
    {
        4: h'3031', // kid
        -4: [       // sender_info
            16,     // kem = DHKEM(P-256, HKDF-SHA256)
            1,      // kdf = HKDF-SHA256
            1,      // aead = AES-128-GCM
            h'048c6f75e463a773082f3cb0d3a701348a578c67
              80aba658646682a9af7291dfc277ec93c3d58707
              818286c1097825457338dc3dcaff367e2951342e
              9db30dc0e7',  // enc
        ],
    },
    / encrypted plaintext /
    h'ee22206308e478c279b94bb071f3a5fbbac412a6effe34195f7
      c4169d7d8e81666d8be13',
])
]]></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>

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

<t>It uses the following algorithm combination:</t>

<t><list style="symbols">
  <t>At layer 0 AES-128-GCM is used for encryption of the detached plaintext
"This is the content.".</t>
  <t>At the recipient structure at layer 1, DHKEM(P-256, HKDF-SHA256)
(as the KEM), with AES-128-GCM (as the AEAD) and HKDF-SHA256
(as the KDF) is used.</t>
</list></t>

<t>The algorithm selection is based on the registry of the values offered
by the alg parameters (see <xref target="IANA"/>).</t>

<figure title="COSE_Encrypt Example for HPKE" anchor="hpke-example-two"><artwork><![CDATA[
// plaintext: "This is the content.", aad: ""
96_0([
    h'a10101',  // alg = AES-128-GCM (1)
    {5: h'67303696a1cc2b6a64867096'},  // iv
    h'',        // detached ciphertext
    [
        [
            h'a10120',  // alg = HPKE-v1-BASE (-1 #TBD)
            {
                4: h'3031', // kid
                -4: [       // sender_info
                    16,     // kem = DHKEM(P-256, HKDF-SHA256)
                    1,      // kdf = HKDF-SHA256
                    1,      // aead = AES-128-GCM
                    / enc output /
                    h'0421ccd1b00dd958d77e10399c
                         97530fcbb91a1dc71cb3bf41d9
                         9fd39f22918505c973816ecbca
                         6de507c4073d05cceff73e0d35
                         f60e2373e09a9433be9e95e53c',
                ],
            },
            // ciphertext containing encrypted CEK
            h'bb2f1433546c55fb38d6f23f5cd95e1d72eb4
              c129b99a165cd5a28bd75859c10939b7e4d',
        ],

        [
            h'a10120',  // alg = HPKE-v1-BASE (-1 #TBD)
            {
                4: h'313233', // kid
                -4: [       // sender_info
                    16,     // kem = DHKEM(P-256, HKDF-SHA256)
                    1,      // kdf = HKDF-SHA256
                    1,      // aead = AES-128-GCM
                    / enc output /
                       h'6de507c4073d05cceff73e0d35
                         f60e2373e09a9433be9e95e53c
                         9fd39f22918505c973816ecbca
                         6de507c4073d05cceff73e0d35
                         f60e2373e09a9433be9e95e53c',
                ],
            },
            // ciphertext containing encrypted CEK
            h'c4169d7d8e81666d8be13bb2f1433546c55fb
              c129b99a165cd5a28bd75859c10939b7e4d',
        ]        
    ],
])
]]></artwork></figure>

<t>To offer authentication of the sender the payload in <xref target="hpke-example-two"/>
is signed with a COSE_Sign1 wrapper, which is shown in <xref target="hpke-example-sign"/>.
The payload in <xref target="hpke-example-sign"/> corresponds to the content shown in
<xref target="hpke-example-two"/>.</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>
<section anchor="sec-cons"><name>Security Considerations</name>

<t>This specification is based on HPKE and the security considerations of HPKE
<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.</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 the it MUST be
ensured that the guidelines for random number generations are followed.</t>

<t>The COSE_Encrypt structure MUST be authenticated using COSE constructs like 
COSE_Sign, COSE_Sign1, COSE_MAC, or COSE_MAC0.</t>

<t>When 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 Algorithm Parameters' registries in the 'Standards Action 
With Expert Review category.</t>

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

<t><list style="symbols">
  <t>Name: HPKE-v1-BASE</t>
  <t>Value: TBD1 (Assumed: -1)</t>
  <t>Description: HPKE in version 1 in base mode for use with COSE</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-algorithm-parameters"><name>COSE Header Algorithm Parameters</name>

<t><list style="symbols">
  <t>Name: sender_info</t>
  <t>Label: TBD2 (Assumed: -4)</t>
  <t>Value type: sender_info</t>
  <t>Value Registry: N/A</t>
  <t>Description: HPKE Sender Information structure for the Base mode.</t>
</list></t>

</section>
</section>


  </middle>

  <back>


    <references title='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'><organization/></author>
<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'><organization/></author>
<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'><organization/></author>
<author fullname='K. Bhargavan' initials='K.' surname='Bhargavan'><organization/></author>
<author fullname='B. Lipp' initials='B.' surname='Lipp'><organization/></author>
<author fullname='C. Wood' initials='C.' surname='Wood'><organization/></author>
<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'><organization/></author>
<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'><organization/></author>
<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'>





<reference anchor='RFC8937'>
<front>
<title>Randomness Improvements for Security Protocols</title>
<author fullname='C. Cremers' initials='C.' surname='Cremers'><organization/></author>
<author fullname='L. Garratt' initials='L.' surname='Garratt'><organization/></author>
<author fullname='S. Smyshlyaev' initials='S.' surname='Smyshlyaev'><organization/></author>
<author fullname='N. Sullivan' initials='N.' surname='Sullivan'><organization/></author>
<author fullname='C. Wood' initials='C.' surname='Wood'><organization/></author>
<date month='October' year='2020'/>
<abstract><t>Randomness is a crucial ingredient for Transport Layer Security (TLS) and related security protocols.  Weak or predictable &quot;cryptographically secure&quot; 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'><organization/></author>
<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>




    </references>


<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>Daisuke Ajitomi</t>
  <t>Richard Barnes</t>
  <t>Ilari Liusvaara</t>
</list></t>

<t>Finally, we would like to thank Russ Housley for his contributions to
the draft as a co-author of initial versions.</t>

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

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

</section>


  </back>

<!-- ##markdown-source:
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
XEn+ElQcskmX/TesBQ8zi1MAAA==

-->

</rfc>

