<?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 rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>
<?rfc toc_levels="4"?>

<rfc ipr="trust200902" docName="draft-ietf-suit-firmware-encryption-13" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Encrypted Payloads in SUIT Manifests">Encrypted Payloads in SUIT Manifests</title>

    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization></organization>
      <address>
        <email>hannes.tschofenig@gmx.net</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>
    <author initials="D." surname="Brown" fullname="David Brown">
      <organization>Linaro</organization>
      <address>
        <email>david.brown@linaro.org</email>
      </address>
    </author>
    <author initials="K." surname="Takayama" fullname="Ken Takayama">
      <organization>SECOM CO., LTD.</organization>
      <address>
        <email>ken.takayama.ietf@gmail.com</email>
      </address>
    </author>

    <date year="2023" month="July" day="10"/>

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

    <abstract>


<t>This document specifies techniques for encrypting software, firmware
and personalization data by utilizing the IETF
SUIT manifest. Key agreement is provided by ephemeral-static (ES)
Diffie-Hellman (DH) and AES Key Wrap (AES-KW). ES-DH
uses public key cryptography while AES-KW uses a pre-shared
key-encryption key. Encryption of the plaintext is
accomplished with conventional symmetric key cryptography.</t>



    </abstract>



  </front>

  <middle>


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

<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="RFC9124"/> 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 afforded confidentiality using encryption.</t>

<t>Encryption prevents third parties, including attackers, from gaining access to
the firmware binary. Hackers typically need intimate knowledge of the target
firmware to mount their attacks. For example, return-oriented programming (ROP)
<xref target="ROP"/> requires access to the binary and encryption makes it much more difficult
to write exploits.</t>

<t>The SUIT manifest provides the data needed for authorized recipients
of the firmware image to decrypt it. The firmware image is encrypted using a
symmetric key.</t>

<t>A symmetric key can be established using a variety of mechanisms; this document
defines two approaches for use with the IETF SUIT manifest, namely:</t>

<t><list style="symbols">
  <t>Ephemeral-Static (ES) Diffie-Hellman (DH), and</t>
  <t>AES Key Wrap (AES-KW) with a pre-shared key-encryption key (KEK).</t>
</list></t>

<t>The former relies on asymmetric key cryptography while the latter uses symmetric key
cryptography for content key distribution.</t>

<t>Our goal was to reduce the number of content key distribution options and thereby
increase interoperability between different SUIT manifest parser implementations.</t>

<t>While the original motivating use case of this document was firmware encryption,
SUIT manifests may require payloads other than firmware images to experience
confidentiality protection, such as</t>

<t><list style="symbols">
  <t>software packages,</t>
  <t>personalization data,</t>
  <t>configuration data, and</t>
  <t>machine learning models.</t>
</list></t>

<t>Hence, the term payload is used to generically refer to those objects that may be subject to
encryption.</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 document assumes familiarity with the IETF SUIT manifest <xref target="I-D.ietf-suit-manifest"/>,
the SUIT information model <xref target="RFC9124"/> and the SUIT architecture <xref target="RFC9019"/>.</t>

<t>The terms sender and recipient have the following meaning:</t>

<t><list style="symbols">
  <t>Sender: Role of the entity that sends an encrypted payload.</t>
  <t>Recipient: Role of the entity that receives an encrypted payload.</t>
</list></t>

<t>Additionally, we introduce the term "distribution system" (or distributor)
to refer to an entity that knows the recipients of the firmware images.
For use of encryption it therefore either knows the public key of the
recipient (for ES-DH), or the KEK (for AES-KW). The author on the other
hand does not know the recipients, which is responsible for creating the
firmware image. It is important to note that the distribution system is
far more than a file server.</t>

<t>Finally, the following abbreviations are used in this document:</t>

<t><list style="symbols">
  <t>Key Wrap (KW), defined in <xref target="RFC3394"/> (for use with AES)</t>
  <t>Key-Encryption Key (KEK) <xref target="RFC3394"/></t>
  <t>Content-Encryption Key (CEK) <xref target="RFC5652"/></t>
  <t>Ephemeral-Static (ES) Diffie-Hellman (DH) <xref target="RFC9052"/></t>
</list></t>

</section>
<section anchor="arch"><name>Architecture</name>

<t><xref target="RFC9019"/> describes the architecture for distributing payloads and
manifests from an author to devices. It does, however, not detail the
use of payload encryption.</t>

<t>This document enhances this architecture to support encryption. The author
and the distribution system are logical roles. In some deployments these
roles are separated in different physical entities and in others they are
co-located.</t>

<t><xref target="arch-fig"/> shows the distribution system, which represents the firmware
server and the device management infrastructure.</t>

<t>To apply encryption the sender (author) needs to know the recipient (device).
For AES-KW the KEK needs to be known and, in case of ES-DH, the sender needs
to be in possession of the public key of the recipient. The public key and
parameters may be in the recipient's X.509 certificate <xref target="RFC5280"/>.
Furthermore, for ES-DH the recipients must be provisioned with a public key
(or certificate) for digital signature verification of the manifest.</t>

<t>With encryption the author cannot just create a manifest for the firmware
image and sign it since the subsequent encryption step by the distribution
system would invalidate the signature over the manifest. (The content key
distribution information is embedded inside the COSE_Encrypt structure,
which is included in the SUIT manifest.) Hence, the author has to
collaborate with the distribution system. The varying degree of
collaboration is discussed below.</t>

<figure title="Firmware Encryption Architecture." anchor="arch-fig"><artwork><![CDATA[
                                           +----------+
                                           |  Author  |
 +----------+                              +----------+
 |  Device  |---+                               |
 |          |   |                               | Firmware +
 |          |   |                               | Manifest
 +----------+   |                               |
                |                               |
                |                               |
                |                        +--------------+
 +----------+   |  Firmware + Manifest   | Distribution |
 |  Device  |---+------------------------|    System    |
 |          |   |                        +--------------+
 |          |   |
 +----------+   |
                |
                |
 +----------+   |
 |  Device  +---+
 |          |
 |          |
 +----------+
]]></artwork></figure>

<t>The author has several deployment options, namely</t>

<t><list style="symbols">
  <t>The author, as the sender, obtains information about the recipients
and their keys from the distribution system. Then, it performs the necessary
steps to encrypt the payload. As a last step it creates one or more manifests.
The device(s)perform decryption and act as recipients.</t>
  <t>The author treats the distribution system as the initial recipient. Then,
