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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc rfcedstyle="yes"?>
<?rfc toc="yes"?>
<?rfc tocindent="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>
<?rfc toc_levels="4"?>

<rfc ipr="pre5378Trust200902" docName="draft-tschofenig-suit-firmware-encryption" category="std">

  <front>
    <title abbrev="Firmware Encryption">Firmware Encryption with SUIT Manifests</title>

    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization>Arm Limited</organization>
      <address>
        <email>hannes.tschofenig@arm.com</email>
      </address>
    </author>
    <author initials="R." surname="Housley" fullname="Russ Housley">
      <organization abbrev="Vigil Security">Vigil Security, LLC</organization>
      <address>
        <email>housley@vigilsec.com</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="2021" month="May" day="25"/>

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

    <abstract>


<t>This document specifies a firmware update mechanism where the
firmware image is encrypted.  This mechanism uses the IETF 
SUIT manifest with key establishment provided by the hybrid
public-key encryption (HPKE) scheme or AES Key Wrap (AES-KW) with
a pre-shared key-encryption key.  In either case, AES-GCM or 
AES-CCM is used for firmware encryption.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>Vulnerabilities with Internet of Things (IoT) devices have raised the
need for a reliable and secure firmware update mechanism that is also
suitable for constrained devices. To protect firmware images the SUIT manifest
format was developed <xref target="I-D.ietf-suit-manifest"/>. The SUIT manifest provides a 
bundle of metadata about the firmware for an IoT device, where to find 
the firmware image, and the devices to which it applies.</t>

<t>The SUIT information model <xref target="I-D.ietf-suit-information-model"/> details the
information that has to be offered by the SUIT manifest format. In addition to
offering protection against modification, which is provided by a digital
signature or a message authentication code, the firmware image may also be
confidentiality protected using encryption.</t>

<t>Encryption prevents third parties, including attackers, from gaining access to
the firmware image.  This might be done to protect confidential information
or prevent discovery of vulnerabilities through reverse engineering. The SUIT
manifest provides the data needed for authorized recipients of the firmware
image to decrypt it.</t>

<t>A symmetric cryptographic key is established for encryption and decryption, and 
that key can be applied to a SUIT manifest, firmware images, or personalization
data, depending on the encryption choices of the firmware author. This symmetric key
can be established using a variety of mechanisms; this document defines two 
approaches for use with the IETF SUIT manifest.  Key establishment can be
provided by the hybrid public-key encryption (HPKE) scheme or AES Key Wrap
(AES-KW) with a pre-shared key-encryption key.  These choices reduce the
number of possible key establishment options for interoperability of
different SUIT manifest implementations. The document also offers a
number of examples for developers.</t>

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

<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 document assumes familiarity with the IETF SUIT manifest <xref target="I-D.ietf-suit-manifest"/>
and the SUIT architecture <xref target="RFC9019"/>.</t>

<t>The terms “recipient” and “firmware consumer” are used interchangeably.</t>

</section>
<section anchor="aes-key-wrap" title="AES Key Wrap">

<t>The AES Key Wrap (AES-KW) algorithm is described in RFC 3394 <xref target="RFC3394"/>, and
it can be used to encrypt a randomly generated content-encryption key (CEK)
with a pre-shared key-encryption key (KEK). The COSE conventions for using
AES-KW are specified in Section 12.2.1 of <xref target="RFC8152"/>.  The encrypted CEK is
carried in the COSE_recipient structure alongside the information needed for 
AES-KW. The COSE_recipient structure, which is a substructure of the COSE_Encrypt, 
contains the CEK encrypted by the KEK. When the firmware image is encrypted 
for use by multiple recipients, the COSE_recipient structure will contain 
one encrypted CEK if all of the authorized recipients have access to the KEK.</t>

<t>However, the COSE_recipient structure can contain the same CEK encrypted
with many different KEKs if needed to reach all of the authorized recipients.</t>

<t>Note that the AES-KW algorithm, as defined in Section 2.2.3.1 of <xref target="RFC3394"/>, 
does not have public parameters that vary on a per-invocation basis. Hence, 
the protected structure in the COSE_recipient is a byte string of zero length.</t>

<t>The COSE_Encrypt conveys information for encrypting the firmware image, 
which includes information like the algorithm and the IV, even though the 
firmware image is not embedded in the COSE_Encrypt.ciphertext itself since 
it conveyed as detached content.</t>

<t>The CDDL for the COSE_Encrypt_Tagged structure is shown in <xref target="cddl-aeskw"/>.</t>

<figure title="CDDL for AES Key Wrap-based Firmware Encryption" anchor="cddl-aeskw"><artwork><![CDATA[
COSE_Encrypt_Tagged = #6.96(COSE_Encrypt)
 
SUIT_Encryption_Info = COSE_Encrypt_Tagged

COSE_Encrypt = [
  protected   : bstr .cbor outer_header_map_protected,
  unprotected : outer_header_map_unprotected,
  ciphertext  : null,                  ; because of detached ciphertext
  recipients  : [ + COSE_recipient ]
]

outer_header_map_protected =
{
    1 => int,         ; algorithm identifier
  * label =values     ; extension point
}

outer_header_map_unprotected = 
{
    5 => bstr,        ; IV
  * label =values     ; extension point
}

COSE_recipient = [
  protected   : bstr .size 0,
  unprotected : recipient_header_map,
  ciphertext  : bstr        ; CEK encrypted with KEK
]

recipient_header_map = 
{
    1 => int,         ; algorithm identifier
    4 => bstr,        ; key identifier
  * label =values     ; extension point
}
]]></artwork></figure>

