<?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-05" 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="April" 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:</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 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 (HPKE_sender_info).</t>

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

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

<figure><artwork><![CDATA[
   HPKE_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="HPKE_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 HPKE_sender_info structure into the unprotected
header. Although the use of the kid parameter in COSE_Encrypt0 is
discouraged by RFC 9052, this specification allows profiles of this
specification to use 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><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 HPKE_sender_info structure.
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.
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 provided to the SealBase and OpenBase functions is constructed
as follows:</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 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>

</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 contains the Externally Supplied
Data described in Section 4.3 and Section 5.3 in RFC 9052. 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: [       // HPKE_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 plaintext
"This is the content.". In our example, the ciphertext is detached.</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: [       // HPKE_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: [       // HPKE_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: HPKE_sender_info</t>
  <t>Label: TBD2 (Assumed: -4)</t>
  <t>Value type: HPKE_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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

-->

</rfc>