the distribution system decrypts and re-encrypts the payload for consumption
by the device (or the devices). Delegating the task of re-encrypting
the payload to the distribution system offers flexiblity when the number
of devices that need to receive encrypted payloads changes dynamically
or when updates to KEKs or recipient public keys are necessary. As a downside,
the author needs to trust the distribution system with performing the
re-encryption of the payload.</t>
</list></t>

<t>If the author and distributor are separate entities, then the author must delegate
encryption rights to the distributor. By the principle of least privilege, this
should only grant the distributor decryption and re-encryption rights. There are
two models:</t>

<t><list style="numbers">
  <t>The distributor replaces the COSE_Encrypt in the manifest and then signs the
manifest again. However, the COSE_Encrypt structure is contained
within a signed container, which presents a problem: replacing the COSE_Encrypt with a new one
will cause the digest of the manifest to change, thereby changing the signature. This means that
the distributor must be able to sign the new manifest. If this is the case, then the distributor
gains the ability to construct and sign manifests, which allows the distributor the authority
to sign code, effectively presenting the distributor with full control over the recipient.</t>
  <t>The alternative is to use a two-manifest system, where the distributor constructs
a new manifest that overrides the COSE_Encrypt using the dependency system defined in
<xref target="I-D.ietf-suit-trust-domains"/>. This incurrs additional overhead: one additional signature
verification and one additional manifest, as well as the additional machinery in the recipient
needed for dependency processing.</t>
</list></t>

<t>These two models also present different threat profiles for the distributor. If the
distributor only has encryption rights, then an attacker who breaches the distributor can only
mount a limited attack: they can encrypt a modified binary, but the recipients will identify
the attack as soon as they perform the required image digest check and revert back to a correct
image immediately.</t>

<t>However, if the distributor has the authority to sign a single manifest, this threat profile is
substantially degraded: a successful breach of the distributor grants the attacker the ability
to distribute whatever code they like to recipient devices. The recipient will validate the
signature of the code and run it without identifying the attack. Because distributors typically
must perform their re-encryption online in order to handle a large number of devices in a timely
fashion, it is not possible to air-gap the distributor's signing operations. This degrades
the recommendations in <xref target="RFC9124"/>, Section 4.3.17.</t>

<t>It is strongly RECOMMENDED that distributors are implemented using a two-manifest system in order
to distribute encryption keys without requiring re-signing of the manifest, despite the increase
in complexity and greater number of signature verifications that this imposes on the recipient.</t>

</section>
<section anchor="parameters"><name>Encryption Extensions</name>

<t>This specification introduces a new extension to the SUIT_Parameters structure.</t>

<t>The SUIT encryption info parameter (called suit-parameter-encryption-info),
see <xref target="parameter-fig"/>, contains key distribution information. It is carried
inside the suit-directive-override-parameters or the suit-directive-set-parameters
structure. The content of the SUIT_Encryption_Info structure is explained in
<xref target="AES-KW"/> (for AES-KW) and <xref target="ES-DH"/> (for ECDH-ES). An implementation claiming
conformance with this specification must implement support for this parameter.
A device may, however, support only one of the available key distribution techniques.</t>

<figure title="CDDL of the SUIT_Parameters Extension." anchor="parameter-fig"><artwork><![CDATA[
SUIT_Parameters //= (suit-parameter-encryption-info
    => bstr .cbor SUIT_Encryption_Info)

suit-parameter-encryption-info   = [TBD1: Proposed 19]
]]></artwork></figure>

</section>
<section anchor="extended-directives"><name>Extended Directives</name>

<t>This specification extends these directives:</t>

<t><list style="symbols">
  <t>Directive Write (suit-directive-write) to decrypt the content specified by
suit-parameter-content with suit-parameter-encryption-info.</t>
  <t>Directive Copy (suit-directive-copy) to decrypt the content of the component
specified by suit-parameter-source-component with suit-parameter-encryption-info.</t>
</list></t>

<t>Examples of the two extensioned directives are shown in <xref target="encryption-info-consumed-with-write"/>
and in <xref target="encryption-info-consumed-with-copy"/>.</t>

<figure title="Example showing the Extended suit-directive-write." anchor="encryption-info-consumed-with-write"><artwork><![CDATA[
/ directive-override-parameters / 20, {
  / parameter-content / 18: h'EA1CED',
  / parameter-encryption-info / 19: h'D860E1A1F0'
},
/ directive-write / 18, 15
/ NOTE: decrypt h'EA1CED' using h'D860E1A1F0' /
/ NOTE: plaintext payload is stored into component #0 /
]]></artwork></figure>

<figure title="Example showing the Extended suit-directive-copy." anchor="encryption-info-consumed-with-copy"><artwork><![CDATA[
/ directive-set-component-index / 12, 1,
/ directive-override-parameters / 20, {
  / parameter-uri / 21: "http://example.com/encrypted.bin",
},
/ directive-fetch / 21, 15,
/ NOTE: encrypted payload is stored into component #1 /
/ directive-set-component-index / 12, 0,
/ directive-override-parameters / 20, {
  / parameter-source-component / 22: 1,
  / parameter-encryption-info / 19: h'D860E1A1F0'
},
/ directive-copy / 22, 15
/ NOTE: decrypt component #1 using h'D860E1A1F0' /
/ NOTE: plaintext payload is stored into component #0 /
]]></artwork></figure>

</section>
<section anchor="content-key-distribution-methods"><name>Content Key Distribution Methods</name>

<t>The sub-sections below describe two content key distribution mechanisms,
namely AES Key Wrap (AES-KW) and Ephemeral-Static Diffie-Hellman (ES-DH).
Other mechanisms are supported by COSE and may be supported via enhancements
to this specification.</t>

<t>When an encrypted firmware image is sent to multiple recipients, there
are different deployment options. To explain these options we use the
following notation:</t>

<t><list style="symbols">
  <t>KEK(R1,S) refers to a KEK shared between recipient R1 and the sender S.
The KEK, as a concept, is used by AES Key Wrap.</t>
  <t>CEK(R1,S) refers to a CEK shared between R1 and S.</t>
  <t>CEK(<em>,S) or KEK(</em>,S) are used when a single CEK or a single KEK is shared
with all authorized recipients by a given sender S in a certain context.</t>
  <t>ENC(plaintext, k) refers to the encryption of plaintext with a key k.</t>
  <t>KEK_i or CEK_i refers to the i-th instance of the KEK or CEK, respectively.</t>
</list></t>

<section anchor="AES-KW"><name>Content Key Distribution with AES Key Wrap</name>

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