<t>The COSE specification requires a consistent byte stream for the
authenticated data structure to be created, which is defined as 
shown in <xref target="cddl-enc-aeskw"/>.</t>

<figure title="CDDL for Enc_structure Data Structure" anchor="cddl-enc-aeskw"><artwork><![CDATA[
       Enc_structure = [
         context : "Encrypt",
         protected : empty_or_serialized_map,
         external_aad : bstr
       ]
]]></artwork></figure>

<t>As it can be seen in the CDDL in <xref target="cddl-aeskw"/>, there are two protected fields 
and the ‘protected’ field in the Enc_structure, see <xref target="cddl-enc-aeskw"/>, 
refers to the outer protected field, not the protected field of the 
COSE_recipient structure.</t>

<t>The value of the external_aad is set to null.</t>

<t>The following example illustrates the use of the AES-KW algorithm with AES-128.</t>

<t>We use the following parameters in this example:</t>

<t><list style="symbols">
  <t>IV: 0x26, 0x68, 0x23, 0x06, 0xd4, 0xfb, 0x28, 0xca, 0x01, 0xb4, 0x3b, 0x80</t>
  <t>KEK: “aaaaaaaaaaaaaaaa”</t>
  <t>KID: “kid-1”</t>
  <t>Plaintext Firmware: “This is a real firmware image.”</t>
  <t>Firmware (hex): 546869732069732061207265616C206669726D7761726520696D6167652E</t>
</list></t>

<t>The COSE_Encrypt structure in hex format is (with a line break inserted):</t>

<figure><artwork><![CDATA[
D8608443A10101A1054C26682306D4FB28CA01B43B80F68340A2012204456B69642D
315818AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D
]]></artwork></figure>

<t>The resulting COSE_Encrypt structure in a dignostic format is shown in <xref target="aeskw-example"/>.</t>

<figure title="COSE_Encrypt Example for AES Key Wrap" anchor="aeskw-example"><artwork><![CDATA[
96(
    [
        // protected field with alg=AES-GCM-128
        h'A10101', 
        {
           // unprotected field with iv
           5: h'26682306D4FB28CA01B43B80'
        }, 
        // null because of detached ciphertext
        null, 
        [ // recipients array
           h'', // protected field
           {    // unprotected field
              1: -3,            // alg=A128KW 
              4: h'6B69642D31'  // key id
           }, 
           // CEK encrypted with KEK
           h'AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D'
        ]
    ]
)
]]></artwork></figure>

<t>The CEK was “4C805F1587D624ED5E0DBB7A7F7FA7EB” and the encrypted firmware was:</t>

<figure><artwork><![CDATA[
A8B6E61EF17FBAD1F1BF3235B3C64C06098EA512223260
F9425105F67F0FB6C92248AE289A025258F06C2AD70415
]]></artwork></figure>

</section>
<section anchor="hybrid-public-key-encryption-hpke" title="Hybrid Public-Key Encryption (HPKE)">

<t>Hybrid public-key encryption (HPKE) <xref target="I-D.irtf-cfrg-hpke"/> is a scheme that provides 
public key encryption of arbitrary-sized plaintexts given a recipient’s public key.</t>

<t>For use with firmware encryption the scheme works as follows: The firmware author uses 
HPKE, which internally utilizes a non-interactive ephemeral-static Diffie-Hellman exchange to 
derive a shared secret, which is then used to encrypt plaintext. In the firmware 
encryption scenario, the plaintext passed to HPKE for encryption is a randomly 
generated CEK. The output of the HPKE operation is therefore the encrypted CEK along 
with HPKE encapsulated key (i.e. the ephemeral ECDH public key of the author). 
The CEK is then used to encrypt the firmware.</t>

<t>Only the holder of recipient’s private key can decapsulate the CEK to decrypt the 
firmware. Key generation is influced by additional parameters, such as 
identity information.</t>

<t>This approach allows us to have all recipients to use the same CEK to encrypt the 
firmware image, in case there are multiple recipients, to fulfill a requirement for 
the efficient distribution of firmware images using a multicast or broadcast protocol.</t>

<t>The CDDL for the COSE_Encrypt structure as used with HPKE is shown in <xref target="cddl-hpke"/>.</t>

<figure title="CDDL for HPKE-based COSE_Encrypt Structure" anchor="cddl-hpke"><artwork><![CDATA[
COSE_Encrypt_Tagged = #6.96(COSE_Encrypt)
 
SUIT_Encryption_Info = COSE_Encrypt_Tagged

COSE_Encrypt = [
  protected   : bstr .cbor header_map, ; must contain alg
  unprotected : header_map,            ; must contain iv
  ciphertext  : null,                  ; because of detached ciphertext
  recipients  : [ + COSE_recipient_outer ]
]

COSE_recipient_outer = [
  protected   : bstr .size 0,
  unprotected : header_map, ; must contain alg
  ciphertext  : bstr        ; CEK encrypted based on HPKE algo
  recipients  : [ + COSE_recipient_inner ]  
]

COSE_recipient_inner = [
  protected   : bstr .cbor header_map, ; must contain alg
  unprotected : header_map, ; must contain kid, 
  ciphertext  : bstr        ; CEK encrypted based on HPKE algo
  recipients  : null
]

header_map = {
  Generic_Headers,
  * label =values,
}

Generic_Headers = (
    ? 1 => int,         ; algorithm identifier
    ? 2 => crv,         ; EC identifier
    ? 4 => bstr,        ; key identifier
    ? 5 => bstr         ; IV
)
]]></artwork></figure>