<t>The AES Key Wrap (AES-KW) algorithm is described in RFC 3394 <xref target="RFC3394"/>, and
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 8.5.2 of <xref target="RFC9052"/> and in Section 6.2.1 of
<xref target="RFC9053"/>. 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 structure, contains the CEK
encrypted by the KEK.</t>

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

</section>
<section anchor="deployment-options"><name>Deployment Options</name>

<t>There are three deployment options for use with AES Key Wrap for payload
encryption:</t>

<t><list style="symbols">
  <t>If all authorized recipients have access to the KEK, a single
COSE_recipient structure contains the encrypted CEK. The sender executes
the following steps:</t>
</list></t>

<figure><artwork><![CDATA[
      Fetch KEK(*,S)
      Generate CEK
      ENC(CEK,KEK)
      ENC(payload,CEK)
]]></artwork></figure>

<t><list style="symbols">
  <t>If recipients have different KEKs, then multiple COSE_recipient structures
are included but only a single CEK is used. Each COSE_recipient structure
contains the CEK encrypted with the KEKs appropriate for a given recipient.
The benefit of this approach is that the payload is encrypted only once with
a CEK while there is no sharing of the KEK across recipients. Hence, authorized
recipients still use their individual KEK to decrypt the CEK and to subsequently
obtain the plaintext. The steps taken by the sender are:</t>
</list></t>

<figure><artwork><![CDATA[
      Generate CEK
      for i=1 to n {
         Fetch KEK_i(Ri, S)
         ENC(CEK, KEK_i)
      }
      ENC(payload,CEK)
]]></artwork></figure>

<t><list style="symbols">
  <t>The third option is to use different CEKs encrypted with KEKs of
authorized recipients. Assume there are n recipients with their unique KEKs -
KEK_1(R1, S),..., KEK_n(Rn, S). The sender needs to make the following steps:</t>
</list></t>

<figure><artwork><![CDATA[
      for i=1 to n {
         Fetch KEK_i(Ri, S)
         Generate CEK_i
         ENC(CEK_i, KEK_i)
         ENC(payload,CEK_i)
      }
]]></artwork></figure>

<t>This approach is appropriate when no benefits can be gained from encrypting
and transmitting payloads only once.</t>

</section>
<section anchor="cddl"><name>CDDL</name>

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

<figure title="CDDL for AES-KW-based Content Key Distribution" 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  : bstr / nil,
  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>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 header in the COSE_recipient structure is a byte string
of zero length.</t>

<t>The COSE specification requires a consistent byte stream for the authenticated
data structure to be created. This structure is 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>This Enc_structure needs to be populated as follows:</t>

<t>The protected field in the Enc_structure from <xref target="cddl-enc-aeskw"/> refers
to the content of the protected field from the COSE_Encrypt structure.
It is important to note that there are two protected fields shown
in <xref target="cddl-aeskw"/>:</t>

<t><list style="symbols">
  <t>one in the COSE_Encrypt structure, and</t>
  <t>a second one in the COSE_recipient structure.</t>
</list></t>

<t>The value of the external_aad MUST be set to a null value (major type 7,
value 22).</t>

</section>
<section anchor="example"><name>Example</name>

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

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-GCM-128</t>
  <t>Algorithm id for key wrap: A128KW</t>
  <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 (txt): "This is a real firmware image."
(in 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 diagnostic 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: / << {
    / alg / 1: 1 / AES-GCM-128 /
  } >>,
  / unprotected: / {
    / IV / 5: h'1de460e8b5b68d7222c0d6f20484d8ab'
  },
  / payload: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / << {
      } >>,
      / unprotected: / {
        / alg / 1: -3 / A128KW /,
        / kid / 4: 'kid-1'
      },
      / payload: CEK encrypted with KEK /
      h'a86200e4754733e4c00fc08c6a72cc1996e129922eab504f'
    ]
  ]
])
]]></artwork></figure>

<t>The CEK, in hex format, was "4C805F1587D624ED5E0DBB7A7F7FA7EB".
The encrypted firmware (with a line feed added) was:</t>

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

</section>
</section>
<section anchor="ES-DH"><name>Content Key Distribution with Ephemeral-Static Diffie-Hellman</name>

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

<t>Ephemeral-Static Diffie-Hellman (ES-DH) is a scheme that provides public key
encryption given a recipient's public key. There are multiple variants
of this scheme; this document re-uses the variant specified in Section 8.5.5
of <xref target="RFC9052"/>.</t>

<t>The following two layer structure is used:</t>

<t><list style="symbols">
  <t>Layer 0: Has a content encrypted with the CEK. The content may be detached.</t>
  <t>Layer 1: Uses the AES Key Wrap algorithm to encrypt a randomly generated
CEK with the KEK derived with ECDH Ephemeral-Static whereby the resulting symmetric
key is fed into the HKDF-based key derivation function.</t>
</list></t>

<t>As a result, the two layers combine ECDH-ES with AES-KW and HKDF. An example is
given in <xref target="esdh-example"/>.</t>

</section>
<section anchor="deployment-options-1"><name>Deployment Options</name>

<t>There are two deployment options with this approach. We assume that recipients
are always configured with a device-unique public / private key pair.</t>

<t><list style="symbols">
  <t>A sender wants to transmit a payload to multiple recipients. All recipients
shall receive the same encrypted payload, i.e. the same CEK is used.
One COSE_recipient structure per recipient is used and it contains the
CEK encrypted with the KEK. To generate the KEK each COSE_recipient structure
contains a COSE_recipient_inner structure to carry the sender's emphemeral key
and an identifier for the recipients public key.</t>
</list></t>

<t>The steps taken by the sender are:</t>

<figure><artwork><![CDATA[
      Generate CEK
      for i=1 to n {
         Generate KEK_i(Ri, S) using ES-DH
         ENC(CEK, KEK_i)
      }
      ENC(payload,CEK)
]]></artwork></figure>

<t><list style="symbols">
  <t>The alternative is to encrypt a payload with a different CEK for each
recipient. Assume there are KEK_1(R1, S),..., KEK_n(Rn, S) have been generated
for the different recipients using ES-DH. The following steps needs to be made
by the sender:</t>
</list></t>

<figure><artwork><![CDATA[
      for i=1 to n {
         Generate KEK_i(Ri, S) using ES-DH
         Generate CEK_i
         ENC(CEK_i, KEK_i)
         ENC(payload,CEK_i)
      }
]]></artwork></figure>

<t>This results in n-manifests. This approach is useful when payloads contain
information unique to a device. The encryption operation effectively becomes
ENC(payload_i,CEK_i).</t>

</section>
<section anchor="cddl-1"><name>CDDL</name>

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

<figure title="CDDL for ES-DH-based Content Key Distribution" anchor="cddl-esdh"><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  : bstr / nil,
  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 .cbor recipient_header_pr_map,
  unprotected : recipient_header_unpr_map,
  ciphertext  : bstr        ; CEK encrypted with KEK
]

recipient_header_pr_map = 
{
    1 => int,         ; algorithm identifier for key wrap
  * label => values   ; extension point
}

recipient_header_unpr_map = 
{
   -1 => COSE_Key,    ; ephemeral public key for the sender
    4 => bstr,        ; identifier of the recipient public key
  * label => values   ; extension point
}
]]></artwork></figure>

</section>
<section anchor="context-information-structure"><name>Context Information Structure</name>

<t>The context information structure is used to ensure that the derived keying material 
is "bound" to the context of the transaction. This specification re-uses the structure
defined in Section 5.2 of RFC 9053 and tailors it accordingly.</t>

<t>The following information elements are bound to the context:</t>

<t><list style="symbols">
  <t>the hash of the public key of the sender,</t>
  <t>the hash of the public key of the recipient,</t>
  <t>the protocol employing the key-derivation method,</t>
  <t>information about the utilized algorithms
(including the payload encryption algorithms,
 the content key encryption algorithm,
 and the key length).</t>
</list></t>

<t>The following fields in <xref target="cddl-context-info"/> require an explantation:</t>

<t><list style="symbols">
  <t>The identity fields in the PartyInfoSender and the PartyInfoRecipient structures
contain the COSE_Key Thumbprint of the public keys of the sender and the recipient,
respectively. The details for computing these thumbprints are described in 
<xref target="I-D.isobe-cose-key-thumbprint"/>.</t>
  <t>The COSE_KDF_Context.AlgorithmID field contains the value found in the
alg field of the protected header in the COSE_Encrypt structure. This is the content
encryption algorithm identifier.</t>
  <t>The COSE_KDF_Context.SuppPubInfo.keyDataLength field contains the key length
of the algorithm in the alg field of the protected header in the COSE_Encrypt structure 
expressed as the number of bits.</t>
  <t>The COSE_KDF_Context.SuppPubInfo.other field captures the protocol in
which the ES-DH content key distribution algorithm is used and it is set to
the constant string "SUIT Payload Encryption".</t>
  <t>The COSE_KDF_Context.SuppPubInfo.protected field serializes the content 
of the recipient_header_pr_map field, which contains the content key distribution
algorithm identifier.</t>
</list></t>

<figure title="CDDL for COSE_KDF_Context Structure" anchor="cddl-context-info"><artwork><![CDATA[
PartyInfoSender = (
    identity : bstr,
    nonce : nil,
    other : bstr .size 0
)

PartyInfoRecipient = (
    identity : bstr,
    nonce : nil,
    other : bstr .size 0
)

COSE_KDF_Context = [
    AlgorithmID : int,
    PartyUInfo : [ PartyInfoSender ],
    PartyVInfo : [ PartyInfoRecipient ],
    SuppPubInfo : [
        keyDataLength : uint,
        protected : bstr .cbor recipient_header_pr_map,
        other: bstr "SUIT Payload Encryption"
    ],
    SuppPrivInfo : bstr .size 0
]
]]></artwork></figure>

</section>
<section anchor="example-1"><name>Example</name>

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

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-GCM-128</t>
  <t>IV: 0x26, 0x68, 0x23, 0x06, 0xd4, 0xfb,
    0x28, 0xca, 0x01, 0xb4, 0x3b, 0x80</t>
  <t>Algorithm for content key distribution: ECDH-ES + A128KW</t>
  <t>KID: "kid-1"</t>
  <t>Plaintext: "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[
D8608443A10101A1054C26682306D4FB28CA01B43B805823F21AC5881CD6FC45754
C65790F806C81A57B8D96C1988233BF40F670172405B5F107FD8444A101381C44A1
01381CA220A401022001215820415A8ED270C4B1F10B0A2D42B28EE6028CE25D745
52CB4291A4069A2E989B0F6225820CCC9AAF60514B9420C80619A4FF068BC1D7762
5BA8C90200882F7D5B73659E7604456B69642D315818B37CCD582696E5E62E5D93A
555E9072687D6170B122322EE
]]></artwork></figure>

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