<t>The COSE_Encrypt structure in <xref target="cddl-hpke"/> requires the 
encrypted CEK and the ephemeral public key of the firmare author to be
generated. This is accomplished with the HPKE encryption function as shown here:</t>

<figure><artwork><![CDATA[
    CEK = random()
    pkR = DeserializePublicKey(recipient_public_key)
    info = "cose hpke" || 0x00 || COSE_KDF_Context
    enc, context = SetupBaseS(pkR, info)
    ciphertext = context.Seal(null, CEK)
]]></artwork></figure>

<t>Legend:</t>

<t><list style="symbols">
  <t>The functions DeserializePublicKey(), SetupBaseS() and Seal() are defined in 
HPKE <xref target="I-D.irtf-cfrg-hpke"/>.</t>
  <t>CEK is a random byte sequence of keysize length whereby keysize corresponds to the size 
of the indicated symmetric encryption algorithm used for firmware encryption. For example, 
AES-128-GCM requires a 16 byte key. The CEK would therefore be 16 bytes long.</t>
  <t>‘recipient_public_key’ represents the public key of the recipient.</t>
  <t>‘info’ is a data structure described below used as input to the key derivation internal to the HPKE 
algorithm. In addition to the constant prefix, the COSE_KDF_Context structure is used. The COSE_KDF_Context is shown in <xref target="cddl-cose-kdf"/>.</t>
</list></t>

<t>The result of the above-described operation is the encrypted CEK (denoted as ciphertext) and 
the enc - the HPKE encapsulated key (i.e. the ephemeral ECDH public key of the author).</t>