<figure title="COSE_Encrypt Example for ES-DH" anchor="esdh-example"><artwork><![CDATA[
96(
  [
   / protected / h'a10101' / {
       \ alg \ 1:1 \ AES-GCM-128 \
     } / ,
   / unprotected / {
     / iv / 5:h'26682306D4FB28CA01B43B80'
     },
   / encrypted firmware /
    h'F21AC5881CD6FC45754C65790F806C81A57
      B8D96C1988233BF40F670172405B5F107FD',
    [
       / protected / h'A101381C' / {
           \ alg \ 1:-29 \ ECDH-ES + A128KW \
         } / ,
         h'A101381C',
       / unprotected / {
             / ephemeral / -1: {
                   / kty / 1:2,
                   / crv / -1:1,
                   / x / -2:h'415A8ED270C4B1F10B0A2D42B28EE602
                              8CE25D74552CB4291A4069A2E989B0F6',
                   / y / -3:h'CCC9AAF60514B9420C80619A4FF068BC
                              1D77625BA8C90200882F7D5B73659E76'
                 },
                 / kid / 4:'kid-1'
        },
        / ciphertext - CEK encrypted with KEK /
        h'B37CCD582696E5E62E5D93A555E9072687D6170B122322EE'
    ]
  ]
)
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="firmware-updates-on-iot-devices-with-flash-memory"><name>Firmware Updates on IoT Devices with Flash Memory</name>

<t>Flash memory on microcontrollers is a type of non-volatile memory that erases
data in units called blocks, pages or sectors and re-writes data at byte level
(often 4-bytes).
Flash memory is furthermore segmented into different memory regions, which store
the bootloader, different versions of firmware images (in so-called slots),
and configuration data. <xref target="image-layout"/> shows an example layout of a
microcontroller flash area. The primary slot contains the firmware image to be
executed by the bootloader, which is a common deployment on devices that do
not offer the concept of position independent code.</t>

<t>When the encrypted firmware image has been transferred to the device, it will
typically be stored in a staging area, in the secondary slot in our example.</t>

<t>At the next boot, the bootloader will recognize a new firmware image in the
secondary slot and will start decrypting the downloaded image sector-by-sector
and will swap it with the image found in the primary slot.</t>

<t>The swap should only take place after the signature on the plaintext is verified.
Note that the plaintext firmware image is available in the primary slot only after
the swap has been completed, unless "dummy decrypt" is used to compute the hash
over the plaintext prior to executing the decrypt operation during a swap.
Dummy decryption here refers to the decryption of the firmware image found in
the secondary slot sector-by-sector and computing a rolling hash over the resulting
plaintext firmware image (also sector-by-sector) without performing the swap operation.
While there are performance optimizations possible, such as conveying hashes for
each sector in the manifest rather than a hash of the entire firmware image,
such optimizations are not described in this specification.</t>

<t>This approach of swapping the newly downloaded image with the previously valid
image is often referred as A/B approach. A/B refers to the two slots involved.
Two slots are used to allow the update to be reversed in case the newly obtained
firmware image fails to boot. This approach adds robustness to the firmware
update procedure.</t>

<t>Since the image in primary slot is available in cleartext it may need to
re-encrypted it before copying it to the secondary slot. This may be necessary
when the secondary slot has different access permissions or when the staging
area is located in an off-chip flash memory and therefore more vulnerable to
physical attacks. Note that this description assumes that the processor does
not execute encrypted memory (i.e. using on-the-fly decryption in hardware).</t>

<figure title="Example Flash Area Layout" anchor="image-layout"><artwork><![CDATA[
+--------------------------------------------------+
| Bootloader                                       |
+--------------------------------------------------+
| Primary Slot                                     |
|                                        (sector 1)|
|..................................................|
|                                                  |
|                                        (sector 2)|
|..................................................|
|                                                  |
|                                        (sector 3)|
|..................................................|
|                                                  |
|                                        (sector 4)|
+--------------------------------------------------+
| Secondary Slot                                   |
|                                        (sector 1)|
|..................................................|
|                                                  |
|                                        (sector 2)|
|..................................................|
|                                                  |
|                                        (sector 3)|
|..................................................|
|                                                  |
|                                        (sector 4)|
+--------------------------------------------------+
| Swap Area                                        |
|                                                  |
+--------------------------------------------------+
| Configuration Data                               |
+--------------------------------------------------+
]]></artwork></figure>

<t>The ability to restart an interrupted firmware update is often a requirement
for low-end IoT devices. To fulfill this requirement it is necessary to chunk
a firmware image into sectors and to encrypt each sector individually
using a cipher that does not increase the size of the resulting ciphertext
(i.e., by not adding an authentication tag after each encrypted block).</t>

<t>When an update gets aborted while the bootloader is decrypting the newly obtained
image and swapping the sectors, the bootloader can restart where it left off. This
technique offers robustness and better performance.</t>

<t>For this purpose ciphers without integrity protection are used to encrypt the
firmware image. Integrity protection for the firmware image must, however, be
provided and the suit-parameter-image-digest, defined in Section 8.4.8.6 of
<xref target="I-D.ietf-suit-manifest"/>, MUST be used.</t>

<t><xref target="I-D.ietf-cose-aes-ctr-and-cbc"/> registers AES Counter mode (AES-CTR) and
AES Cipher Block Chaining (AES-CBC) ciphers that do not offer integrity protection.
These ciphers are useful for the use cases that require firmware encryption on IoT
devices. For many other use cases where software packages, configuration information
or personalization data needs to be encrypted, the use of Authenticated Encryption
with Additional Data (AEAD) ciphers is preferred.</t>

<t>The following sub-sections provide further information about the initialization vector
(IV) selection for use with AES-CBC and AES-CTR in the firmware encryption context. An
IV MUST NOTE be re-used when the same key is used. For this application, the IVs are
not random but rather based on the slot/sector-combination in flash memory. The
text below assumes that the block-size of AES is (much) smaller than sector size. The
typical sector-size of flash memory is in the order of KiB. Hence, multiple AES blocks
need to be decrypted until an entire sector is completed.</t>

<section anchor="aes-cbc"><name>AES-CBC</name>

<t>In AES-CBC a single IV is used for encryption of firmware belonging to a single sector
since individual AES blocks are chained toghether, as shown in <xref target="aes-cbc-fig"/>. The
numbering  of sectors in a slot MUST start with zero (0) and MUST increase by one with
every sector till the end of the slot is reached. The IV follows this numbering.</t>

<t>For example, let us assume the slot size of a specific flash controller on an IoT device
is 64 KiB, the sector size 4096 bytes (4 KiB) and AES-128-CBC uses an AES-block size of
128 bit (16 bytes). Hence, sector 0 needs 4096/16=256 AES-128-CBC operations using IV 0.
If the firmware image fills the entire slot then that slot contains 16 sectors, i.e. IVs
ranging from 0 to 15.</t>

<figure title="AES-CBC Operation" anchor="aes-cbc-fig"><artwork><![CDATA[
       P1              P2
        |              |
   IV--(+)    +-------(+)
        |     |        |
        |     |        |
    +-------+ |    +-------+
    |       | |    |       |
    |       | |    |       |
 k--|  E    | | k--|  E    |
    |       | |    |       |
    +-------+ |    +-------+
        |     |        |
        +-----+        |
        |              |
        |              |
        C1             C2

Legend: 
  Pi = Plaintext blocks
  Ci = Ciphertext blocks
  E = Encryption function
  k = Symmetric key
  (+) = XOR operation
]]></artwork></figure>

</section>
<section anchor="aes-ctr"><name>AES-CTR</name>

<t>Unlike AES-CBC, AES-CTR uses an IV per AES operation, as shown in <xref target="aes-ctr-fig"/>.
Hence, when an image is encrypted using AES-CTR-128 or AES-CTR-256, the IV MUST
start with zero (0) and MUST be incremented by one for each 16-byte plaintext block
within the entire slot.</t>

<t>Using the previous example with a slot size of 64 KiB, the sector size 4096 bytes and
the AES plaintext block size of 16 byte requires IVs from 0 to 255 in the first sector
and 16 * 256 IVs for the remaining sectors in the slot.</t>

<figure title="AES-CTR Operation" anchor="aes-ctr-fig"><artwork><![CDATA[
         IV1            IV2
          |              |
          |              |
          |              |
      +-------+      +-------+
      |       |      |       |
      |       |      |       |
   k--|  E    |   k--|  E    |
      |       |      |       |
      +-------+      +-------+
          |              |
     P1--(+)        P2--(+)
          |              |
          |              |
          C1             C2

Legend: 
  See previous diagram.
]]></artwork></figure>

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

<t>The following manifests examplify how to deliver encrypted firmware and its
encryption info to devices.</t>

<t>The examples are signed using the following ECDSA secp256r1 key:</t>

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgApZYjZCUGLM50VBC
CjYStX+09jGmnyJPrpDLTz/hiXOhRANCAASEloEarguqq9JhVxie7NomvqqL8Rtv
P+bitWWchdvArTsfKktsCYExwKNtrNHXi9OB3N+wnAUtszmR23M4tKiW
-----END PRIVATE KEY-----
]]></artwork></figure>

<t>The corresponding public key can be used to verify these examples:</t>

<figure><artwork><![CDATA[
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhJaBGq4LqqvSYVcYnuzaJr6qi/Eb
bz/m4rVlnIXbwK07HypLbAmBMcCjbazR14vTgdzfsJwFLbM5kdtzOLSolg==
-----END PUBLIC KEY-----
]]></artwork></figure>

<t>Each example uses SHA-256 as the digest function.</t>

<section anchor="example-AES-KW-write"><name>AES Key Wrap Example with Write Directive</name>

<t>The following SUIT manifest requests a parser to write and to decrypt the
encrypted payload into a component with the suit-directive-write
directive.</t>

<t>The SUIT manifest in diagnostic notation (with line breaks added
for readability) is shown here:</t>

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107({
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: /
      h'21F91D0007458DED08ED6C3D6B9A6824
        FE58100529DF05F5947BDD1FFF5DFBE9'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: /
      h'B1614992A357783A6D35D7D77807D7DA
        0F67E0CB5D0BDBFD592D9C45C5BDD3B6
        828E3A7A1101B33D558EB7C5114D0571
        22D69455972D9937A1000E8F10DD5A2E'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 1,
    / common / 3: << {
      / components / 2: [
        [h'00'] / to be decrypted payload /,
      ]
    } >>,
    / install / 17: << [
      / fetch encrypted firmware /
      / directive-override-parameters / 20, {
        / parameter-content / 18:
        h'2b3765ff457dd98a4ba7130a40462b66
          3c08198146d23f3a32094392ca5040c3
          121c8e5f4c04d5a3d1d6171bcf362b',
        / parameter-encryption-info / 19: << 96([
          / protected: / << {
            / alg / 1: 1 / AES-GCM-128 /
          } >>,
          / unprotected: / {
            / IV / 5: h'1de460e8b5b68d7222c0d6f20484d8ab'
          },
          / payload: / null / detached ciphertext /,
          / recipients: / [
            [
              / protected: / << {
              } >>,
              / unprotected: / {
                / alg / 1: -3 / A128KW /,
                / kid / 4: 'kid-1'
              },
              / payload: /
              h'a86200e4754733e4c00fc08c
                6a72cc1996e129922eab504f'
              / CEK encrypted with KEK /
            ]
          ]
        ]) >>
      },

      / decrypt encrypted firmware /
      / directive-write / 18, 15
      / consumes the SUIT_Encryption_Info above /,

      / verify decrypted firmware /
      / directive-override-parameters / 20, {
        / parameter-image-digest / 3: << [
          / digest-algorithm-id: / -16 / SHA-256 /,
          / digest-bytes: /
          h'efe16b6a486ff25e9fb5fabf515e2bfc
            3f38b405de377477b23275b53049b46b'
        ] >>,
        / parameter-image-size / 14: 31
      },
      / condition-image-match / 3, 15
    ] >>
  } >>
})
]]></artwork></figure>

<t>In hex format, the SUIT manifest is this:</t>

<figure><artwork><![CDATA[
D86BA2025873825824822F582021F91D0007458DED08ED6C3D6B9A6824FE
58100529DF05F5947BDD1FFF5DFBE9584AD28443A10126A0F65840B16149
92A357783A6D35D7D77807D7DA0F67E0CB5D0BDBFD592D9C45C5BDD3B682
8E3A7A1101B33D558EB7C5114D057122D69455972D9937A1000E8F10DD5A
2E0358BBA4010102010346A102818141001158AB8814A212582F2B3765FF
457DD98A4BA7130A40462B663C08198146D23F3A32094392CA5040C3121C
8E5F4C04D5A3D1D6171BCF362B135843D8608443A10101A105501DE460E8
B5B68D7222C0D6F20484D8ABF6818341A0A2012204456B69642D315818A8
6200E4754733E4C00FC08C6A72CC1996E129922EAB504F120F14A2035824
822F5820EFE16B6A486FF25E9FB5FABF515E2BFC3F38B405DE377477B232
75B53049B46B0E181F030F
]]></artwork></figure>

</section>
<section anchor="example-AES-KW-copy"><name>AES Key Wrap Example with Fetch + Copy Directives</name>

<t>The following SUIT manifest requests a parser to fetch the encrypted
payload and to stores it. Then, the payload is decrypt and stored into
another component with the suit-directive-copy directive. This approach
works well on constrained devices with execute-in-place flash memory.</t>

<t>The SUIT manifest in diagnostic notation (with line breaks added for
readability) is shown here:</t>

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107({
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: /
      h'65576167AF903B981C419CDAC9B5F63C
        3A697927CC7FBF81CD6E34F4A70BCB60'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: /
      h'A8C807FF03015088492C9C3B0779A771
        502639676E7D27C3D33E8432037FA9D1
        FE948D3C4C82778A6E2B1ADA74287809
        526014A2BACFDC64600F63847956AE6F'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 1,
    / common / 3: << {
      / components / 2: [
        [h'00'] / to be decrypted payload /,
        [h'01'] / encrypted payload /
      ]
    } >>,
    / install / 17: << [
      / fetch encrypted firmware /
      / directive-set-component-index / 12, 1 / [h'01'] /,
      / directive-override-parameters / 20, {
        / parameter-uri / 21:
        "https://author.example.com/encrypted-firmware.bin",
        / parameter-image-size / 14: 47
      },
      / directive-fetch / 21, 15,

      / decrypt encrypted firmware /
      / directive-set-component-index / 12, 0 / [h'00'] /,
      / directive-override-parameters / 20, {
        / parameter-source-component / 22: 1 / [h'01'] /,
        / parameter-encryption-info / 19: << 96([
          / protected: / << {
            / alg / 1: 1 / AES-GCM-128 /
          } >>,
          / unprotected: / {
            / IV / 5: h'1de460e8b5b68d7222c0d6f20484d8ab'
          },
          / payload: / null / detached ciphertext /,
          / recipients: / [
            [
              / protected: / << {
              } >>,
              / unprotected: / {
                / alg / 1: -3 / A128KW /,
                / kid / 4: 'kid-1'
              },
              / payload: /
              h'a86200e4754733e4c00fc08c
                6a72cc1996e129922eab504f'
              / CEK encrypted with KEK /
            ]
          ]
        ]) >>
      },
      / directive-copy / 22, 15
      / consumes the SUIT_Encryption_Info above /,

      / verify decrypted firmware /
      / directive-override-parameters / 20, {
        / parameter-image-digest / 3: << [
          / digest-algorithm-id: / -16 / SHA-256 /,
          / digest-bytes: /
          h'efe16b6a486ff25e9fb5fabf515e2bfc
            3f38b405de377477b23275b53049b46b'
        ] >>,
        / parameter-image-size / 14: 31
      },
      / condition-image-match / 3, 15
    ] >>
  } >>
})
]]></artwork></figure>