<figure title="COSE_KDF_Context Data Structure" anchor="cddl-cose-kdf"><artwork><![CDATA[
PartyInfo = (
   identity : bstr,
   nonce : nil,
   other : nil
)

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

<t>Notes:</t>

<t><list style="symbols">
  <t>PartyUInfo.identity corresponds to the kid found in the COSE_Sign_Tagged or 
COSE_Sign1_Tagged structure (when a digital signature is used. When utilizing a MAC, 
then the kid is found in the COSE_Mac_Tagged or COSE_Mac0_Tagged structure.</t>
  <t>PartyVInfo.identity corresponds to the kid used for the respective recipient from the 
inner-most recipients array.</t>
  <t>The value in the AlgorithmID field corresponds to the alg parameter in the protected 
structure in the inner-most recipients array.</t>
  <t>keyDataLength is set to the number of bits of the desired output value.</t>
  <t>protected refers to the protected structure of the inner-most array.</t>
</list></t>

<t>The author encrypts the firmware using the CEK with the selected algorithm.</t>

<t>The recipient decrypts the received ciphertext, i.e. the encrypted CEK, using two 
input parameters:</t>

<t><list style="symbols">
  <t>the private key skR corresponding to the public key pkR used by the author when creating 
the manifest.</t>
  <t>the HPKE encapsulated key (i.e. ephemeral ECDH public key) created by the author.</t>
</list></t>

<t>If the HPKE operation is successful, the recipient obtains the CEK and can decrypt the 
firmware.</t>

<t>The following text shows the HPKE operations performed by the recipient:</t>

<figure><artwork><![CDATA[
    info = "cose hpke" || 0x00 || COSE_KDF_Context
    context = SetupBaseR(ciphertext, skR, info)
    CEK = context.Open(null, ciphertext)
]]></artwork></figure>

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

<figure title="COSE_Encrypt Example for HPKE" anchor="hpke-example"><artwork><![CDATA[
96( 
    [
        // protected field with alg=AES-GCM-128
        h'A10101',   
        {    // unprotected field with iv
             5: h'26682306D4FB28CA01B43B80'
        }, 
        // null because of detached ciphertext
        null,  
        [  // COSE_recipient_outer
            h'',          // empty protected field
            {             // unprotected field with ... 
                 1: 1     //     alg=A128GCM
            },
            // Encrypted CEK
            h'FA55A50CF110908DA6443149F2C2062011A7D8333A72721A',
            [    // COSE_recipient_inner
                 // protected field with alg HPKE/P-256+HKDF-256 (new)
                 h'A1013818',
                 {  // unprotected field with ...
                    //    HPKE encapsulated key
                    -1: h'A4010220012158205F...979D51687187510C445’,
                    //    kid for recipient static ECDH public key
                     4: h'6B69642D31'
                 }, 
                 // empty ciphertext
                 null
            ]
        ]
     ]
)
]]></artwork></figure>

</section>
<section anchor="complete-examples" title="Complete Examples">

<t>TBD: Add example for complete manifest here (which also includes the digital signature).
TBD: Add multiple recipient example as well. 
TBD: Add encryption of manifest (in addition of firmware encryption).</t>

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

<t>This entire document is about security.</t>

<t>The algorithms described in this document assume that the firmware author</t>

<t><list style="symbols">
  <t>has either shared a key-encryption key (KEK) with the firmware consumer (for use with the AES-Key Wrap scheme), or</t>
  <t>is in possession of the public key of the firmware consumer (for use with HPKE).</t>
</list></t>

<t>Both cases require some upfront communication interaction, which is not part of the SUIT manifest.</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This document requests IANA to create new entries in the COSE Algorithms
registry established with <xref target="I-D.ietf-cose-rfc8152bis-algs"/>.</t>

<figure><artwork><![CDATA[
+-------------+-------+---------+------------+--------+---------------+  
| Name        | Value | KDF     | Ephemeral- | Key    | Description   |
|             |       |         | Static     | Wrap   |               |
+-------------+-------+---------+------------+--------+---------------+
| HPKE/P-256+ | TBD1  | HKDF -  | yes        | none   | HPKE with     |
| HKDF-256    |       | SHA-256 |            |        | ECDH-ES       |
|             |       |         |            |        | (P-256) +     |
|             |       |         |            |        | HKDF-256      |
+-------------+-------+---------+------------+--------+---------------+
| HPKE/P-384+ | TBD2  | HKDF -  | yes        | none   | HPKE with     |
| HKDF-SHA384 |       | SHA-384 |            |        | ECDH-ES       |
|             |       |         |            |        | (P-384) +     |
|             |       |         |            |        | HKDF-384      |
+-------------+-------+---------+------------+--------+---------------+
| HPKE/P-521+ | TBD3  | HKDF -  | yes        | none   | HPKE with     |
| HKDF-SHA521 |       | SHA-521 |            |        | ECDH-ES       |
|             |       |         |            |        | (P-521) +     |
|             |       |         |            |        | HKDF-521      |
+-------------+-------+---------+------------+--------+---------------+
| HPKE        | TBD4  | HKDF -  | yes        | none   | HPKE with     |
| X25519 +    |       | SHA-256 |            |        | ECDH-ES       |
| HKDF-SHA256 |       |         |            |        | (X25519) +    |
|             |       |         |            |        | HKDF-256      |
+-------------+-------+---------+------------+--------+---------------+
| HPKE        | TBD4  | HKDF -  | yes        | none   | HPKE with     |
| X448 +      |       | SHA-512 |            |        | ECDH-ES       |
| HKDF-SHA512 |       |         |            |        | (X448) +      |
|             |       |         |            |        | HKDF-512      |
+-------------+-------+---------+------------+--------+---------------+
]]></artwork></figure>

</section>


  </middle>

  <back>

    <references title='Normative References'>




<reference anchor="I-D.ietf-suit-manifest">
   <front>
      <title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
      <author fullname="Brendan Moran">
	 <organization>Arm Limited</organization>
      </author>
      <author fullname="Hannes Tschofenig">
	 <organization>Arm Limited</organization>
      </author>
      <author fullname="Henk Birkholz">
	 <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname="Koen Zandberg">
	 <organization>Inria</organization>
      </author>
      <date month="February" day="22" year="2021" />
      <abstract>
	 <t>   This specification describes the format of a manifest.  A manifest is
   a bundle of metadata about code/data obtained by a recipient (chiefly
   the firmware for an IoT device), where to find the that code/data,
   the devices to which it applies, and cryptographic information
   protecting the manifest.  Software updates and Trusted Invocation
   both tend to use sequences of common operations, so the manifest
   encodes those sequences of operations, rather than declaring the
   metadata.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-suit-manifest-12" />
   <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-suit-manifest-12.txt" />
</reference>



<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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="RFC3394" target='https://www.rfc-editor.org/info/rfc3394'>
<front>
<title>Advanced Encryption Standard (AES) Key Wrap Algorithm</title>
<author initials='J.' surname='Schaad' fullname='J. Schaad'><organization /></author>
<author initials='R.' surname='Housley' fullname='R. Housley'><organization /></author>
<date year='2002' month='September' />
</front>
<seriesInfo name='RFC' value='3394'/>
<seriesInfo name='DOI' value='10.17487/RFC3394'/>
</reference>



<reference  anchor="RFC8152" target='https://www.rfc-editor.org/info/rfc8152'>
<front>
<title>CBOR Object Signing and Encryption (COSE)</title>
<author initials='J.' surname='Schaad' fullname='J. Schaad'><organization /></author>
<date year='2017' month='July' />
<abstract><t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size.  There is a need for the ability to have basic security services defined 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></abstract>
</front>
<seriesInfo name='RFC' value='8152'/>
<seriesInfo name='DOI' value='10.17487/RFC8152'/>
</reference>



<reference  anchor="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<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="I-D.irtf-cfrg-hpke">
   <front>
      <title>Hybrid Public Key Encryption</title>
      <author fullname="Richard L. Barnes">
	 <organization>Cisco</organization>
      </author>
      <author fullname="Karthik Bhargavan">
	 <organization>Inria</organization>
      </author>
      <author fullname="Benjamin Lipp">
	 <organization>Inria</organization>
      </author>
      <author fullname="Christopher A. Wood">
	 <organization>Cloudflare</organization>
      </author>
      <date month="February" day="15" year="2021" />
      <abstract>
	 <t>   This document describes a scheme for hybrid public-key encryption
   (HPKE).  This scheme provides authenticated public key encryption of
   arbitrary-sized plaintexts for a recipient public key.  HPKE works
   for any combination of an asymmetric key encapsulation mechanism
   (KEM), key derivation function (KDF), and authenticated encryption
   with additional data (AEAD) encryption function.  We provide
   instantiations of the scheme using widely used and efficient
   primitives, such as Elliptic Curve Diffie-Hellman key agreement,
   HKDF, and SHA2.

   This document is a product of the Crypto Forum Research Group (CFRG)
   in the IRTF.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-hpke-08" />
   <format type="TXT" target="https://www.ietf.org/archive/id/draft-irtf-cfrg-hpke-08.txt" />
</reference>


<reference anchor="I-D.ietf-cose-rfc8152bis-algs">
   <front>
      <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
      <author fullname="Jim Schaad">
	 <organization>August Cellars</organization>
      </author>
      <date month="September" day="24" year="2020" />
      <abstract>
	 <t>   Concise Binary Object Representation (CBOR) is a data format designed
   for small code size and small message size.  There is a need for the
   ability to have basic security services defined 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 XXXX.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-cose-rfc8152bis-algs-12" />
   <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-cose-rfc8152bis-algs-12.txt" />
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC9019" target='https://www.rfc-editor.org/info/rfc9019'>
<front>
<title>A Firmware Update Architecture for Internet of Things</title>
<author initials='B.' surname='Moran' fullname='B. Moran'><organization /></author>
<author initials='H.' surname='Tschofenig' fullname='H. Tschofenig'><organization /></author>
<author initials='D.' surname='Brown' fullname='D. Brown'><organization /></author>
<author initials='M.' surname='Meriac' fullname='M. Meriac'><organization /></author>
<date year='2021' month='April' />
<abstract><t>Vulnerabilities in Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism suitable for devices with resource constraints. Incorporating such an update mechanism is a fundamental requirement for fixing vulnerabilities, but it also enables other important capabilities such as updating configuration settings and adding new functionality.</t><t>In addition to the definition of terminology and an architecture, this document provides the motivation for the standardization of a manifest format as a transport-agnostic means for describing and protecting firmware updates.</t></abstract>
</front>
<seriesInfo name='RFC' value='9019'/>
<seriesInfo name='DOI' value='10.17487/RFC9019'/>
</reference>


<reference anchor="I-D.ietf-suit-information-model">
   <front>
      <title>A Manifest Information Model for Firmware Updates in IoT Devices</title>
      <author fullname="Brendan Moran">
	 <organization>Arm Limited</organization>
      </author>
      <author fullname="Hannes Tschofenig">
	 <organization>Arm Limited</organization>
      </author>
      <author fullname="Henk Birkholz">
	 <organization>Fraunhofer SIT</organization>
      </author>
      <date month="April" day="6" year="2021" />
      <abstract>
	 <t>   Vulnerabilities with Internet of Things (IoT) devices have raised the
   need for a reliable and secure firmware update mechanism that is also
   suitable for constrained devices.  Ensuring that devices function and
   remain secure over their service life requires such an update
   mechanism to fix vulnerabilities, to update configuration settings,
   as well as adding new functionality.

   One component of such a firmware update is a concise and machine-
   processable meta-data document, or manifest, that describes the
   firmware image(s) and offers appropriate protection.  This document
   describes the information that must be present in the manifest.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-suit-information-model-11" />
   <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-suit-information-model-11.txt" />
</reference>




    </references>


<section anchor="acknowledgements" title="Acknowledgements">

<t>We would like to thank Henk Birkholz for his feedback on the CDDL description in this document.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAOnerGAAA81ceW/byJL/X4C+Q8MB1vaLpBGpw7IG2fdkHc9Gzo09mV3M
BgZFtiTCFKnHpuxoEg/2a+zX20+yVdUHmxTtZHI8PA3g8OijqrqOX1c1p9ls
1mtZmEV8yGZhur7zUs6msZ/uNlmYxOwuzFbs8peLK/bSi8MFF5mo17z5POW3
lR3qtSDxY28NwwWpt8iamfBXyYLH4bIptmHWXKg+TW718b2ML5N0N2QiC+q1
ei3cpEO2SXmvczK4Srcic9vt07YLU6fcG7JL7m/TMNvVa3dJerNMk+1mSFTW
azd8B8+CIbuIM57GPGtOkA4cVGReHFx7URIDdTsOjGzCYb3GWLrweSCyXaSf
M5Ylvn0dxgGPM/NEJGmW8oXIH+zWxfssDf28vZ+s19A/fx/GURhbs/EPWTMK
RdaEgeZJBA2byV+e4isQ59rbbMJ4adNzHfFbjs26yJi3zVZJiqw08T39whje
nrfYlZG/eSWX59yLYy6q3ifpEtb6dw/XZshG6Zq9CNdhxgPTgq+9MBqyFQ3R
ypf4b166bgGzSFSZlrctdp5sRcR3JULeboXYe1Wk4V24DCOz6g324sXYtNTK
WGyzR6oc/2+32Epwf59KIvKsxV4mqRfrh5LCs5THgRcXX31WSmpm1blFnW0B
1Wtxkq6h/y0nLbxoTlohzxbSTtbK3OjV29nYdZxTfd3pnHb19cDpufn1SXev
DQ2bwrD+Il02V5ub0mx+IngTLAAHmoei6UVLQS3ACuNFgUIY9rStyChSa1om
cXOdBDwaIn/NZhOWB2zB88kAr1ahQIXeojEwseF+uAhBBz2mvQLbbgLwBWzN
fVCuUKzZ3YrD42zF6zXTKFx7S/grmPIhPGgxRoPn/bYCBoZu7GJ6NQNeyIdp
oUq3Bq6CwY03B8tbEUmbNLkNAx6w+Y76rnbzNIQF3Wyhjd+kDrlvPDp/83x6
zED7+ZqDPrDR9JI9hza/pt6GHcFd8/mvxzQX2Ci6s6ZYAf0Bzmz5P7wFBi5i
xqEpT5nvCd7A0Zp/H7/Eges1vBnDDfAInAUMxJ0LLR+qpcW+DoMg4nj3BEfO
0iTY+tLZ1mvvtlHMU28eRmGG8idpaH/JkgXKMl4KdnSRXB2zgN+GPrRaebec
pV6I09N6xFwR4rGURyHIkTPwsEygDfJH1jRbeRly4kUiAbcMCkR9cSg/iVFf
wDkGemLwYQmuTMb9jBV1QK5wYWlBTUgT2Z0ncAQeJRsY6+PHavO6v4fhy2No
PUDNrNfm2xhEiWJZ88wDVjxQ6mSb0dyGHpJDzEBiiu6GVt0EGoFUIMza7Yn+
BskLn2shQ+u7VeivWJgxcPsRLE9Lmo6i0bI0Rpa2x9qeLd7fw/AZOCMh180e
gpZi5dHEc2RywdNc/4tSkb1aqKheEISyPywgdQKF0YuEz70lrCH0AQLAxn2a
rKFZEwVD81gATjnzIlCFcBl7GSoPadWaC4GWjvENzFMNAzoSgOT2pQmU7kin
gBPAFEm8CDFqhx6o+U4TB3NuBRJrGQ1DCVugByz1FsM1zBGmAdt4KZpJA2Tv
R9sAO3tZ5vk3PIWHizRZM+SWnvuwiIKksk+fcVLhcpWhtANAIih4rdw2yfZC
g4hTTRQIS/jJLU93qJG3JUvOVoCFliuGbVOBnmEJpkSrk+t5vbav6KSDqNpo
1NqsCVaEv8NtCq56E5JMYFabNVAnkj2wEXCSIKguqewIURGYDCAhRi+SJfhF
0AByvOi9te9V81keEc1CDUeK4ykDAmXFzj5YGshPGkiAc3tFXW2UHUUDNWoD
MkliUIfflViR4wZMtIEQjctHBmH7UwbIhuyyxLWSTUsuaM7nDUIYRZ3NnlQ5
j916KRjqTjoT5Q7Fz6hnVmAMODgMXJO7BJgGJtPEgxgjSEjg/aW/NrGtwDjo
2PO9sCYJgjBWGd7YV0S3eq0Q3tjnoxsoH1CuxQnNtr4K6/F2PYegByLZJEKE
GAn2I3NCY0kRhBipwKsrvUdpwlKG5LqgadFphetNxHEIWnIhrcCImrwF+S/w
9TYp/IOHHeWEOoyk0hc/YeMkRlskilA1r3i6DuMkSpY77ayRBdyICHbw8pfL
q4OG/Je9ek3Xb6f/8cvF2+kEry/PRy9emAvd4vL89S8v4H29pi7zruPXL19O
X01kb3jKSo9ejv7rQNrMwes3VxevX41eHIDUSM1og6aYl9EJVJUkCiuI3pHC
pvDTcA430Ols/Obf4rnY/Ox0IdQoJAohha4Rcd7fwzYM/LOcMYmjHZO3sLo7
tFHu4ZqBrCPQxA16ejBHmEaskruYYZBs7aNDTwi4APl7a1hkDzH9Y3r/SIAH
E1JBlnp4qb8K0d1imCEmENMCDtArB6JYw6oZl3cgJWlMHyEKkJYekAAJjZH8
0JyXHHR2JwPKk5LFyNGrMSKAbvC02WqNfrEgfqCPIZaXpOLV/T1JGhyvtmxJ
BCylsjoEZNAiWcNSLDkGCFxYoDsDdkqmyY7G0+fHsIJfYMbs6Dm0lSY0fn05
xSGNHUjnBG5OgtXnv5J4NMgnXi4VOHDcltty0MyUEvVcxGE0roH0DOhiqK++
l6ZqgExN/N/XZnVwq72Vi4k7+6UAB0ftbJRjBTVNXc5F5WAWVvGY2M7zWVQk
kD0VaGgwwhsZYh75FmjPOVHuFoTXYr+CaVRhF3s3wwjEkquHruttlIXgi6wg
3PiMJO5CtDVJEAyGMKMk1wWZo+KlOtAT3jeAxnCAinye3CHA+BwZqJ2aCmwp
YDddFI3SOzDWHcs9OEwjkES1bDB5yiECfpZkou0VYCkJazNpbqSK2r4a0r8t
aINhqSRqZMfSSW1o6C7BC8VJJuUhYyVCQuAlw7BBU0Fc3yF68BBjAAK/TRRW
nXsihKBzDhzzhtoD5Eg0F5Wl3JYoSfvmO2AIE0oIUBbsd4h9LAJgl62kn7kq
a6M0y50omIANsGCgqr0IunHSeYK5vNg/Cm+kXeWuSrvVi3cNhtgUbgh84rOq
3ToKkUOADYKiNWu6W8A2RANMhgGGFDxaMPAnPg4WaqZ0gMoQERmfZnz3eDJ5
QayWx76+8pbLosR1AAJKPn70Ybvc9Li4uUNPhMP98ccf9VrVEM/Yk37rtH9k
vwMHqnIM1/k+4voC5AfNKwbBCezH0Oo3zKrkqsHYkKHXYS1/DvzAfpOn1yvu
BfDP2ttcm5YN7LeN857D/cbWa2puCRqax9soarC9388QWXwPnRBoXS5x05Uy
p7m7gIF+Y0/LGvy+XnuPzD5MP3tWr32UOTOHPft3jKUNiwYrMtLOCGJJiq3/
wiJvDrvfZ7detAVdla2BLB4L2sMlMFC9dl85uS2uZ8zM38P5UeiNfP6Ld392
tpIEHllZAf6LtSsW0PS2iK5YOBrFUFqMOeRXwZEq+VeNaLP+Z0TPWLdCULSp
+8olIlv7OGRPcjNkVJR4dmAs2gZOTXCrwGNF/eHg3naJGn4oZ5zyf2zDlNI6
COJCgb7D+FfurbXrkCl1lXLATBTujHPXIUGzDz3QoHKkoOMKeKh6rexcYGmM
g1H+BQViEtXAw3U+hdIa9SM3B2s+ZAeK1YOG9dpWHb7eZLvrJL0WsOvHrS4P
jPbolPgHzPR50bXnBUqLzNv35cUwZO8tSJHgCYroUt/KZRgJlmNUwXlsvD6O
sed3CU4gjkMR3yUWW6BRUYBC1SHn0Lw7lC/1yAWiGjhphfwx1KWcNn0K2JCH
KE/YoIhVjNhyMgVC9mzdzJxHZtJ93aEgeQxAPEMK0AGbELZIoii5owyV3IMy
AHNbTIpmKk+jXHIVvJFmj08dd0BD/irbZ4WRLfiitoV6siER3gS3N2TtD26/
AX/7A/zrdvBvm54EXfy7mNNzeut79NbBv3N626G3gzaOBn4IVNcr/Q7o1cUE
Xt2EQdOh+zeRF0pl19YNr2lrSGAIbC4qp9Won/EFRyv+4XjIet3+oH960nHb
6q/jtk/cfq/v9Mdw14enbn9yctJ38Cm26k/g3QlcT20XYiJ0AavBHCodimQd
qc0T1vTYHEi8wWoS+ungeGiwxGTQbw+63c7IacN/8LfXHbv9/sDttPuT7uzM
HYxHbees2zkbtGf9QafbHrltx3Xb3W6vfwb0dd1JvdZxegNnMJq1T/uue9ad
ddsz5+S0Aw1PJ85g0h5PR93+zOmdjrun0xMY56zf7U4UCZIt8IC4pQA9eJhB
SsrGiQAPaDFq+TQypabSmgJmAmgk3YnlwX76ac+GpMyi5TNV50CNzTusDqWY
Dhu5h2QfLSdGY9pR0xo1vC007A1huIckfZg3vbfngtHRLL8AA8mfBFH5/W84
ggWPYBPr7QpkrQ6BuX3BFNp8fIjRQiv4OUPW7BRAHPQi6YJYwUOU23dRJlqr
Os4htZchvNC0IBM56kM4o8Dan1VQaxney0v459gKRgV9M7HI1t+pelcGCxYk
AMqxLHTQHQ/aPaBhcDLpu93ppDdtT87OTkYns5PZ6GR6dmD2NjmjxunACNqo
MZsA9E/7zhSYnJ2NJs7MOZt13E7vrDPud8ftfvt0MB31wIzdjtsHZzg77bo9
sP1Z/2TWnp31x6eu2x2Mpu7gdNR2e25vMGuDhxpNTtpdp2fs9gk7l8naNzJZ
i8xNy8la2pp/QU5X5coKReH7e5XrkPle2tWa6oCugLLSeGAUXjoPITalu6ag
3fhG+2/BliFuCr3cCg4Fy8eh6DSzM9oV9UyZNpAk4VEPgdhKxjExpAxOKSMv
674gBmDUILNYRt1ox7ZZiJAIGY2TuElvPB8L3IxvcJbUi5oCc8U+m4QLMLXm
OY+iNUAY/kEm+DBg12sAobETyEsmywQHOJhZWBDh415ezgiHimiFPXi9ZnEt
fB57aZjIBIvpBXFbqBGRv3LRRAZInfir1/LU3xgzT1cS52y2mUYPNAgl0nV/
AmAwLC8pP1oOpdeYythQV3jvbSCW0ByUHwxbAH2oq5Ymm44n59ayFxM4xxg3
tGk+JDVbTqQ1rzHHTAWMJApkvr6gY7A0WHDWlaKAGzJNcs4qVxXTFS3yG0p0
SiphvIi2vqpWqsoncJajKACaW8xPoebJPVC2s7MneX5bV3MwlwU6DLwiKTLV
BtHGChjwWAM3kzcrCaWcZMEKJR0esIB0dfYwYYtttMAsoad3RZR1lxlSWkBQ
fj9UBccsDedbbfHlEryubdFMMHuGxaI5cBnQDQauxE8iK1n1UJLGzuWqcw65
slXka6Tfav3rZWusXTvseNeA3k0eFGLy/n7fbm/9Sl0lrPmn5W6u5aZIZ3Aq
X35NcuPzwvnyLIfMA4BekorgNuiLOAvjGDnD3XcVb/L1j1zkUnvY/kic9X05
R+VQHBayPoSj/44uLvSvz+mNaFRkbBoqo1VqCiMohP/XP5k3+itzsb2f3trt
p+OKhl+WYsKWJmtnDYlZu+NyKgPdxV4WA8Wn0kkFEy+lMh7fDhb8UZ5mkj66
FEU1sDQBcj82ooe1IE0mD7SYcK5OHWA08f0EMK88Y2Cqozo2a1yw2MbqUI5d
cx3mOzaUGdL2TKGHo2P5bHPzFp5NuEklSfAJAfIoNxZJ/jWQr3qF0o8e4MFC
hiI5YJ8+YXKgjf+SEJ9PZtdjmdOSfYDahslyPWOXPNtuzmBRLo+AhgYNqUa3
LOSZ7tG65F50JF2hrGYq1PyCg9ACndMguKhkIarZOm7Ycx/TatHgxxRMrcKR
hJgPQOmWmlGhGo3KVKoR1APLQbjaIDXyk7KeI0+MAcjQj/0kBT3aJHFgMlX0
HM9cqSJnoFKU+RkU+xiNscRHDw0yhOFqa9VQFVLYNtLpQytn6vQlA3Sgw+yn
km0UWLhxznU7wRAwalEcVmnMIQy/gcHVYSteYQummxkIleFQirWUl80L5+DE
kjvJtIf4DUGvEiCOTehdwTu1OdCvaVVR1YzsygfeqBmdU/ToyCjoxIe8Emrr
drHahNTkVedCuwpsQ8dyb4KFVqY8cWMQ9Dy55c2c5zKQL8H3I3CciTrgkRvR
sTlaRe1Zs+BBvhndGxfzxkuznUJYMngYnCzjnExQw6YMDAMiVxjJBwkdiKUH
5NFVrLaFp1PlI71gFxPogDGJHtPMv9DUiAVyQt5b7989/P5yu9mAg9ANTJ4C
uMWc9wtpuUO2NTOS6/x8Sp7a4iR7OXe99oU0h81yVbId695Cu7qc6ZaRc4Uz
AdwBTmEbF8uxl+Ey1vCZ9gPmqbNfRj3Csz75GU6WH+E0Kk9HHuTOW+4UXo7G
qhYeGzJCUUHJS8+3CNGP2ntUtCyu330R18YfSh+DdSLKAuS5fDrXKSM44cHm
OgHEVs7otfLQIjP9inxbGWVmsoIQcDH5JlL3zDUHv1gpnQ94jBK19EW9zIsM
2D0/3zYP86Oc4EJCzGGo5ADxofjKiSnWS6qOMJiQZEi06LoyTkG7JVHMf8hd
pN6eGywjeCTnsdxx7g71WqmtvNARg8NS2tsdQBDGddlOsaGnpZOWMkzku3pt
TJLhPKcgABblq0n9k3L0QuhEOqbO/ijeyViocBhSLgVf5Uc39WSPud8HXe+x
LkgWp5Tiungo4SO2dMBnsY0axXDLknnxOBPGCZVNqUqb7JevZARcYZZjf26B
B2UwP5LTa6YuIdOvwZMVUPLtka0PogQrJfzVePL1hscKT1qh0qLpy3+ApmJT
ybPOjlVsJHITIFmptGdYKiajBB6qu7DvWnixitMPFyIqKy7/1JpLoehCBYqK
TEWRPCq9MGtaCtGPVmKkBOw+D4ii1WrtVVsYFWgc3RN/ujYDC1Bsfd8o3kP7
qe2zypzMRr3eqNcezxynfdoeTEb9brfjdE9nLtY53bbjjE4mg06nMzpxT1xn
dFga/zc1SVUOpIKPRxSK1PanN0231396DiaJF+wo5nfHFeNIPesMnEGZIC3t
R0VcbYZStpXus7pD00E9HXVB41233XZcpzdw270ZzHB6cjrpOf3BiTM46Tnt
cbfb+7//+d8qWs3EEk6lzD4QQKWEkqt+wIeUa3IVzcrlODO7VOAqIzE/mQ2y
n7zfK7qVq262s/ls0Q3lLrEonpDHxxAwp/ogPQWIs8mQjYLAOET5yZdqas5y
U/L6SJZS6IS+OZFIcKWMNHGbYUbez3ebyWDjc8cjSkTnhBSKWYaCo9Da8tk5
77z9sfoWQH9xih8F4OFjHd8+PhHcb+I+8d5k/xGTptbnB7iJpU/JhBrEAksa
75TOg2cVp+Tz467lapgEMPh9l/q0UJWrvAdPd+fQa+/AOzva+wCFzp/o0+wy
YB035KahKSsn9FEHIAwlyOpN/uemorJlixE7Z7AlpCKH0LkJJpI1fmUIiB0/
dknW622sj3yZCl/h8zM814Nfden5S5/Q6M8mR69GpVXd/04BacCv4mVrAIIS
hTFwe7jcaciFvaXJNwYCzyAtsbayK3wqRAxbXzNUfZ9rFz2eNu3f09K/9pV9
U+wF9yjcT+wVVprU7xN7RzuaTwx8uXoyNUVSfAwLSE8npKBSkeAeB7J/n0r/
4tWldIzyhrTHfq9afTfmkCIrOMFM4AAcnBHjFGvi1U6dUCRCYjwyT+8xltCS
MM2aCW0F1i7PR/SwwMSn/AJDQHN6mbP2eRlVD3REPByzp986kM3HDxJ2Z9BV
wna/RdggWxipJGz7yY8UNszzvYSNJP84YfdcRwm7843ChpFKwraf/Ehhwzzf
S9hI8g8Sdj4TCLv7lcL+T7fXc04ls9/kRvSq2d2+QNhyfiXtf2E38n2E3e0O
lF6VNdtxv0bYdrcvETbMf2wI+FbNhrm/u7DlaTb9v4+Ye/6NvKPvGP2bOLmL
eLCkUyJCnSuWpR/5YRAmwLz4Bj90umFnYXqzSqLfCd4jWlpwHuCQ+gNrqr4G
FmooA1uJwejP/wO03KWHokgAAA==

-->

</rfc>