<t>In hex format, the SUIT manifest is this:</t>

<figure><artwork><![CDATA[
D86BA2025873825824822F582065576167AF903B981C419CDAC9B5F63C3A
697927CC7FBF81CD6E34F4A70BCB60584AD28443A10126A0F65840A8C807
FF03015088492C9C3B0779A771502639676E7D27C3D33E8432037FA9D1FE
948D3C4C82778A6E2B1ADA74287809526014A2BACFDC64600F63847956AE
6F0358CDA4010102010349A102828141008141011158BA900C0114A21578
3168747470733A2F2F617574686F722E6578616D706C652E636F6D2F656E
637279707465642D6669726D776172652E62696E0E182F150F0C0014A216
01135843D8608443A10101A105501DE460E8B5B68D7222C0D6F20484D8AB
F6818341A0A2012204456B69642D315818A86200E4754733E4C00FC08C6A
72CC1996E129922EAB504F160F14A2035824822F5820EFE16B6A486FF25E
9FB5FABF515E2BFC3F38B405DE377477B23275B53049B46B0E181F030F
]]></artwork></figure>

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

<t>The algorithms described in this document assume that the party performing payload encryption</t>

<t><list style="symbols">
  <t>shares a key-encryption key (KEK) with the recipient (for use with the AES Key Wrap scheme), or</t>
  <t>is in possession of the public key of the recipient (for use with ECDH-ES).</t>
</list></t>

<t>Both cases require some upfront communication interaction. This interaction is likely provided by
an device management solution, as described in <xref target="RFC9019"/>.</t>

<t>To provide high security for AES Key Wrap it is important that the KEK is of high entropy,
and that implementations protect the KEK from disclosure. Compromise of the KEK may result
in the disclosure of all key data protected with that KEK.</t>

<t>Since the CEK is randomly generated, it must be ensured that the guidelines for random number
generation in <xref target="RFC8937"/> are followed.</t>

<t>In some cases third party companies analyse binaries for known security vulnerabilities. With
encrypted payloads this type of analysis is prevented. Consequently, these third party
companies either need to be given access to the plaintext binary before encryption or they need
to become authorized recipients of the encrypted payloads. In either case, it is necessary to
explicitly consider those third parties in the software supply chain when such a binary analysis
is desired.</t>

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

<t>IANA is asked to add two values to the SUIT_Parameters registry established by 
<xref target="I-D.ietf-suit-manifest"/>.</t>

<figure><artwork><![CDATA[
Label      Name                 Reference
-----------------------------------------
TBD1       Encryption Info      Section 4
]]></artwork></figure>

<t>[Editor's Note: 
 - TBD1: Proposed 19
]</t>

</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'/>
    <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='RFC3394'>
  <front>
    <title>Advanced Encryption Standard (AES) Key Wrap Algorithm</title>
    <author fullname='J. Schaad' initials='J.' surname='Schaad'/>
    <author fullname='R. Housley' initials='R.' surname='Housley'/>
    <date month='September' year='2002'/>
  </front>
  <seriesInfo name='RFC' value='3394'/>
  <seriesInfo name='DOI' value='10.17487/RFC3394'/>
</reference>

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

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

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


<reference anchor='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' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Koen Zandberg' initials='K.' surname='Zandberg'>
         <organization>Inria</organization>
      </author>
      <author fullname='Øyvind Rønningstad' initials='O.' surname='Rønningstad'>
         <organization>Nordic Semiconductor</organization>
      </author>
      <date day='27' month='February' year='2023'/>
      <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-22'/>
   
</reference>


<reference anchor='I-D.ietf-cose-aes-ctr-and-cbc'>
   <front>
      <title>CBOR Object Signing and Encryption (COSE): AES-CTR and AES-CBC</title>
      <author fullname='Russ Housley' initials='R.' surname='Housley'>
         <organization>Vigil Security, LLC</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         <organization>Arm Limited</organization>
      </author>
      <date day='25' month='May' year='2023'/>
      <abstract>
	 <t>   The Concise Binary Object Representation (CBOR) data format is
   designed for small code size and small message size.  CBOR Object
   Signing and Encryption (COSE) is specified in RFC 9052 to provide
   basic security services using the CBOR data format.  This document
   specifies the conventions for using AES-CTR and AES-CBC as Content
   Encryption algorithms with COSE.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-cose-aes-ctr-and-cbc-06'/>
   
</reference>


<reference anchor='I-D.isobe-cose-key-thumbprint'>
   <front>
      <title>COSE Key Thumbprint</title>
      <author fullname='Kohei Isobe' initials='K.' surname='Isobe'>
         <organization>SECOM CO., LTD.</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         </author>
      <date day='16' month='June' year='2023'/>
      <abstract>
	 <t>   This specification defines a method for computing a hash value over a
   COSE Key. It defines which fields in a COSE Key structure are used in
   the hash computation, the method of creating a canonical form of the
   fields, and how to hash the byte sequence.  The resulting hash value
   can be used for identifying or selecting a key that is the subject of
   the thumbprint.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-isobe-cose-key-thumbprint-02'/>
   
</reference>


<reference anchor='I-D.ietf-suit-trust-domains'>
   <front>
      <title>SUIT Manifest Extensions for Multiple Trust Domains</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Ken Takayama' initials='K.' surname='Takayama'>
         <organization>SECOM CO., LTD.</organization>
      </author>
      <date day='7' month='July' year='2023'/>
      <abstract>
	 <t>   This specification describes extensions to the SUIT Manifest format
   (as defined in [I-D.ietf-suit-manifest]) for use in deployments with
   multiple trust domains.  A device has more than one trust domain when
   it enables delegation of different rights to mutually distrusting
   entities for use for different purposes or Components in the context
   of firmware or software update.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-trust-domains-04'/>
   
</reference>




    </references>

    <references title='Informative References'>



<reference anchor='RFC9019'>
  <front>
    <title>A Firmware Update Architecture for Internet of Things</title>
    <author fullname='B. Moran' initials='B.' surname='Moran'/>
    <author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'/>
    <author fullname='D. Brown' initials='D.' surname='Brown'/>
    <author fullname='M. Meriac' initials='M.' surname='Meriac'/>
    <date month='April' year='2021'/>
    <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='RFC9124'>
  <front>
    <title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title>
    <author fullname='B. Moran' initials='B.' surname='Moran'/>
    <author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'/>
    <author fullname='H. Birkholz' initials='H.' surname='Birkholz'/>
    <date month='January' year='2022'/>
    <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 lifetime requires such an update mechanism to fix vulnerabilities, update configuration settings, and add new functionality.</t>
      <t>One component of such a firmware update is a concise and machine-processable metadata 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='RFC' value='9124'/>
  <seriesInfo name='DOI' value='10.17487/RFC9124'/>
</reference>

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

<reference anchor='RFC5652'>
  <front>
    <title>Cryptographic Message Syntax (CMS)</title>
    <author fullname='R. Housley' initials='R.' surname='Housley'/>
    <date month='September' year='2009'/>
    <abstract>
      <t>This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='70'/>
  <seriesInfo name='RFC' value='5652'/>
  <seriesInfo name='DOI' value='10.17487/RFC5652'/>
</reference>

<reference anchor='RFC5280'>
  <front>
    <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
    <author fullname='D. Cooper' initials='D.' surname='Cooper'/>
    <author fullname='S. Santesson' initials='S.' surname='Santesson'/>
    <author fullname='S. Farrell' initials='S.' surname='Farrell'/>
    <author fullname='S. Boeyen' initials='S.' surname='Boeyen'/>
    <author fullname='R. Housley' initials='R.' surname='Housley'/>
    <author fullname='W. Polk' initials='W.' surname='Polk'/>
    <date month='May' year='2008'/>
    <abstract>
      <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='5280'/>
  <seriesInfo name='DOI' value='10.17487/RFC5280'/>
</reference>


<reference anchor="iana-suit" target="TBD">
  <front>
    <title>IANA SUIT Manifest Registry</title>
    <author >
      <organization>Internet Assigned Numbers Authority</organization>
    </author>
    <date year="2023"/>
  </front>
</reference>
<reference anchor="ROP" target="https://en.wikipedia.org/wiki/Return-oriented_programming">
  <front>
    <title>Return-Oriented Programming</title>
    <author >
      <organization>Wikipedia</organization>
    </author>
    <date year="2023" month="March"/>
  </front>
</reference>


    </references>


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

<t>We would like to thank Henk Birkholz for his feedback on the CDDL description in this document.
Additionally, we would like to thank Michael Richardson, Øyvind Rønningstad, Dave Thaler, Laurence
Lundblade, and Carsten Bormann for their review feedback. Finally, we would like to thank Dick Brooks for
making us aware of the challenges firmware encryption imposes on binary analysis.</t>

</section>


  </back>

<!-- ##markdown-source:
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
2QoT0Rboy7hK5E20+a2+QUn5/3UkV6ZrFdjjA7gdKan4HAFZmoruR7I1U6cH
FQrDOLxWy9JrslzLMgQFvPsHgeyO3tEHLNdSC7ZkkeLuB65fvfxQwPPLD4UM
kuPk8XXPDHkXv6rnvxTf/6X8/p3PC6xHHGA99/d/3/zuWNtbV/Nn+uqV+PPX
A/NeTnQVWFiLKWlgyNXLjCJP9xgF0HyZUYDFxYqZ0Bci7Ov45q50JpFwsUMD
k+tIRiFGMg/kBHAmeFZIxOckWHPDuhorUINTJWC+Oc/ccWZmMh6OrvCg92wD
dJC6yDdNBiVt3WD8zeVr8fbd5Yc+qPsvxt/Tr5WTV5ffPO8vx/1Xg1ffDHY/
fXP1qtmD798Mh/Lz7fj54Bvn1r+9HPT//Odlf/Of3//4n8Nvv3n5quV8QEV1
+OP3V/lfnjq9H79Zx7s/vU03o5fvfz5fhX95s3rXfz3s96/GUTL20+X2p596
f1p9+BQGndfJ+uann1523+U3lZO3T0G1+e672Wp+00/fZ4sX13k2/H786fbF
6zx9/fwvYe/NoPH66W3c/zbPfl6/8xqvmvmL8Du5tPHr0YGFWTmMdEFXtkli
8tNYZ39KxZ8pD2Anz4Io0B+G47eDl5dDG4yT69vx7ffPXyT/efnzj86w/+fv
L+XnUf/PsxEAbrz6kz/45qfmy59+urn6/sPs+3j7s/+ntP1TeD6eVk6mP5+v
m+mHKL78y/T2hdN5vtu8nPbXg1ez4Y9T/+d3bvPm/XL+8yL70+3k5fRV63qe
//zm5VUSLZ89swFRnpmEA1WELeRHXz3vo7xR5ybkPWeF+gosL02piLEtCfg2
FXOlyefHsvuaLFLHV37sk03hHm7i+ERDeCo8zfgCLr64Qvr2rJqsdqFnXU02
lrewFa460e6c0qUWeImd/KF4C5OeEMgJK51VVauX2comVznjUi3s7oQf5tKB
emZSX9GbYdDnXN23cwPW2SZQZ4zPhet0TuUtEUUHYg3PYaIKci68CyzcIxNC
zSd8hzeupk9f1EKq3lMDsXiOm4x7bAr16PYknC/sgjueO+m5I8dxOs1WdzQe
Od3xqD1sjNqDXr/d9ZqGF0/Gra7rOC2vN5o4rUmr1+wMRiN3Mpm0RpPBuKfy
AE15IZjyOWcQXwEXc63Fd08fUqlIliDSK5S1iDrw3/EVrVAfcb+7ptHBYkRc
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

-->

</rfc>

