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


<!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-23" 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 abbrev="H-BRS">University of Applied Sciences Bonn-Rhein-Sieg</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="2025" month="January" day="29"/>

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

    <abstract>


<?line 98?>

<t>This document specifies techniques for encrypting software, firmware,
machine learning models, 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 of the
plaintext is accomplished with conventional symmetric key cryptography.</t>



    </abstract>



  </front>

  <middle>


<?line 107?>

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

<t>Vulnerabilities in Internet of Things (IoT) devices have highlighted the need for a reliable and secure firmware update mechanism, especially for constrained devices. To protect firmware images, the SUIT manifest format was developed <xref target="I-D.ietf-suit-manifest"/>. A manifest is a bundle of metadata about the firmware for an IoT device, where to find the firmware, and the devices to which it applies. <xref target="RFC9124"/> outlines the necessary information a SUIT manifest has to provide. In addition to protecting against modification via digital signatures or message authentication codes, the format can also offer confidentiality.</t>

<t>Encryption prevents third parties, including attackers, from accessing the payload. Attackers often require detailed knowledge of a binary, such as a firmware image, to launch successful attacks. For instance, return-oriented programming (ROP) <xref target="ROP"/> requires access to the binary, and encryption makes writing exploits significantly more difficult. Beyond ensuring the confidentiality of the binary itself, protecting the confidentiality of the source code will also be necessary to prevent reverse engineering and reproduction of the firmware.</t>

<t>The initial motivation for this document was firmware encryption. However, the use of SUIT manifests has expanded to encompass other scenarios that require integrity and confidentiality protection, including:</t>

<t><list style="symbols">
  <t>Software packages</t>
  <t>Personalization and configuration data</t>
  <t>Machine learning models</t>
</list></t>

<t>These additional use cases stem from the work on Trusted Execution Environment Provisioning (TEEP), as detailed in <xref target="RFC9397"/> and <xref target="I-D.ietf-teep-usecase-for-cc-in-network"/>. The distinction between software and firmware is clarified in <xref target="RFC9019"/>.</t>

<t>For consistency and simplicity, we use the term "payload" generically to refer to all objects subject to encryption.</t>

<t>The payload is encrypted using a symmetric content encryption key, which can be established through various mechanisms. This document defines two content key distribution methods for use with the SUIT manifest:</t>

<t><list style="symbols">
  <t>Ephemeral-Static (ES) Diffie-Hellman (DH), and</t>
  <t>AES Key Wrap (AES-KW).</t>
</list></t>

<t>The first method relies on asymmetric cryptography, while the second uses symmetric cryptography.</t>

<t>Our design aims to reduce the number of content key distribution methods for payload encryption, thereby increasing interoperability between different SUIT manifest parser implementations. The mandatory-to-implement
algorithms are described in a separate document <xref target="I-D.ietf-suit-mti"/>.</t>

<t>The goal of this specification is to protect payloads both during end-to-end transport (from the distribution system to the device) and at rest when stored on the device. Constrained devices often employ eXecute In Place (XIP), a method of executing code directly from flash memory rather than loading it into RAM. Many of these devices lack hardware-based, on-the-fly decryption for code stored in flash memory, which may require decrypting and storing firmware images in on-chip flash before execution. However, we expect hardware-based, on-the-fly decryption to become more common in the future, enhancing confidentiality at rest.</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 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 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>
  <t>Authenticated Encryption with Associated Data (AEAD)</t>
  <t>Execute in Place (XIP)</t>
</list></t>

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

<t><list style="symbols">
  <t>Sender: Entity that sends an encrypted payload.</t>
  <t>Recipient: 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 payloads. It is important
to note that the distribution system is far more than a file server. For
use of encryption, the distribution system either knows the public key
of the recipient (for ES-DH), or the KEK (for AES-KW).</t>

<t>The author, which is responsible for creating the payload, does not
know the recipients. The author may, for example, be a developer building
a firmware image.</t>

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

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

<t><xref target="RFC9019"/> outlines the architecture for distributing payloads and manifests from an author to devices. However, it does not cover payload encryption in detail. This document extends that architecture to support encryption, as illustrated in <xref target="arch-fig"/>.</t>

<t>To encrypt a payload, it is essential to know the recipient. For AES-KW, the Key Encryption Key (KEK) must be known, and for ES-DH, the sender needs access to the recipient's public key. This public key and its associated parameters may be found in the recipient's X.509 certificate <xref target="RFC5280"/>. For authentication and integrity protection, recipients must be provisioned with a trust anchor when the manifest is protected by a digital signature. If a MAC is used for manifest protection, a symmetric key must be shared between the recipient and the sender.</t>

<t>With encryption, the author cannot simply create and sign a manifest for the payload, as the recipients are often unknown. Therefore, the author must collaborate with the distribution system. The degree of this collaboration is discussed below.</t>

<t>The primary purpose of encryption is to protect against adversaries along the path between the distribution system and the device. There is also a risk that adversaries may extract the decrypted firmware image from the device itself. Consequently, the device must be safeguarded against physical attacks. Such countermeasures are outside the scope of this specification.</t>

<t>Note: It is assumed that a mutually authenticated communication channel with integrity and confidentiality protection exists between the author and the distribution system. For example, the author could upload the manifest and firmware image to the distribution system via a mutually authenticated HTTPS REST API.</t>

<figure title="Architecture for the distribution of Encrypted Payloads." anchor="arch-fig"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="384" width="472" viewBox="0 0 472 384" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
<path d="M 8,32 L 8,96" fill="none" stroke="black"/>
<path d="M 8,160 L 8,224" fill="none" stroke="black"/>
<path d="M 8,288 L 8,352" fill="none" stroke="black"/>
<path d="M 96,32 L 96,96" fill="none" stroke="black"/>
<path d="M 96,160 L 96,224" fill="none" stroke="black"/>
<path d="M 96,288 L 96,352" fill="none" stroke="black"/>
<path d="M 128,64 L 128,320" fill="none" stroke="black"/>
<path d="M 328,160 L 328,208" fill="none" stroke="black"/>
<path d="M 344,48 L 344,80" fill="none" stroke="black"/>
<path d="M 384,80 L 384,152" fill="none" stroke="black"/>
<path d="M 432,48 L 432,80" fill="none" stroke="black"/>
<path d="M 448,160 L 448,208" fill="none" stroke="black"/>
<path d="M 8,32 L 96,32" fill="none" stroke="black"/>
<path d="M 344,48 L 432,48" fill="none" stroke="black"/>
<path d="M 104,64 L 128,64" fill="none" stroke="black"/>
<path d="M 344,80 L 432,80" fill="none" stroke="black"/>
<path d="M 8,96 L 96,96" fill="none" stroke="black"/>
<path d="M 8,160 L 96,160" fill="none" stroke="black"/>
<path d="M 328,160 L 448,160" fill="none" stroke="black"/>
<path d="M 104,192 L 328,192" fill="none" stroke="black"/>
<path d="M 328,208 L 448,208" fill="none" stroke="black"/>
<path d="M 8,224 L 96,224" fill="none" stroke="black"/>
<path d="M 8,288 L 96,288" fill="none" stroke="black"/>
<path d="M 104,320 L 128,320" fill="none" stroke="black"/>
<path d="M 8,352 L 96,352" fill="none" stroke="black"/>
<polygon class="arrowhead" points="392,152 380,146.4 380,157.6 " fill="black" transform="rotate(90,384,152)"/>
<polygon class="arrowhead" points="112,320 100,314.4 100,325.6 " fill="black" transform="rotate(180,104,320)"/>
<polygon class="arrowhead" points="112,192 100,186.4 100,197.6 " fill="black" transform="rotate(180,104,192)"/>
<polygon class="arrowhead" points="112,64 100,58.4 100,69.6 " fill="black" transform="rotate(180,104,64)"/>
<g class="text">
<text x="52" y="52">Device</text>
<text x="48" y="68">1</text>
<text x="388" y="68">Author</text>
<text x="424" y="116">Payload</text>
<text x="464" y="116">+</text>
<text x="428" y="132">Manifest</text>
<text x="52" y="180">Device</text>
<text x="176" y="180">Payload</text>
<text x="216" y="180">+</text>
<text x="260" y="180">Manifest</text>
<text x="388" y="180">Distribution</text>
<text x="48" y="196">2</text>
<text x="388" y="196">System</text>
<text x="56" y="260">...</text>
<text x="52" y="308">Device</text>
<text x="48" y="324">n</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
 +----------+
 |  Device  |                              +----------+
 |    1     |<--+                          |  Author  |
 |          |   |                          +----+-----+
 +----------+   |                               |
                |                               | Payload +
                |                               | Manifest
                |                               v
 +----------+   |                        +--------------+
 |  Device  |   |  Payload + Manifest    | Distribution |
 |    2     |<--+------------------------+    System    |
 |          |   |                        +--------------+
 +----------+   |
                |
      ...       |
                |
 +----------+   |
 |  Device  |   |
 |    n     |<--+
 |          |
 +----------+
]]></artwork></artset></figure>

<t>When the author delegates encryption rights to the distributor, two models are possible:</t>

<t><list style="numbers">
  <t>Replacing the COSE_Encrypt and Re-signing the Manifest:
The distributor replaces the COSE_Encrypt structure in the manifest and then signs the manifest again. However, since the COSE_Encrypt structure is within a signed container, this presents a challenge: replacing COSE_Encrypt alters the digest of the manifest, thereby invalidating the signature. As a result, the distributor must be able to sign the new manifest. If this is the case, the distributor gains the authority to construct and sign manifests, effectively allowing them to sign code and giving them full control over the recipient. Distributors typically perform re-encryption online to manage large numbers of devices efficiently, which prevents air-gapping the signing operations. This approach necessitates the secure storage of signing keys, as outlined in Section <xref target="RFC9124" section="4.3.17" sectionFormat="bare"/> and Section <xref target="RFC9124" section="4.3.18" sectionFormat="bare"/> of <xref target="RFC9124"/>. Despite these issues, this model represents the current standard practice for IoT firmware updates.</t>
  <t>Two-Layer Manifest System:
The distributor creates a new manifest that overrides the COSE_Encrypt using the dependency system defined in <xref target="I-D.ietf-suit-trust-domains"/>. This method introduces additional overhead, including one more signature verification, one extra manifest, and the need for extra mechanisms on the recipient side to handle dependency processing. While this adds complexity, it also enhances security.</t>
</list></t>

<t>These two models offer different threat profiles for the distributor. If the distributor is limited to encryption rights, an attacker who breaches the distributor can only launch a limited attack by encrypting a modified binary. However, recipients will detect the attack during the image digest check and immediately revert to the correct image.</t>

<t>It is RECOMMENDED that distributors adopt the two-layer manifest approach to distribute content encryption keys without re-signing the manifest, despite the added complexity and the increased number of signature verifications required on the recipient side.</t>

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

<t>Extending the SUIT manifest to support payload encryption requires minimal
changes and is achieved by adding the suit-parameter-encryption-info field
to the SUIT_Parameters structure, as illustrated in <xref target="parameter-fig"/>. When
the suit-parameter-encryption-info is included, the manifest processor will
attempt to decrypt data during copy or write operations.</t>

<t>The SUIT_Encryption_Info structure contains the content key distribution
information. The details of the SUIT_Encryption_Info structure are provided
in <xref target="AES-KW"/> (for AES-KW) and <xref target="ES-DH"/> (for ES-DH).</t>

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

suit-parameter-encryption-info = TBD19
]]></sourcecode></figure>

<t>RFC Editor's Note (TBD19): The value for the suit-parameter-encryption-info
parameter is set to 19, as the proposed value.</t>

<t>Once a CEK is available, the steps outlined in <xref target="content-enc"/> apply to both
content key distribution methods described in this section.</t>

<t>When used with the "Directive Write" and "Directive Copy" directives, the
SUIT_Encryption_Info structure MUST be included in either the
suit-directive-override-parameters or the suit-directive-set-parameters.
An implementation conforming to this specification MUST support both of these parameters.</t>

<section anchor="directive-write"><name>Directive Write</name>

<t>An author uses the Directive Write (suit-directive-write) to decrypt the content specified
by suit-parameter-content using suit-parameter-encryption-info. This directive is used to
write a specific data directly to a component.</t>

<t><xref target="encryption-info-consumed-with-write"/> illustrates an example of the Directive Write,
which is described in the CDDL in <xref target="parameter-fig"/>. The
encrypted payload specified by parameter-content, represented as h'EA1...CED'
in the example, is decrypted using the SUIT_Encryption_Info structure referenced
by parameter-encryption-info, i.e., h'D86...1F0' in L3. The resulting plaintext payload
is then stored in component #0, which is the default if no specific component is explicitly designated.</t>

<figure title="Example showing the extended suit-directive-write." anchor="encryption-info-consumed-with-write"><artwork><![CDATA[
/  1/  / directive-override-parameters / 20, {
/  2/    / parameter-content / 18: h'EA1...CED',
/  3/    / parameter-encryption-info / TBD19: h'D86...1F0'
/  4/  },
/  5/  / directive-write / 18, 15
]]></artwork></figure>

<t>RFC Editor's Note (TBD19): The value for the parameter-encryption-info
parameter is set to 19, as the proposed value.</t>

</section>
<section anchor="directive-copy"><name>Directive Copy</name>

<t>An author uses the Directive Copy (suit-directive-copy) to decrypt the content of the
component specified by suit-parameter-source-component using suit-parameter-encryption-info.
This directive is used to copy data from one component to another.</t>

<t><xref target="encryption-info-consumed-with-copy"/> illustrates the Directive Copy.
In this example the encrypted payload is found at the URI indicated
by the parameter-uri, i.e., "coaps://example.com/encrypted.bin" in L3. The
encrypted payload will be downloaded and stored in component #1,
as indicated by directive-set-component-index in L1.</t>

<t>Then, the information in the SUIT_Encryption_Info structure referred
to by parameter-encryption-info, i.e., h'D86...1F0' in L9, will be used to
decrypt the content in component #1 and the resulting plaintext
payload will be stored into component #0 (as set in L7).
The command in L12 invokes the operation.</t>

<figure title="Example showing the extended suit-directive-copy." anchor="encryption-info-consumed-with-copy"><artwork><![CDATA[
/  1/  / directive-set-component-index / 12, 1,
/  2/  / directive-override-parameters / 20, {
/  3/    / parameter-uri / 21: "coaps://example.com/encrypted.bin",
/  4/   },
/  5/  / directive-fetch / 21, 15,
/  6/
/  7/  / directive-set-component-index / 12, 0,
/  8/  / directive-override-parameters / 20, {
/  9/    / parameter-encryption-info / TBD19: h'D86...1F0',
/ 10/    / parameter-source-component / 22: 1
/ 11/  },
/ 12/  / directive-copy / 22, 15
]]></artwork></figure>

<t>RFC Editor's Note (TBD19): The value for the suit-parameter-encryption-info
parameter is set to 19, as the proposed value.</t>

</section>
<section anchor="authenticating-the-payload"><name>Authenticating the Payload</name>

<t>The payload to be encrypted MAY be detached and, in that case, it is
not covered by the digital signature or the MAC protecting the manifest.
(To be more precise, the suit-authentication-wrapper found in the envelope
contains a digest of the manifest in the SUIT Digest Container.)</t>

<t>The lack of authentication and integrity protection of the payload is
particularly a concern when a cipher without integrity protection is
used.</t>

<t>To provide authentication and integrity protection of the payload
in the detached case a SUIT Digest Container with the hash
of the encrypted and/or plaintext payload MUST be included in the
manifest. See suit-parameter-image-digest parameter in <xref section="8.4.8.6" sectionFormat="of" target="I-D.ietf-suit-manifest"/>.</t>

<t>Once a CEK is available, the steps described in <xref target="content-enc"/> are applicable.
These steps apply to both content key distribution methods.</t>

<t>More detailed examples for the two directives can be found in <xref target="example-AES-KW-write"/>.</t>

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

<t>The following sub-sections describe two content key distribution methods:
AES Key Wrap (AES-KW) and Ephemeral-Static Diffie-Hellman (ES-DH). While
many other methods are specified in the literature and supported by COSE,
AES-KW and ES-DH were chosen for their widespread use in the market today.
They were selected for their maturity, differing security properties, and
strong interoperability.</t>

<t>Interoperability requirements for content key distribution methods differ:
since a device typically supports only one of the two specified methods,
the distribution system must be aware of the supported method.
Restricting a constrained device to a single content key distribution
method also helps minimize code size.</t>

<t>Both content key distribution methods require the CEKs to be randomly
generated. The guidelines for random number generation in <xref target="RFC8937"/>
MUST be followed.</t>

<t>When sending an encrypted payload to multiple recipients, various
deployment options are available. The following notation is used to
explain these options:</t>

<figure><artwork><![CDATA[
  - KEK[R1, S] refers to a KEK shared between recipient R1 and
    the sender S.
  - CEK[R1, S] refers to a CEK shared between R1 and S.
  - CEK[*, S] or KEK[*, 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.
  - ENC(plaintext, k) refers to the encryption of plaintext with
    a key k.
]]></artwork></figure>

<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, as described in <xref target="RFC3394"/>,
is 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 <xref section="8.5.2" sectionFormat="of" target="RFC9052"/> and in <xref section="6.2.1" sectionFormat="of" target="RFC9053"/>. The encrypted CEK is carried within the COSE_recipient structure
, which includes the necessary information for AES-KW. The COSE_recipient structure,
a substructure of COSE_Encrypt, contains the CEK
encrypted by the KEK.</t>

<t>To ensure high security when using AES Key Wrap, it is important that the
KEK is of high entropy and that implementations protect the KEK
from disclosure. A compromised KEK could expose all data encrypted with it,
including binaries and configuration data.</t>

<t>The COSE_Encrypt structure conveys the information needed to encrypt the payload,
including details such as the algorithm and IV. Even though the payload may
be conveyed as detached content, the encryption information is still embedded
in the COSE_Encrypt.ciphertext structure.</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 recipients (typically of the same product family) share the same KEK,
a single COSE_recipient structure contains the encrypted CEK. The sender executes
the following steps:</t>
</list></t>

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

<t>This deployment option is strongly discouraged. An attacker gaining access to
the KEK will be able to encrypt and send payloads to all recipients configured
to use this KEK.</t>

<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[
    1.  Generate CEK
    2.  for i=1 to n
        {
    2a.    Fetch KEK[Ri, S]
    2b.    ENC(CEK, KEK[Ri, S])
        }
    3.  ENC(payload, CEK)
]]></artwork></figure>

<t><list style="symbols">
  <t>The third option is to use different CEKs encrypted with KEKs of
authorized recipients. This approach is appropriate when no benefits can
be gained from encrypting and transmitting payloads only once. Assume there
are n recipients with their unique KEKs - KEK[R1, S], ..., KEK[Rn, S] and
unique CEKs. The sender needs to execute the following steps:</t>
</list></t>

<figure><artwork><![CDATA[
    1.  for i=1 to n
        {
    1a.    Fetch KEK[Ri, S]
    1b.    Generate CEK[Ri, S]
    1c.    ENC(CEK[Ri, S], KEK[Ri, S])
    1d.    ENC(payload, CEK[Ri, S])
    2.  }
]]></artwork></figure>

</section>
<section anchor="the-cddl-of-suitencryptioninfo-for-aes-kw-binary"><name>The CDDL of SUIT_Encryption_Info for AES-KW binary</name>

<t>The CDDL for the AES-KW binary is shown in <xref target="cddl-aeskw"/>.
empty_or_serialized_map and header_map are structures defined in <xref target="RFC9052"/>.</t>

<figure title="CDDL for AES-KW-based Content Key Distribution" anchor="cddl-aeskw"><sourcecode type="cddl"><![CDATA[
SUIT_Encryption_Info_AESKW = #6.96([
  protected   : outer_header_map_protected,
  unprotected : outer_header_map_unprotected,
  ciphertext  : bstr / nil,
  recipients  : [ + COSE_recipient_AESKW ]
])

outer_header_map_protected = empty_or_serialized_map
outer_header_map_unprotected = header_map

COSE_recipient_AESKW = [
  protected   : bstr .size 0 / bstr .cbor empty_map,
  unprotected : recipient_header_unpr_map_aeskw,
  ciphertext  : bstr        ; CEK encrypted with KEK
]

empty_map = {}

recipient_header_unpr_map_aeskw =
{
  ? 1 => int / tstr,  ; content encryption algorithm identifier
  ? 4 => bstr,        ; identifier of the KEK
                      ; pre-shared with the recipient
  * label => values   ; extension point
}
]]></sourcecode></figure>

<t>Note that the AES-KW algorithm, as defined in <xref section="2.2.3.1" sectionFormat="of" 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>

</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 public key encryption scheme
that enables encryption using the recipient's public key. There are several
variations of this scheme; this document adopts the version specified in
<xref section="8.5.5" sectionFormat="of" target="RFC9052"/>.</t>

<t>The structure is composed of two layers:</t>

<t><list style="symbols">
  <t>Layer 0: Contains content encrypted with a Content Encryption Key (CEK).
The content may be provided separately.</t>
  <t>Layer 1: Uses the AES Key Wrap (AES-KW) algorithm to encrypt the randomly
generated CEK with a Key Encryption Key (KEK) derived via ES-DH. The
resulting symmetric key is processed through an HKDF-based key derivation
function <xref target="RFC5869"/>.</t>
</list></t>

<t>This two-layer structure combines ES-DH with AES-KW and HKDF, referred to
as ECDH-ES + AES-KW. An example can be found in <xref target="esdh-aesgcm-example"/>.</t>

<t>Another variant of the ES-DH algorithm, called ECDH-ES + HKDF, does not
utilize AES Key Wrap. However, this version is not covered in this document.</t>

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

<t>This approach supports only two deployment options, as it assumes that each
recipient is always equipped with a device-specific public/private key pair.</t>

<t><list style="symbols">
  <t>When a sender transmits a payload to multiple recipients, all recipients
receive the same encrypted payload, meaning the same CEK is used to encrypt
the content. For each recipient, a separate COSE_recipient structure is used,
which contains the CEK encrypted with the recipient-specific KEK. To derive
the KEK, each COSE_recipient structure includes a COSE_recipient_inner
structure that carries the sender's ephemeral key and an identifier for the
recipient's public key.</t>
</list></t>

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

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

<t><list style="symbols">
  <t>The alternative is to encrypt each device specific payload with a unique content encryption
key (CEK), resulting in a manifest per device specific payload. his approach is useful when payloads contain
device-specific information or when the optimization in previous approach are not applicable
or not valuable enough. In this case, the encryption operation becomes
ENC(payload_i, CEK[Ri, S]) where each recipient Ri receives a unique CEK. Assume
that KEK[R1, S],..., KEK[Rn, S] have been generated for the recipients using ES-DH.
The sender must then follow these steps:</t>
</list></t>

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

</section>
<section anchor="the-cddl-of-suitencryptioninfo-for-es-dh-binary"><name>The CDDL of SUIT_Encryption_Info for ES-DH binary</name>

<t>The CDDL for the ECDH-ES+AES-KW binary is provided in <xref target="cddl-esdh"/>.
Only the essential parameters are included. The structures empty_or_serialized_map
and header_map are defined in <xref target="RFC9052"/>.</t>

<figure title="CDDL for ES-DH-based Content Key Distribution" anchor="cddl-esdh"><sourcecode type="cddl"><![CDATA[
SUIT_Encryption_Info_ESDH = #6.96([
  protected   : outer_header_map_protected,
  unprotected : outer_header_map_unprotected,
  ciphertext  : bstr / nil,
  recipients  : [ + COSE_recipient_ESDH ]
])

outer_header_map_protected = empty_or_serialized_map
outer_header_map_unprotected = header_map

COSE_recipient_ESDH = [
  protected   : bstr .cbor recipient_header_map_esdh,
  unprotected : recipient_header_unpr_map_esdh,
  ciphertext  : bstr        ; CEK encrypted with KEK
]

recipient_header_map_esdh =
{
  ?  1 => int / tstr, ; content encryption algorithm identifier
  * label => values   ; extension point
}

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

<t>See <xref target="content-enc"/> for a description on how to encrypt the payload.</t>

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

<t>The context information structure ensures that the derived keying material
is "bound" to the specific context of the transaction. This specification
reuses the structure defined in <xref section="5.2" sectionFormat="of" target="RFC9053"/>, with modifications
to fit the current use case.</t>

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

<t><list style="symbols">
  <t>the protocol employing the key-derivation method,</t>
  <t>information about the utilized AES Key Wrap algorithm, and the key length.</t>
  <t>the protected header field, which contains the content key encryption algorithm.</t>
</list></t>

<t>The sender and recipient identities are left empty.</t>

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

<t><list style="symbols">
  <t>The COSE_KDF_Context.AlgorithmID field MUST contain the identifier for the
AES Key Wrap algorithm being used. This specification uses the following
values: A128KW (value -3), A192KW (value -4), or A256KW (value -5)</t>
  <t>The COSE_KDF_Context.SuppPubInfo.keyDataLength field MUST specify the key
length, in bits, corresponding to the algorithm in the AlgorithmID field.
For A128KW the value is 128, for A192KW the value is 192, and for A256KW
the value 256.</t>
  <t>The COSE_KDF_Context.SuppPubInfo.other field captures the protocol that
uses the ES-DH content key distribution algorithm. It MUST be set to
the constant string "SUIT Payload Encryption".</t>
  <t>The COSE_KDF_Context.SuppPubInfo.protected field MUST contain the serialized
content of the recipient_header_map_esdh field, which contains (among other
elements) the identifier of the content key distribution method.</t>
</list></t>

<figure title="CDDL for COSE_KDF_Context Structure" anchor="cddl-context-info"><sourcecode type="cddl"><![CDATA[
COSE_KDF_Context = [
    AlgorithmID : int,
    PartyUInfo : [ PartyInfoSender ],
    PartyVInfo : [ PartyInfoRecipient ],
    SuppPubInfo : [
        keyDataLength : uint,
        protected : bstr,
        other: 'SUIT Payload Encryption'
    ],
    ? SuppPrivInfo : bstr
]

PartyInfoSender = (
    identity : nil,
    nonce : nil,
    other : nil
)

PartyInfoRecipient = (
    identity : nil,
    nonce : nil,
    other : nil
)
]]></sourcecode></figure>

<t>The HKDF-based key derivation function MAY contain a salt value,
as described in <xref section="5.1" sectionFormat="of" target="RFC9053"/>. This optional value
influences the key generation process, though this specification
does not require the use of a salt.  If the salt is public and
included in the message, the "salt" algorithm header parameter
MUST be used. The salt adds extra randomness to the KDF context.
When the salt is transmitted via the "salt" algorithm header
parameter, the receiver MUST be capable of processing it and MUST
pass it into the key derivation function. For more details on salt
usage, refer to <xref target="RFC5869"/> and NIST SP800-56 <xref target="SP800-56"/>.</t>

<t>Profiles of this specification MAY define an extended version of
the context information structure or MAY employ a different context
information structure.</t>

</section>
</section>
</section>
<section anchor="content-enc"><name>Content Encryption</name>

<t>This section summarizes the steps involved in content encryption,
applicable to both content key distribution methods.</t>

<t>When using AEAD ciphers, such as AES-GCM or ChaCha20/Poly1305, the
COSE specification requires a consistent byte stream to create the
authenticated data structure. This structure is illustrated in
<xref target="cddl-enc-aeskw"/> and defined in <xref section="5.3" sectionFormat="of" target="RFC9052"/>.</t>

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

<t>This Enc_structure must be populated as follows:</t>

<t><list style="symbols">
  <t>The protected field in the Enc_structure from <xref target="cddl-enc-aeskw"/> refers
to the content of the protected field in the COSE_Encrypt structure.</t>
  <t>The value of external_aad MUST be set to a zero-length byte string,
 represented as h'' in diagnostic notation and encoded as 0x40.</t>
</list></t>

<t>Some ciphers, such as AES-CTR and AES-CBC, provide confidentiality
without integrity protection (see <xref target="RFC9459"/>). For these ciphers,
the Enc_structure shown in <xref target="cddl-enc-aeskw"/> cannot be used, as
the Additional Authenticated Data (AAD) byte string is only
applicable to AEAD ciphers. Therefore, the AAD structure is not
passed to the API for these ciphers, and the protected header in
the SUIT_Encryption_Info structure MUST be a zero-length byte string.</t>

<t>AES-CTR and AES-CBC are discussed in separate sub-sections below and
<xref target="aes-ctr-fig"/> and <xref target="aes-cbc-fig"/> use the following abbreviations:</t>

<t><list style="symbols">
  <t>Pi = Plaintext blocks</t>
  <t>Ci = Ciphertext blocks</t>
  <t>E = Encryption function</t>
  <t>k = Symmetric key</t>
  <t>⊕ = XOR operation</t>
</list></t>

<section anchor="aes-gcm"><name>AES-GCM</name>

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

<t>AES-GCM is an AEAD cipher and provides confidentiality and integrity protection.</t>

<t>Examples in this section use the following parameters:</t>

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-GCM-128
  <list style="symbols">
      <t>k: h'15F785B5C931414411B4B71373A9C0F7'</t>
      <t>IV: h'F14AAB9D81D51F7AD943FE87AF4F70CD'</t>
    </list></t>
  <t>Plaintext: "This is a real firmware image."
  <list style="symbols">
      <t>in hex: 546869732069732061207265616C206669726D7761726520696D6167652E</t>
    </list></t>
</list></t>

</section>
<section anchor="aes-kw-aes-gcm-example"><name>AES-KW + AES-GCM Example</name>

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

<t><list style="symbols">
  <t>Algorithm id for key wrap: A128KW</t>
  <t>KEK COSE_Key (Secret Key):
  <list style="symbols">
      <t>kty: Symmetric</t>
      <t>k: 'aaaaaaaaaaaaaaaa'</t>
      <t>kid: 'kid-1'</t>
    </list></t>
</list></t>

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

<figure><sourcecode type="cbor-pretty"><![CDATA[
D8608443A10101A1054CF14AAB9D81D51F7AD943FE87F6818340A2012204
456B69642D31581875603FFC9518D794713C8CA8A115A7FB32565A6D5953
4D62
]]></sourcecode></figure>

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

<figure title="COSE_Encrypt Example for AES Key Wrap" anchor="aeskw-aesgcm-example"><sourcecode type="cbor-diag"><![CDATA[
96([
  / protected: / << {
    / alg / 1: 1 / A128GCM /
  } >>,
  / unprotected: / {
    / IV / 5: h'F14AAB9D81D51F7AD943FE87'
  },
  / ciphertext: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / h'',
      / unprotected: / {
        / alg / 1: -3 / A128KW /,
        / kid / 4: 'kid-1'
      },
      / ciphertext: /
        h'75603FFC9518D794713C8CA8A115A7FB32565A6D59534D62'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></sourcecode></figure>

<t>The encrypted payload (with a line feed added) was:</t>

<figure><sourcecode type="test-vectors"><![CDATA[
758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4BD6D7ED26AB32F
EB063385D4D3465927EC82CB5E198A59
]]></sourcecode></figure>

</section>
<section anchor="ecdh-esaes-kw-aes-gcm-example"><name>ECDH-ES+AES-KW + AES-GCM Example</name>

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

<t><list style="symbols">
  <t>Algorithm for content key distribution: ECDH-ES + A128KW</t>
  <t>KEK COSE_Key (Receiver's Private Key):
  <list style="symbols">
      <t>kty: EC2</t>
      <t>crv: P-256</t>
      <t>x: h'5886CD61DD875862E5AAA820E7A15274C968A9BC96048DDCACE32F50C3651BA3'</t>
      <t>y: h'9EED8125E932CD60C0EAD3650D0A485CF726D378D1B016ED4298B2961E258F1B'</t>
      <t>d: h'60FE6DD6D85D5740A5349B6F91267EEAC5BA81B8CB53EE249E4B4EB102C476B3'</t>
      <t>kid: 'kid-2'</t>
    </list></t>
  <t>KDF Context
  <list style="symbols">
      <t>Algorithm ID: -3 (A128KW)</t>
      <t>SuppPubInfo
      <list style="symbols">
          <t>keyDataLength: 128</t>
          <t>protected: &lt;&lt; { / alg / 1: -29 / ECDH-ES+A128KW / } &gt;&gt;</t>
          <t>other: 'SUIT Payload Encryption'</t>
        </list></t>
    </list></t>
</list></t>

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

<figure><sourcecode type="cbor-pretty"><![CDATA[
D8608443A10101A1054CF14AAB9D81D51F7AD943FE87F6818344A101381C
A120A40102200121582073024F415AA51529A66CCEFD88F3F62A734492FF
45F6AD37FD2888E73EAF19DA2258204005B48A6FD091AA6ABFE3CFBEEDE8
8B347E521D43405FDBD7D2CFF0EBC21B265818A06B8E6550F308712B1DF0
44B21B7D11D9B22792F1DE0997
]]></sourcecode></figure>

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

<figure title="COSE_Encrypt Example for ES-DH" anchor="esdh-aesgcm-example"><sourcecode type="cbor-diag"><![CDATA[
96([
  / protected: / << {
    / alg / 1: 1 / A128GCM /
  } >>,
  / unprotected: / {
    / IV / 5: h'F14AAB9D81D51F7AD943FE87'
  },
  / ciphertext: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / << {
        / alg / 1: -29 / ECDH-ES + A128KW /
      } >>,
      / unprotected: / {
        / ephemeral key / -1: {
          / kty / 1: 2 / EC2 /,
          / crv / -1: 1 / P-256 /,
          / x / -2: h'73024F415AA51529A66CCEFD88F3F62A
                      734492FF45F6AD37FD2888E73EAF19DA',
          / y / -3: h'4005B48A6FD091AA6ABFE3CFBEEDE88B
                      347E521D43405FDBD7D2CFF0EBC21B26'
        }
      },
      / ciphertext: /
        h'A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE0997'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></sourcecode></figure>

<t>The encrypted payload (with a line feed added) was:</t>

<figure><sourcecode type="test-vectors"><![CDATA[
758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4BD6D7ED26AB32F
EB063385D4D3465927EC82CB5E198A59
]]></sourcecode></figure>

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

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

<t>AES-CTR is a non-AEAD cipher that provides confidentiality but lacks integrity protection.
Unlike AES-CBC, AES-CTR uses an IV per block, 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>In our example, we assume the slot size of a specific flash controller on an IoT device
is 64 KiB, the sector size 4096 bytes (4 KiB) and an AES plaintext block size of 16 bytes,
the IVs range from 0 to 255 in the first sector, and 16 * 256 IVs are required for the
remaining sectors in the slot.</t>

<figure title="AES-CTR Operation" anchor="aes-ctr-fig"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="288" width="224" viewBox="0 0 224 288" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
<path d="M 32,96 L 32,176" fill="none" stroke="black"/>
<path d="M 64,48 L 64,96" fill="none" stroke="black"/>
<path d="M 64,176 L 64,192" fill="none" stroke="black"/>
<path d="M 64,224 L 64,240" fill="none" stroke="black"/>
<path d="M 96,96 L 96,176" fill="none" stroke="black"/>
<path d="M 152,96 L 152,176" fill="none" stroke="black"/>
<path d="M 184,48 L 184,96" fill="none" stroke="black"/>
<path d="M 184,176 L 184,192" fill="none" stroke="black"/>
<path d="M 184,224 L 184,240" fill="none" stroke="black"/>
<path d="M 216,96 L 216,176" fill="none" stroke="black"/>
<path d="M 32,96 L 96,96" fill="none" stroke="black"/>
<path d="M 152,96 L 216,96" fill="none" stroke="black"/>
<path d="M 16,144 L 32,144" fill="none" stroke="black"/>
<path d="M 136,144 L 152,144" fill="none" stroke="black"/>
<path d="M 32,176 L 96,176" fill="none" stroke="black"/>
<path d="M 152,176 L 216,176" fill="none" stroke="black"/>
<path d="M 40,208 L 56,208" fill="none" stroke="black"/>
<path d="M 160,208 L 176,208" fill="none" stroke="black"/>
<g class="text">
<text x="64" y="36">IV1</text>
<text x="184" y="36">IV2</text>
<text x="8" y="148">k</text>
<text x="64" y="148">E</text>
<text x="128" y="148">k</text>
<text x="184" y="148">E</text>
<text x="28" y="212">P1</text>
<text x="64" y="212">⊕</text>
<text x="148" y="212">P2</text>
<text x="184" y="212">⊕</text>
<text x="68" y="260">C1</text>
<text x="188" y="260">C2</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
         IV1            IV2
          |              |
          |              |
          |              |
      +---+---+      +---+---+
      |       |      |       |
      |       |      |       |
   k--+   E   |   k--+   E   |
      |       |      |       |
      +---+---+      +---+---+
          |              |
     P1---⊕         P2---⊕
          |              |
          |              |
          C1             C2
]]></artwork></artset></figure>

<t>Note: The abbreviations shown in <xref target="aes-ctr-fig"/> are described
in <xref target="content-enc"/>.</t>

<t>Examples in this section use the following parameters:</t>

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-CTR-128
  <list style="symbols">
      <t>k: h'261DE6165070FB8951EC5D7B92A065FE'</t>
      <t>IV: h'DAE613B2E0DC55F4322BE38BDBA9DC68'</t>
    </list></t>
  <t>Plaintext: "This is a real firmware image."
  <list style="symbols">
      <t>in hex: 546869732069732061207265616C206669726D7761726520696D6167652E</t>
    </list></t>
</list></t>

</section>
<section anchor="aes-kw-aes-ctr-example"><name>AES-KW + AES-CTR Example</name>

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

<t><list style="symbols">
  <t>Algorithm id for key wrap: A128KW</t>
  <t>KEK COSE_Key (Secret Key):
  <list style="symbols">
      <t>kty: Symmetric</t>
      <t>k: 'aaaaaaaaaaaaaaaa'</t>
      <t>kid: 'kid-1'</t>
    </list></t>
</list></t>

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

<figure><sourcecode type="cbor-pretty"><![CDATA[
D8608440A20139FFFD0550DAE613B2E0DC55F4322BE38BDBA9DC68F68183
40A2012204456B69642D315818CE34035CE5C2E2666E46D4C131FC561DD1
90A6D26CFA1990
]]></sourcecode></figure>

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

<figure title="COSE_Encrypt Example for AES Key Wrap" anchor="aeskw-aesctr-example"><sourcecode type="cbor-diag"><![CDATA[
96([
  / protected: / h'',
  / unprotected: / {
    / alg / 1: -65534 / A128CTR /,
    / IV / 5: h'DAE613B2E0DC55F4322BE38BDBA9DC68'
  },
  / ciphertext: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / h'',
      / unprotected: / {
        / alg / 1: -3 / A128KW /,
        / kid / 4: 'kid-1'
      },
      / ciphertext: /
        h'CE34035CE5C2E2666E46D4C131FC561DD190A6D26CFA1990'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></sourcecode></figure>

<t>The encrypted payload (with a line feed added) was:</t>

<figure><sourcecode type="test-vectors"><![CDATA[
2BB8DB522AE978246CC775C3B0241BD4B0333FFDD2DB70C7EE7A4966E3B7
]]></sourcecode></figure>

</section>
<section anchor="ecdh-esaes-kw-aes-ctr-example"><name>ECDH-ES+AES-KW + AES-CTR Example</name>

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

<t><list style="symbols">
  <t>Algorithm for content key distribution: ECDH-ES + A128KW</t>
  <t>KEK COSE_Key (Receiver's Private Key):
  <list style="symbols">
      <t>kty: EC2</t>
      <t>crv: P-256</t>
      <t>x: h'5886CD61DD875862E5AAA820E7A15274C968A9BC96048DDCACE32F50C3651BA3'</t>
      <t>y: h'9EED8125E932CD60C0EAD3650D0A485CF726D378D1B016ED4298B2961E258F1B'</t>
      <t>d: h'60FE6DD6D85D5740A5349B6F91267EEAC5BA81B8CB53EE249E4B4EB102C476B3'</t>
      <t>kid: 'kid-2'</t>
    </list></t>
  <t>KDF Context
  <list style="symbols">
      <t>Algorithm ID: -3 (A128KW)</t>
      <t>SuppPubInfo
      <list style="symbols">
          <t>keyDataLength: 128</t>
          <t>protected: &lt;&lt; { / alg / 1: -29 / ECDH-ES+A128KW / } &gt;&gt;</t>
          <t>other: 'SUIT Payload Encryption'</t>
        </list></t>
    </list></t>
</list></t>

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

<figure><sourcecode type="cbor-pretty"><![CDATA[
D8608440A20139FFFD0550DAE613B2E0DC55F4322BE38BDBA9DC68F68183
44A101381CA120A401022001215820EE0718F6B019C29CC611C18CEDE221
4066DDCEDC2F0DBEF873CB224C715C1174225820279F2A88E4AB9E2ED30C
0FCB69515B31B5D36725BFDB9AE02032ED4D5AB52CB85818E28B4502E4F5
151884A995405579006E9465C3E94E3E0808
]]></sourcecode></figure>

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

<figure title="COSE_Encrypt Example for ES-DH" anchor="esdh-aesctr-example"><sourcecode type="cbor-diag"><![CDATA[
96([
  / protected: / h'',
  / unprotected: / {
    / alg / 1: -65534 / A128CTR /,
    / IV / 5: h'DAE613B2E0DC55F4322BE38BDBA9DC68'
  },
  / ciphertext: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / << {
        / alg / 1: -29 / ECDH-ES + A128KW /
      } >>,
      / unprotected: / {
        / ephemeral key / -1: {
          / kty / 1: 2 / EC2 /,
          / crv / -1: 1 / P-256 /,
          / x / -2: h'EE0718F6B019C29CC611C18CEDE22140
                      66DDCEDC2F0DBEF873CB224C715C1174',
          / y / -3: h'279F2A88E4AB9E2ED30C0FCB69515B31
                      B5D36725BFDB9AE02032ED4D5AB52CB8'
        }
      },
      / ciphertext: /
        h'E28B4502E4F5151884A995405579006E9465C3E94E3E0808'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></sourcecode></figure>

<t>The encrypted payload (with a line feed added) was:</t>

<figure><sourcecode type="test-vectors"><![CDATA[
2BB8DB522AE978246CC775C3B0241BD4B0333FFDD2DB70C7EE7A4966E3B7
]]></sourcecode></figure>

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

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

<t>AES-CBC is a non-AEAD cipher that provides confidentiality but does not offer
integrity protection.
In AES-CBC, a single IV is used to  encrypt the firmware belonging to a single sector,
as  individual AES blocks are chained together, as illustrated  in <xref target="aes-cbc-fig"/>. The
numbering  of sectors in a slot start with zero (0) and 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 occupies the entire slot, it will contain 16 sectors, corresponding
to IVs ranging from 0 to 15.</t>

<figure title="AES-CBC Operation" anchor="aes-cbc-fig"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="304" width="224" viewBox="0 0 224 304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
<path d="M 32,112 L 32,192" fill="none" stroke="black"/>
<path d="M 64,80 L 64,112" fill="none" stroke="black"/>
<path d="M 64,192 L 64,256" fill="none" stroke="black"/>
<path d="M 96,112 L 96,192" fill="none" stroke="black"/>
<path d="M 112,64 L 112,224" fill="none" stroke="black"/>
<path d="M 152,112 L 152,192" fill="none" stroke="black"/>
<path d="M 184,80 L 184,112" fill="none" stroke="black"/>
<path d="M 184,192 L 184,256" fill="none" stroke="black"/>
<path d="M 216,112 L 216,192" fill="none" stroke="black"/>
<path d="M 40,64 L 56,64" fill="none" stroke="black"/>
<path d="M 112,64 L 176,64" fill="none" stroke="black"/>
<path d="M 32,112 L 96,112" fill="none" stroke="black"/>
<path d="M 152,112 L 216,112" fill="none" stroke="black"/>
<path d="M 16,160 L 32,160" fill="none" stroke="black"/>
<path d="M 136,160 L 152,160" fill="none" stroke="black"/>
<path d="M 32,192 L 96,192" fill="none" stroke="black"/>
<path d="M 152,192 L 216,192" fill="none" stroke="black"/>
<path d="M 64,224 L 112,224" fill="none" stroke="black"/>
<g class="text">
<text x="68" y="36">P1</text>
<text x="188" y="36">P2</text>
<text x="64" y="52">|</text>
<text x="184" y="52">|</text>
<text x="28" y="68">IV</text>
<text x="64" y="68">⊕</text>
<text x="184" y="68">⊕</text>
<text x="8" y="164">k</text>
<text x="64" y="164">E</text>
<text x="128" y="164">k</text>
<text x="184" y="164">E</text>
<text x="68" y="276">C1</text>
<text x="188" y="276">C2</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
        P1             P2
        |              |
   IV---⊕     +--------⊕
        |     |        |
        |     |        |
    +---+---+ |    +---+---+
    |       | |    |       |
    |       | |    |       |
 k--+   E   | | k--+   E   |
    |       | |    |       |
    +---+---+ |    +---+---+
        |     |        |
        +-----+        |
        |              |
        |              |
        C1             C2
]]></artwork></artset></figure>

<t>Note: The abbreviations shown in <xref target="aes-cbc-fig"/> are described
in <xref target="content-enc"/>.</t>

<t>Examples in this section use the following parameters:</t>

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-CBC-128
  <list style="symbols">
      <t>k: h'627FCF0EA82C967D5ED8981EB325F303'</t>
      <t>IV: h'93702C81590F845D9EC866CCAC767BD1'</t>
    </list></t>
  <t>Plaintext: "This is a real firmware image."
  <list style="symbols">
      <t>in hex: 546869732069732061207265616C206669726D7761726520696D6167652E</t>
    </list></t>
</list></t>

</section>
<section anchor="aes-kw-aes-cbc-example"><name>AES-KW + AES-CBC Example</name>

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

<t><list style="symbols">
  <t>Algorithm id for key wrap: A128KW</t>
  <t>KEK COSE_Key (Secret Key):
  <list style="symbols">
      <t>kty: Symmetric</t>
      <t>k: 'aaaaaaaaaaaaaaaa'</t>
      <t>kid: 'kid-1'</t>
    </list></t>
</list></t>

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

<figure><sourcecode type="cbor-pretty"><![CDATA[
D8608440A20139FFFA055093702C81590F845D9EC866CCAC767BD1F68183
40A2012204456B69642D315818E198FF269626EC43299D33586FC7B2646B
13292261160422
]]></sourcecode></figure>

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

<figure title="COSE_Encrypt Example for AES Key Wrap" anchor="aeskw-aescbc-example"><sourcecode type="cbor-diag"><![CDATA[
96([
  / protected: / h'',
  / unprotected: / {
    / alg / 1: -65531 / A128CBC /,
    / IV / 5: h'93702C81590F845D9EC866CCAC767BD1'
  },
  / ciphertext: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / h'',
      / unprotected: / {
        / alg / 1: -3 / A128KW /,
        / kid / 4: 'kid-1'
      },
      / ciphertext: /
        h'E198FF269626EC43299D33586FC7B2646B13292261160422'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></sourcecode></figure>

<t>The encrypted payload (with a line feed added) was:</t>

<figure><sourcecode type="test-vectors"><![CDATA[
9C09156CF4ACE0401086D98586E0B09FA5B5CF78F2BCCBF6C914DDB42BF0
E21E
]]></sourcecode></figure>

</section>
<section anchor="ecdh-esaes-kw-aes-cbc-example"><name>ECDH-ES+AES-KW + AES-CBC Example</name>

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

<t><list style="symbols">
  <t>Algorithm for content key distribution: ECDH-ES + A128KW</t>
  <t>KEK COSE_Key (Receiver's Private Key):
  <list style="symbols">
      <t>kty: EC2</t>
      <t>crv: P-256</t>
      <t>x: h'5886CD61DD875862E5AAA820E7A15274C968A9BC96048DDCACE32F50C3651BA3'</t>
      <t>y: h'9EED8125E932CD60C0EAD3650D0A485CF726D378D1B016ED4298B2961E258F1B'</t>
      <t>d: h'60FE6DD6D85D5740A5349B6F91267EEAC5BA81B8CB53EE249E4B4EB102C476B3'</t>
      <t>kid: 'kid-2'</t>
    </list></t>
  <t>KDF Context
  <list style="symbols">
      <t>Algorithm ID: -3 (A128KW)</t>
      <t>SuppPubInfo
      <list style="symbols">
          <t>keyDataLength: 128</t>
          <t>protected: &lt;&lt; { / alg / 1: -29 / ECDH-ES+A128KW / } &gt;&gt;</t>
          <t>other: 'SUIT Payload Encryption'</t>
        </list></t>
    </list></t>
</list></t>

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

<figure><sourcecode type="cbor-pretty"><![CDATA[
D8608440A20139FFFA055093702C81590F845D9EC866CCAC767BD1F68183
44A101381CA120A40102200121582084C1768A1AFA92BAF27C3289A3FAF7
5E7511B27C654947BBD391E8A12EB8295B225820F32B0AECA4F8B6C51C15
5037B1FB726CAE3D0C77976864EF725DB2B30ABCE6F6581804928D52CD34
AC8CA0427CEED6D7C5D06A21B5F4F79CAA18
]]></sourcecode></figure>

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

<figure title="COSE_Encrypt Example for ES-DH" anchor="esdh-aescbc-example"><sourcecode type="cbor-diag"><![CDATA[
96([
  / protected: / h'',
  / unprotected: / {
    / alg / 1: -65531 / A128CBC /,
    / IV / 5: h'93702C81590F845D9EC866CCAC767BD1'
  },
  / ciphertext: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / << {
        / alg / 1: -29 / ECDH-ES + A128KW /
      } >>,
      / unprotected: / {
        / ephemeral key / -1: {
          / kty / 1: 2 / EC2 /,
          / crv / -1: 1 / P-256 /,
          / x / -2: h'84C1768A1AFA92BAF27C3289A3FAF75E
                      7511B27C654947BBD391E8A12EB8295B',
          / y / -3: h'F32B0AECA4F8B6C51C155037B1FB726C
                      AE3D0C77976864EF725DB2B30ABCE6F6'
        }
      },
      / ciphertext: /
        h'04928D52CD34AC8CA0427CEED6D7C5D06A21B5F4F79CAA18'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></sourcecode></figure>

<t>The encrypted payload (with a line feed added) was:</t>

<figure><sourcecode type="test-vectors"><![CDATA[
9C09156CF4ACE0401086D98586E0B09FA5B5CF78F2BCCBF6C914DDB42BF0
E21E
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="integrity-check-on-encrypted-and-decrypted-payloads"><name>Integrity Check on Encrypted and Decrypted Payloads</name>

<t>In addition to suit-condition-image-match (see <xref section="8.4.9.2" sectionFormat="of" target="I-D.ietf-suit-manifest"/>),
AEAD algorithms used for content encryption provides another way
to validate the integrity of components.
This section provides a guideline to construct secure but not redundant
SUIT Manifest for encrypted payloads.</t>

<section anchor="validating-payload-integrity"><name>Validating Payload Integrity</name>

<t>This sub-section explains three ways to validate the integrity
of payloads.</t>

<section anchor="image-match-after-decryption"><name>Image Match after Decryption</name>

<t>The suit-condition-image-match on the plaintext payload is used after decryption.
An example command sequence is shown in <xref target="_figure-image-match-after-decryption"/>.</t>

<figure title="Check Image Match After Decryption" anchor="_figure-image-match-after-decryption"><artwork><![CDATA[
/ directive-set-component-index / 12, 1,
/ directive-override-parameters / 20, {
  / parameter-uri / 21: "coaps://example.com/encrypted.bin"
},
/ directive-fetch / 21, 15,

/ directive-set-component-index / 12, 0,
/ directive-override-parameters / 20, {
  / parameter-image-digest / 3: << {
    / algorithm-id: / -16 / SHA256 /,
    / digest-bytes: / h'3B1...92A' / digest of plaintext payload /
  } >>,
  / parameter-image-size / 14: 30 / size of plaintext payload /,
  / parameter-encryption-info / TBD19: h'369...50F',
  / parameter-source-component / 22: 1
},
/ directive-copy / 22, 15,
/ condition-image-match / 3, 15 / check decrypted payload integrity /
]]></artwork></figure>

<t>RFC Editor's Note (TBD19): The value for the suit-parameter-encryption-info
parameter is set to 19, as the proposed value.</t>

</section>
<section anchor="image-match-before-decryption"><name>Image Match before Decryption</name>

<t>The suit-condition-image-match can also be applied on encrypted payloads
before decryption takes place. An example command sequence is shown in
<xref target="_figure-image-match-before-decryption"/>.</t>

<t>This option mitigates battery exhaustion attacks discussed in <xref target="sec-cons"/>.</t>

<figure title="Check Image Match Before Decryption" anchor="_figure-image-match-before-decryption"><artwork><![CDATA[
/ directive-set-component-index / 12, 1,
/ directive-override-parameters / 20, {
  / parameter-image-digest / 3: << {
    / algorithm-id: / -16 / SHA256 /,
    / digest-bytes: / h'8B4...D34' / digest of encrypted payload /
  } >>,
  / parameter-image-size / 14: 30 / size of encrypted payload /,
  / parameter-uri / 21: "coaps://example.com/encrypted.bin"
},

/ directive-fetch / 21, 15,
/ condition-image-match / 3, 15 / check decrypted payload integrity /,

/ directive-set-component-index / 12, 0,
/ directive-override-parameters / 20, {
  / parameter-encryption-info / TBD19: h'D86...1F0',
  / parameter-source-component / 22: 1
},
/ directive-copy / 22, 15
]]></artwork></figure>

<t>RFC Editor's Note (TBD19): The value for the suit-parameter-encryption-info
parameter is set to 19, as the proposed value.</t>

</section>
<section anchor="checking-authentication-tag-while-decrypting"><name>Checking Authentication Tag while Decrypting</name>

<t>AEAD algorithms, such as AES-GCM and ChaCha20/Poly1305, verify the integrity of
the encrypted concent.</t>

</section>
</section>
<section anchor="payload-integrity-validation"><name>Payload Integrity Validation</name>

<t>This subsection offers guidelines for validating the integrity of payloads within
the SUIT manifest. The decision tree in <xref target="payload-integrity-decision-tree"/>
illustrates the process for establishing payload integrity.</t>

<figure title="Decision Tree: Validating the Payload" anchor="payload-integrity-decision-tree"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="408" viewBox="0 0 408 416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
<path d="M 8,32 L 8,64" fill="none" stroke="black"/>
<path d="M 8,352 L 8,384" fill="none" stroke="black"/>
<path d="M 24,64 L 24,328" fill="none" stroke="black"/>
<path d="M 40,240 L 40,272" fill="none" stroke="black"/>
<path d="M 80,272 L 80,328" fill="none" stroke="black"/>
<path d="M 96,352 L 96,384" fill="none" stroke="black"/>
<path d="M 136,128 L 136,176" fill="none" stroke="black"/>
<path d="M 136,352 L 136,384" fill="none" stroke="black"/>
<path d="M 152,176 L 152,232" fill="none" stroke="black"/>
<path d="M 192,272 L 192,328" fill="none" stroke="black"/>
<path d="M 232,240 L 232,272" fill="none" stroke="black"/>
<path d="M 248,352 L 248,384" fill="none" stroke="black"/>
<path d="M 288,352 L 288,384" fill="none" stroke="black"/>
<path d="M 384,64 L 384,120" fill="none" stroke="black"/>
<path d="M 384,176 L 384,328" fill="none" stroke="black"/>
<path d="M 400,32 L 400,64" fill="none" stroke="black"/>
<path d="M 400,128 L 400,176" fill="none" stroke="black"/>
<path d="M 400,352 L 400,384" fill="none" stroke="black"/>
<path d="M 8,32 L 400,32" fill="none" stroke="black"/>
<path d="M 8,64 L 400,64" fill="none" stroke="black"/>
<path d="M 136,128 L 400,128" fill="none" stroke="black"/>
<path d="M 136,176 L 400,176" fill="none" stroke="black"/>
<path d="M 40,240 L 232,240" fill="none" stroke="black"/>
<path d="M 40,272 L 232,272" fill="none" stroke="black"/>
<path d="M 24,336 L 80,336" fill="none" stroke="black"/>
<path d="M 152,336 L 232,336" fill="none" stroke="black"/>
<path d="M 304,336 L 384,336" fill="none" stroke="black"/>
<path d="M 24,400 L 80,400" fill="none" stroke="black"/>
<path d="M 152,400 L 232,400" fill="none" stroke="black"/>
<path d="M 304,400 L 384,400" fill="none" stroke="black"/>
<path d="M 24,336 C 15.16936,336 8,343.16936 8,352" fill="none" stroke="black"/>
<path d="M 80,336 C 88.83064,336 96,343.16936 96,352" fill="none" stroke="black"/>
<path d="M 152,336 C 143.16936,336 136,343.16936 136,352" fill="none" stroke="black"/>
<path d="M 232,336 C 240.83064,336 248,343.16936 248,352" fill="none" stroke="black"/>
<path d="M 304,336 C 295.16936,336 288,343.16936 288,352" fill="none" stroke="black"/>
<path d="M 384,336 C 392.83064,336 400,343.16936 400,352" fill="none" stroke="black"/>
<path d="M 24,400 C 15.16936,400 8,392.83064 8,384" fill="none" stroke="black"/>
<path d="M 80,400 C 88.83064,400 96,392.83064 96,384" fill="none" stroke="black"/>
<path d="M 152,400 C 143.16936,400 136,392.83064 136,384" fill="none" stroke="black"/>
<path d="M 232,400 C 240.83064,400 248,392.83064 248,384" fill="none" stroke="black"/>
<path d="M 304,400 C 295.16936,400 288,392.83064 288,384" fill="none" stroke="black"/>
<path d="M 384,400 C 392.83064,400 400,392.83064 400,384" fill="none" stroke="black"/>
<polygon class="arrowhead" points="392,328 380,322.4 380,333.6 " fill="black" transform="rotate(90,384,328)"/>
<polygon class="arrowhead" points="392,120 380,114.4 380,125.6 " fill="black" transform="rotate(90,384,120)"/>
<polygon class="arrowhead" points="200,328 188,322.4 188,333.6 " fill="black" transform="rotate(90,192,328)"/>
<polygon class="arrowhead" points="160,232 148,226.4 148,237.6 " fill="black" transform="rotate(90,152,232)"/>
<polygon class="arrowhead" points="88,328 76,322.4 76,333.6 " fill="black" transform="rotate(90,80,328)"/>
<polygon class="arrowhead" points="32,328 20,322.4 20,333.6 " fill="black" transform="rotate(90,24,328)"/>
<g class="text">
<text x="88" y="52">Q1.</text>
<text x="120" y="52">How</text>
<text x="148" y="52">is</text>
<text x="176" y="52">the</text>
<text x="224" y="52">Payload</text>
<text x="300" y="52">delivered?</text>
<text x="44" y="100">in</text>
<text x="88" y="100">Content</text>
<text x="348" y="100">others</text>
<text x="200" y="148">Q2.</text>
<text x="252" y="148">Mitigate</text>
<text x="320" y="148">Battery</text>
<text x="236" y="164">Exhaustion</text>
<text x="316" y="164">Attacks?</text>
<text x="172" y="212">No</text>
<text x="360" y="212">Yes</text>
<text x="64" y="260">Q3.</text>
<text x="100" y="260">AEAD</text>
<text x="148" y="260">cipher</text>
<text x="200" y="260">used?</text>
<text x="104" y="308">Yes</text>
<text x="172" y="308">No</text>
<text x="48" y="356">Not</text>
<text x="180" y="356">BEFORE</text>
<text x="220" y="356">or</text>
<text x="340" y="356">BEFORE</text>
<text x="52" y="372">Required</text>
<text x="192" y="372">AFTER</text>
<text x="340" y="372">Decryption</text>
<text x="188" y="388">Decryption</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
+------------------------------------------------+
|        Q1. How is the Payload delivered?       |
+-+--------------------------------------------+-+
  |                                            |
  | in Content                          others |
  |                                            v
  |             +--------------------------------+
  |             |      Q2. Mitigate Battery      |
  |             |       Exhaustion Attacks?      |
  |             +-+----------------------------+-+
  |               |                            |
  |               | No                     Yes |
  |               v                            |
  | +-----------------------+                  |
  | | Q3. AEAD cipher used? |                  |
  | +----+-------------+----+                  |
  |      |             |                       |
  |      | Yes      No |                       |
  v      v             v                       v
 .+------+.      .-----+-----.      .----------+.
|   Not    |    |  BEFORE or  |    |   BEFORE    |
| Required |    |    AFTER    |    | Decryption  |
|          |    | Decryption  |    |             |
 '--------'      '-----------'      '-----------'
]]></artwork></artset></figure>

<t>There are three questions to ask:</t>

<t><list style="symbols">
  <t>Q1. How does the recipient receive the encrypted payload?
If the encrypted payload is used as the value of the suit-parameter-content, its integrity is already verified by the suit-authentication-wrapper. Therefore, no additional integrity check is required. However, if the encrypted payload is delivered via suit-directive-fetch from an integrated payload or from outside the SUIT envelope, for example "coaps://example.com/encrypted.bin", additional considerations must be addressed.</t>
  <t>Q2. Are battery exhaustion attacks a concern?
If yes, the integrity of the encrypted payload must be checked before the payload is decrypted. If no, then other questions need to be asked.</t>
  <t>Q3. Is the payload encrypted with an AEAD cipher?
If yes, no additional integrity check is required, as the recipient verifies
the payload's integrity during decryption. If no, integrity validation can
occur either before or after decryption. However, validating integrity before
decryption is RECOMMENDED especially for AES-CBC mode (see <xref section="8" sectionFormat="of" target="RFC9459"/>).</t>
</list></t>

</section>
</section>
<section anchor="flash"><name>Firmware Updates on IoT Devices with Flash Memory</name>

<t>Embedded devices come in many forms, and the market is both large and fragmented.
As a result, some implementations and deployments may adopt firmware update
procedures that differ from the descriptions provided here. On a positive note,
the SUIT manifest accommodates various deployment scenarios, thanks to the
"scripting" functionality offered by its commands.</t>

<t>This section specifically addresses firmware images on microcontrollers and does
not pertain to generic software, configuration data, or machine learning models.
The differences arise from two main aspects:</t>

<t><list style="symbols">
  <t>Use of Flash Memory: Flash memory in microcontrollers is a type of non-volatile
memory that typically erases data in larger units called blocks, pages, or sectors,
and rewrites data at the byte level (often 4 bytes) or larger units. Furthermore,
flash memory is segmented into different regions, storing the bootloader, various
versions of firmware images (in designated slots), and configuration data. An
example layout of a microcontroller flash area is illustrated in <xref target="image-layout"/>.</t>
  <t>Microcontroller Design: Code on microcontrollers typically cannot be executed
from arbitrary locations in flash memory without additional software development
and design efforts. Consequently, developers often compile firmware so that the
bootloader can execute code from a specific location in flash memory, commonly
referred to as the "primary slot."</t>
</list></t>

<t>Once the encrypted firmware image is transferred to the device, it is usually
stored in a dedicated area known as the "secondary slot."</t>

<t>During the next boot, the bootloader detects the new firmware image and begins
decrypting it sector by sector, swapping it with the image located in the primary
slot. This method of swapping the newly downloaded image with the previously
valid one requires two slots, allowing for a rollback if the new firmware fails
to boot, thereby enhancing the robustness of the firmware update process.</t>

<t>The swap occurs only after verifying the signature on the plaintext. It is
important to note that the plaintext firmware image is available in the primary
slot only after the swap is completed, unless "dummy decrypt" is used to compute
the hash over the plaintext prior to executing the decryption during the swap.
In this context, dummy decryption refers to decrypting the firmware image in the
secondary slot sector by sector while computing a rolling hash over the resulting
plaintext (also sector by sector) without performing the swap operation. Although
performance optimizations, such as conveying hashes for each sector in the manifest
rather than a hash of the entire firmware image, are possible, these optimizations
are not detailed in this specification.</t>

<t>Without hardware-based, on-the-fly decryption, the image in the primary slot is
available in cleartext and may need to be re-encrypted before copying it to the
secondary slot. This step might be necessary if the secondary slot has different
access permissions or is located in off-chip flash memory, which tends to be more
vulnerable to physical attacks.</t>

<figure title="Example Flash Area Layout" anchor="image-layout"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="424" viewBox="0 0 424 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
<path d="M 8,32 L 8,528" fill="none" stroke="black"/>
<path d="M 416,32 L 416,528" fill="none" stroke="black"/>
<path d="M 8,32 L 416,32" fill="none" stroke="black"/>
<path d="M 8,64 L 416,64" fill="none" stroke="black"/>
<path d="M 8,256 L 416,256" fill="none" stroke="black"/>
<path d="M 8,448 L 416,448" fill="none" stroke="black"/>
<path d="M 8,496 L 416,496" fill="none" stroke="black"/>
<path d="M 8,528 L 416,528" fill="none" stroke="black"/>
<g class="text">
<text x="60" y="52">Bootloader</text>
<text x="48" y="84">Primary</text>
<text x="100" y="84">Slot</text>
<text x="360" y="100">(sector</text>
<text x="404" y="100">0)</text>
<text x="212" y="116">..................................................</text>
<text x="360" y="148">(sector</text>
<text x="404" y="148">1)</text>
<text x="212" y="164">..................................................</text>
<text x="360" y="196">(sector</text>
<text x="404" y="196">2)</text>
<text x="212" y="212">..................................................</text>
<text x="368" y="244">...</text>
<text x="56" y="276">Secondary</text>
<text x="116" y="276">Slot</text>
<text x="360" y="292">(sector</text>
<text x="404" y="292">0)</text>
<text x="212" y="308">..................................................</text>
<text x="360" y="340">(sector</text>
<text x="404" y="340">1)</text>
<text x="212" y="356">..................................................</text>
<text x="360" y="388">(sector</text>
<text x="404" y="388">2)</text>
<text x="212" y="404">..................................................</text>
<text x="368" y="436">...</text>
<text x="36" y="468">Swap</text>
<text x="76" y="468">Area</text>
<text x="72" y="516">Configuration</text>
<text x="148" y="516">Data</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
+--------------------------------------------------+
| Bootloader                                       |
+--------------------------------------------------+
| Primary Slot                                     |
|                                        (sector 0)|
|..................................................|
|                                                  |
|                                        (sector 1)|
|..................................................|
|                                                  |
|                                        (sector 2)|
|..................................................|
|                                                  |
|                                           ...    |
+--------------------------------------------------+
| Secondary Slot                                   |
|                                        (sector 0)|
|..................................................|
|                                                  |
|                                        (sector 1)|
|..................................................|
|                                                  |
|                                        (sector 2)|
|..................................................|
|                                                  |
|                                           ...    |
+--------------------------------------------------+
| Swap Area                                        |
|                                                  |
+--------------------------------------------------+
| Configuration Data                               |
+--------------------------------------------------+
]]></artwork></artset></figure>

<t>The ability to resume an interrupted firmware update is often essential
for unattended devices, including low-end, constrained IoT devices. To
meet this requirement, a firmware image must be divided into sectors, with
each sector encrypted individually using a cipher that does not increase
the size of the resulting ciphertext (i.e., by avoiding the addition of
an authentication tag after each encrypted block).</t>

<t>If an update is aborted while the bootloader is decrypting the newly received
image and swapping the sectors, the bootloader can restart from where it
left off. This technique enhances robustness and performance.</t>

<t>For this purpose, ciphers without integrity protection are employed to
encrypt the firmware image. It is crucial that integrity protection for the
firmware image is provided, and the suit-parameter-image-digest, defined in
<xref section="8.4.8.6" sectionFormat="of" target="I-D.ietf-suit-manifest"/>, MUST be utilized.</t>

<t><xref target="RFC9459"/> specifies the AES Counter (AES-CTR) mode and AES Cipher Block
Chaining (AES-CBC) ciphers, both of which do not provide integrity protection.
These ciphers are suitable for firmware encryption in IoT devices. However,
for many other scenarios involving software packages, configuration information,
or personalization data, the use of AEAD ciphers is RECOMMENDED.</t>

<t>The following subsections offer additional information on the selection of
initialization vectors (IVs) for use with AES-CBC and AES-CTR in the context
of firmware encryption. A random CEK MUST be used with every plaintexts, as specified
in <xref target="content-key-distribution"/>, since the IVs are not random but are instead based on
the slot/sector combination in flash memory. The discussion assumes that the block size
of AES is significantly smaller than the sector size. Typically, flash memory sectors are
measured in KiB, necessitating the decryption of multiple AES blocks to complete the
decryption of an entire sector.</t>

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

<t>The following manifests illustrate how to deliver an encrypted payload along
with its encryption information to devices.</t>

<t>In the AES-KW examples, HMAC-256 MACs are included, utilizing the following
secret key:</t>

<figure><artwork><![CDATA[
  'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
  (616161... in hex, and its length is 32)
]]></artwork></figure>

<t>ES-DH 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 instructs a parser to authenticate the manifest
using COSE_Mac0 with HMAC256. It also directs the parser to write and decrypt
the encrypted payload into a component using the suit-directive-write directive.</t>

<t>The SUIT manifest in diagnostic notation (with line breaks added for clarity) is displayed below:</t>

<figure><sourcecode type="cbor-diag"><![CDATA[
/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'037A5C325CE14078A0AADF007428EAC6
/  6/                           59361AD9402A732410BDA542FAE94E2C'
/  7/     ] >>,
/  8/     << / COSE_Mac0_Tagged / 17([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: 5 / HMAC256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / tag: / h'8D92599011C451A4C5FB69709FA6CA6C
/ 15/                  0F846D692BDBB3F624EC91F82F9F620A'
/ 16/     ]) >>
/ 17/   ] >>,
/ 18/   / manifest / 3: << {
/ 19/     / manifest-version / 1: 1,
/ 20/     / manifest-sequence-number / 2: 1,
/ 21/     / common / 3: << {
/ 22/       / components / 2: [
/ 23/         ['plaintext-firmware']
/ 24/       ]
/ 25/     } >>,
/ 26/     / install / 20: << [
/ 27/       / fetch encrypted firmware /
/ 28/       / directive-override-parameters / 20, {
/ 29/         / parameter-content / 18:
/ 30/           h'758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4
/ 31/             BD6D7ED26AB32FEB063385D4D3465927EC82CB5E198A59',
/ 32/         / parameter-encryption-info / 19: << 96([
/ 33/           / protected: / << {
/ 34/             / alg / 1: 1 / A128GCM /
/ 35/           } >>,
/ 36/           / unprotected: / {
/ 37/             / IV / 5: h'F14AAB9D81D51F7AD943FE87'
/ 38/           },
/ 39/           / ciphertext: / null / detached ciphertext /,
/ 40/           / recipients: / [
/ 41/             [
/ 42/               / protected: / h'',
/ 43/               / unprotected: / {
/ 44/                 / alg / 1: -3 / A128KW /,
/ 45/                 / kid / 4: 'kid-1'
/ 46/               },
/ 47/               / ciphertext: /
/ 48/                 h'75603FFC9518D794713C8CA8
/ 49/                   A115A7FB32565A6D59534D62'
/ 50/                 / CEK encrypted with KEK /
/ 51/             ]
/ 52/           ]
/ 53/         ]) >>
/ 54/       },
/ 55/ 
/ 56/       / decrypt encrypted firmware /
/ 57/       / directive-write / 18, 15
/ 58/         / consumes the SUIT_Encryption_Info above /
/ 59/     ] >>
/ 60/   } >>
/ 61/ })
]]></sourcecode></figure>

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

<figure><sourcecode type="cbor-pretty"><![CDATA[
D86BA2025853825824822F5820037A5C325CE14078A0AADF007428EAC659
361AD9402A732410BDA542FAE94E2C582AD18443A10105A0F658208D9259
9011C451A4C5FB69709FA6CA6C0F846D692BDBB3F624EC91F82F9F620A03
5898A4010102010357A102818152706C61696E746578742D6669726D7761
72651458778414A212582E758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B
85BB94D4BD6D7ED26AB32FEB063385D4D3465927EC82CB5E198A5913583E
D8608443A10101A1054CF14AAB9D81D51F7AD943FE87F6818340A2012204
456B69642D31581875603FFC9518D794713C8CA8A115A7FB32565A6D5953
4D62120F
]]></sourcecode></figure>

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

<t>The following SUIT manifest instructs a parser to fetch and store the
encrypted payload. Subsequently, the payload is decrypted and copied into
another component using the suit-directive-copy directive. This approach
is particularly effective for constrained devices with execute-in-place
(XIP) flash memory.</t>

<t>The SUIT manifest in diagnostic notation (with line breaks added for
clarity) is displayed below:</t>

<figure><sourcecode type="cbor-diag"><![CDATA[
/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'3C92AECEAA7225DDD5129A83B2842BF2
/  6/                           8CC53B2C9467C5BF256E7108F2DA7C9C'
/  7/     ] >>,
/  8/     << / COSE_Mac0_Tagged / 17([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: 5 / HMAC256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / tag: / h'46CB34181A04B967023D4C9E136DC5DC
/ 15/                  591D8A9BE9365DE4D282C9D6168C01FB'
/ 16/     ]) >>
/ 17/   ] >>,
/ 18/   / manifest / 3: << {
/ 19/     / manifest-version / 1: 1,
/ 20/     / manifest-sequence-number / 2: 1,
/ 21/     / common / 3: << {
/ 22/       / components / 2: [
/ 23/         ['plaintext-firmware'],
/ 24/         ['encrypted-firmware']
/ 25/       ]
/ 26/     } >>,
/ 27/     / install / 20: << [
/ 28/       / fetch encrypted firmware /
/ 29/       / directive-set-component-index / 12,
/ 30/         1 / ['encrypted-firmware'] /,
/ 31/       / directive-override-parameters / 20, {
/ 32/         / parameter-image-size / 14: 46,
/ 33/         / parameter-uri / 21:
/ 34/           "coaps://example.com/encrypted-firmware"
/ 35/       },
/ 36/       / directive-fetch / 21, 15,
/ 37/ 
/ 38/       / decrypt encrypted firmware /
/ 39/       / directive-set-component-index / 12,
/ 40/         0 / ['plaintext-firmware'] /,
/ 41/       / directive-override-parameters / 20, {
/ 42/         / parameter-encryption-info / 19: << 96([
/ 43/           / protected: / << {
/ 44/             / alg / 1: 1 / A128GCM /
/ 45/           } >>,
/ 46/           / unprotected: / {
/ 47/             / IV / 5: h'F14AAB9D81D51F7AD943FE87'
/ 48/           },
/ 49/           / ciphertext: / null / detached ciphertext /,
/ 50/           / recipients: / [
/ 51/             [
/ 52/               / protected: / h'',
/ 53/               / unprotected: / {
/ 54/                 / alg / 1: -3 / A128KW /,
/ 55/                 / kid / 4: 'kid-1'
/ 56/               },
/ 57/               / ciphertext: /
/ 58/                 h'75603FFC9518D794713C8CA8
/ 59/                   A115A7FB32565A6D59534D62'
/ 60/                 / CEK encrypted with KEK /
/ 61/             ]
/ 62/           ]
/ 63/         ]) >>,
/ 64/         / parameter-source-component / 22:
/ 65/           1 / ['encrypted-firmware'] /
/ 66/       },
/ 67/       / directive-copy / 22,
/ 68/         15 / consumes the SUIT_Encryption_Info above /
/ 69/     ] >>
/ 70/   } >>
/ 71/ })
]]></sourcecode></figure>

<t>The default storage area is defined by the component identifier (see
<xref section="8.4.5.1" sectionFormat="of" target="I-D.ietf-suit-manifest"/>). In this example,
the component identifier for component #0 is ['plaintext-firmware']
and the file path "/plaintext-firmware" is the expected location.</t>

<t>While parsing the manifest, the behavior of SUIT manifest processor would be</t>

<t><list style="symbols">
  <t>[L2-L17] authenticates the manifest part on [L18-L68]</t>
  <t>[L22-L25] gets two component identifiers; ['plaintext-firmware'] for component #0, and ['encrypted-firmware'] for component # 1 respectively</t>
  <t>[L29] sets current component index # 1 (the lasting directives target ['encrypted-firmware'])</t>
  <t>[L33-L34] sets source uri parameter "coaps://example.com/encrypted-firmware"</t>
  <t>[L36] fetches content from source uri into ['encrypted-firmware']</t>
  <t>[L39] sets current component index # 0 (the lasting directives target ['plaintext-firmware'])</t>
  <t>[L42-L62] sets SUIT encryption info parameter</t>
  <t>[L63-L64] sets source component index parameter # 1</t>
  <t>[L66] decrypts component # 1 (source component index) and stores the result into component # 0 (current component index)</t>
</list></t>

<t><xref target="_table-manifest-feature"/> lists the features from the SUIT manifest specification, which
are re-used by this specification.</t>

<texttable title="Example Flash Area Layout" anchor="_table-manifest-feature">
      <ttcol align='left'>Feature Name</ttcol>
      <ttcol align='left'>Abbr.</ttcol>
      <ttcol align='left'>Manifest Ref.</ttcol>
      <c>component identifier</c>
      <c>CI</c>
      <c>Sec. 8.4.5.1</c>
      <c>(destination) component index</c>
      <c>dst-CI</c>
      <c>Sec. 8.4.10.1</c>
      <c>(destination) component slot OPTIONAL param</c>
      <c>dst-CS</c>
      <c>Sec. 8.4.8.8</c>
      <c>(source) uri OPTIONAL parameter</c>
      <c>src-URI</c>
      <c>Sec. 8.4.8.10</c>
      <c>source component index OPTIONAL parameter</c>
      <c>src-CI</c>
      <c>Sec. 8.4.8.11</c>
</texttable>

<t>The resulting state of the SUIT manifest processor is shown in <xref target="_table-suit-processor"/>.</t>

<texttable title="Manifest Processor State" anchor="_table-suit-processor">
      <ttcol align='left'>Abbreviation</ttcol>
      <ttcol align='left'>Plaintext</ttcol>
      <ttcol align='left'>Ciphertext</ttcol>
      <c>CI</c>
      <c>['plaintext-firmware']</c>
      <c>['encrypted-firmware']</c>
      <c>dst-CI</c>
      <c>0</c>
      <c>1</c>
      <c>dst-CS</c>
      <c>N/A</c>
      <c>N/A</c>
      <c>src-URI</c>
      <c>N/A</c>
      <c>"coaps://example.com/encrypted-firmware"</c>
      <c>src-CI</c>
      <c>1</c>
      <c>N/A</c>
</texttable>

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

<figure><sourcecode type="cbor-pretty"><![CDATA[
D86BA2025853825824822F58203C92AECEAA7225DDD5129A83B2842BF28C
C53B2C9467C5BF256E7108F2DA7C9C582AD18443A10105A0F6582046CB34
181A04B967023D4C9E136DC5DC591D8A9BE9365DE4D282C9D6168C01FB03
58B2A40101020103582BA102828152706C61696E746578742D6669726D77
6172658152656E637279707465642D6669726D7761726514587C8C0C0114
A20E182E157826636F6170733A2F2F6578616D706C652E636F6D2F656E63
7279707465642D6669726D77617265150F0C0014A213583ED8608443A101
01A1054CF14AAB9D81D51F7AD943FE87F6818340A2012204456B69642D31
581875603FFC9518D794713C8CA8A115A7FB32565A6D59534D621601160F
]]></sourcecode></figure>

<t>The encrypted payload (with a line feed added) to be fetched from "coaps://example.com/encrypted-firmware" is:</t>

<figure><sourcecode type="test-vectors"><![CDATA[
758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4BD6D7ED26AB32F
EB063385D4D3465927EC82CB5E198A59
]]></sourcecode></figure>

<t>The previous example does not utilize storage slots. However, it is possible to
implement this functionality for devices that support slots in flash memory. In
the enhanced example below, we reference the slots using [h'00'] and [h'01']. In
this context, the component identifier [h'00'] designates component slot #0.</t>

<figure><sourcecode type="cbor-diag"><![CDATA[
/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'6D74BD3110A2573236E03DD78693D5B2
/  6/                           1C299C917A4327D9939DDF3582A41DE3'
/  7/     ] >>,
/  8/     << / COSE_Mac0_Tagged / 17([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: 5 / HMAC256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / tag: / h'E6837A54A9B5813F8D5EDAD48AB96D5D
/ 15/                  7388D9D1C89AB29EC55AE964F67E01ED'
/ 16/     ]) >>
/ 17/   ] >>,
/ 18/   / manifest / 3: << {
/ 19/     / manifest-version / 1: 1,
/ 20/     / manifest-sequence-number / 2: 1,
/ 21/     / common / 3: << {
/ 22/       / components / 2: [
/ 23/         [h'00'],
/ 24/         [h'01']
/ 25/       ]
/ 26/     } >>,
/ 27/     / install / 20: << [
/ 28/       / fetch encrypted firmware /
/ 29/       / directive-set-component-index / 12, 1 / [h'01'] /,
/ 30/       / directive-override-parameters / 20, {
/ 31/         / parameter-image-size / 14: 46,
/ 32/         / parameter-uri / 21:
/ 33/           "coaps://example.com/encrypted-firmware"
/ 34/       },
/ 35/       / directive-fetch / 21, 15,
/ 36/ 
/ 37/       / decrypt encrypted firmware /
/ 38/       / directive-set-component-index / 12, 0 / ['00'] /,
/ 39/       / directive-override-parameters / 20, {
/ 40/         / parameter-encryption-info / 19: << 96([
/ 41/           / protected: / << {
/ 42/             / alg / 1: 1 / A128GCM /
/ 43/           } >>,
/ 44/           / unprotected: / {
/ 45/             / IV / 5: h'F14AAB9D81D51F7AD943FE87'
/ 46/           },
/ 47/           / ciphertext: / null / detached ciphertext /,
/ 48/           / recipients: / [
/ 49/             [
/ 50/               / protected: / h'',
/ 51/               / unprotected: / {
/ 52/                 / alg / 1: -3 / A128KW /,
/ 53/                 / kid / 4: 'kid-1'
/ 54/               },
/ 55/               / ciphertext: /
/ 56/                 h'75603FFC9518D794713C8CA8
/ 57/                   A115A7FB32565A6D59534D62'
/ 58/                 / CEK encrypted with KEK /
/ 59/             ]
/ 60/           ]
/ 61/         ]) >>,
/ 62/         / parameter-source-component / 22: 1 / [h'01'] /
/ 63/       },
/ 64/       / directive-copy / 22, 15
/ 65/         / consumes the SUIT_Encryption_Info above /
/ 66/     ] >>
/ 67/   } >>
/ 68/ })
]]></sourcecode></figure>

</section>
<section anchor="example-ES-DH-write"><name>ES-DH Example with Write + Copy Directives</name>

<t>The following SUIT manifest instructs a parser to authenticate the manifest
using COSE_Sign1 with ES256. It also directs the parser to write and decrypt
the encrypted payload into a component via the suit-directive-write directive.</t>

<t>The SUIT manifest in diagnostic notation (formatted with line breaks for clarity)
is presented below:</t>

<figure><sourcecode type="cbor-diag"><![CDATA[
/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'1DB69EF1477E9942815F29F78E09957B
/  6/                           26B4ADD03902BDB3D1EDF3DA2075F593'
/  7/     ] >>,
/  8/     << / COSE_Sign1_Tagged / 18([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: -7 / ES256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / signature: / h'CB4EADA6BEC17EEB22EB836FB2BF9136
/ 15/                        A6EF733C11DAC955F543BBDCAA373B85
/ 16/                        9321BC77969917E4C70F049527607F4C
/ 17/                        32752D53E01346E96BFF4880B437DF64'
/ 18/     ]) >>
/ 19/   ] >>,
/ 20/   / manifest / 3: << {
/ 21/     / manifest-version / 1: 1,
/ 22/     / manifest-sequence-number / 2: 1,
/ 23/     / common / 3: << {
/ 24/       / components / 2: [
/ 25/         ['decrypted-firmware']
/ 26/       ]
/ 27/     } >>,
/ 28/     / install / 20: << [
/ 29/       / directive-set-component-index / 12,
/ 30/         0 / ['plaintext-firmware'] /,
/ 31/       / directive-override-parameters / 20, {
/ 32/         / parameter-content / 18:
/ 33/           h'758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4
/ 34/             BD6D7ED26AB32FEB063385D4D3465927EC82CB5E198A59',
/ 35/         / parameter-encryption-info / 19: << 96([
/ 36/           / protected: / << {
/ 37/             / alg / 1: 1 / A128GCM /
/ 38/           } >>,
/ 39/           / unprotected: / {
/ 40/             / IV / 5: h'F14AAB9D81D51F7AD943FE87'
/ 41/           },
/ 42/           / ciphertext: / null / detached ciphertext /,
/ 43/           / recipients: / [
/ 44/             [
/ 45/               / protected: / << {
/ 46/                 / alg / 1: -29 / ECDH-ES + A128KW /
/ 47/               } >>,
/ 48/               / unprotected: / {
/ 49/                 / ephemeral key / -1: {
/ 50/                   / kty / 1: 2 / EC2 /,
/ 51/                   / crv / -1: 1 / P-256 /,
/ 52/                   / x / -2:
/ 53/                     h'73024F415AA51529A66CCEFD88F3F62A
/ 54/                       734492FF45F6AD37FD2888E73EAF19DA',
/ 55/                   / y / -3:
/ 56/                     h'4005B48A6FD091AA6ABFE3CFBEEDE88B
/ 57/                       347E521D43405FDBD7D2CFF0EBC21B26'
/ 58/                 },
/ 59/                 / kid / 4: 'kid-2'
/ 60/               },
/ 61/               / ciphertext: /
/ 62/                 h'A06B8E6550F308712B1DF044
/ 63/                   B21B7D11D9B22792F1DE0997'
/ 64/                 / CEK encrypted with KEK /
/ 65/             ]
/ 66/           ]
/ 67/         ]) >>
/ 68/       },
/ 69/       / directive-write / 18,
/ 70/         15 / consumes the SUIT_Encryption_Info above /
/ 71/     ] >>
/ 72/   } >>
/ 73/ })
]]></sourcecode></figure>

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

<figure><sourcecode type="cbor-pretty"><![CDATA[
D86BA2025873825824822F58201DB69EF1477E9942815F29F78E09957B26
B4ADD03902BDB3D1EDF3DA2075F593584AD28443A10126A0F65840CB4EAD
A6BEC17EEB22EB836FB2BF9136A6EF733C11DAC955F543BBDCAA373B8593
21BC77969917E4C70F049527607F4C32752D53E01346E96BFF4880B437DF
640358E8A4010102010357A1028181526465637279707465642D6669726D
776172651458C7860C0014A212582E758C4B7BBAE2C4C1D462423E0F0DC3
164FFA7B85BB94D4BD6D7ED26AB32FEB063385D4D3465927EC82CB5E198A
5913588CD8608443A10101A1054CF14AAB9D81D51F7AD943FE87F6818344
A101381CA220A40102200121582073024F415AA51529A66CCEFD88F3F62A
734492FF45F6AD37FD2888E73EAF19DA2258204005B48A6FD091AA6ABFE3
CFBEEDE88B347E521D43405FDBD7D2CFF0EBC21B2604456B69642D325818
A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE0997120F
]]></sourcecode></figure>

</section>
<section anchor="example-ES-DH-dependency"><name>ES-DH Example with Dependency</name>

<t>The following SUIT manifest requests a parser to resolve the dependency.</t>

<t>The dependent manifest is signed with another key:</t>

<figure><artwork><![CDATA[
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIIQa67e56m8CYL5zVaJFiLl30j0qxb8ray2DeUMqH+qYoAoGCCqGSM49
AwEHoUQDQgAEDpCKqPBm2x8ITgw2UsY5Ur2Z8qW9si+eATZ6rQOrpot32hvYrE8M
tJC6IQZIv3mrFk1JrTVR1x0xSydJ7kLSmg==
-----END EC PRIVATE KEY-----
]]></artwork></figure>

<t>The dependency manifest is embedded as an integrated-dependency
and referred to by the "#dependency-manifest" URI.</t>

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

<figure><sourcecode type="cbor-diag"><![CDATA[
/  1/ / SUIT_Envelope_Tagged / 107({
/  2/   / authentication-wrapper / 2: << [
/  3/     << [
/  4/       / digest-algorithm-id: / -16 / SHA256 /,
/  5/       / digest-bytes: / h'A00CB6C85515C1EF471B50B542FACDD8
/  6/                           8B71B3C7EA2A43DE13D32C4A99056FE9'
/  7/     ] >>,
/  8/     << / COSE_Sign1_Tagged / 18([
/  9/       / protected: / << {
/ 10/         / algorithm-id / 1: -7 / ES256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / signature: / h'421B30FE76DA848616D72FC1115EA610
/ 15/                        5578CB95DF9C6BEAD931105C9D555CF8
/ 16/                        CD38C8FD68ACE43445D8D2CAE6391A99
/ 17/                        5A212487D92F8DAD789F65511AC61778'
/ 18/     ]) >>
/ 19/   ] >>,
/ 20/   / manifest / 3: << {
/ 21/     / manifest-version / 1: 1,
/ 22/     / manifest-sequence-number / 2: 1,
/ 23/     / common / 3: << {
/ 24/       / dependencies / 1: {
/ 25/         / component-index / 1: {
/ 26/           / dependency-prefix / 1: [
/ 27/              'dependency-manifest.suit'
/ 28/           ]
/ 29/         }
/ 30/       },
/ 31/       / components / 2: [
/ 32/         ['decrypted-firmware']
/ 33/       ]
/ 34/     } >>,
/ 35/     / manifest-component-id / 5: [
/ 36/       'dependent-manifest.suit'
/ 37/     ],
/ 38/     / install / 20: << [
/ 39/       / NOTE: set SUIT_Encryption_Info /
/ 40/       / directive-set-component-index / 12,
/ 41/         0 / ['decrypted-firmware'] /,
/ 42/       / directive-override-parameters / 20, {
/ 43/         / parameter-content / 18:
/ 44/           h'758C4B7BBAE2C4C1D462423E0F0DC3164FFA7B85BB94D4
/ 45/             BD6D7ED26AB32FEB063385D4D3465927EC82CB5E198A59',
/ 46/         / parameter-encryption-info / 19: << 96([
/ 47/           / protected: / << {
/ 48/             / alg / 1: 1 / A128GCM /
/ 49/           } >>,
/ 50/           / unprotected: / {
/ 51/             / IV / 5: h'F14AAB9D81D51F7AD943FE87'
/ 52/           },
/ 53/           / ciphertext: / null / detached ciphertext /,
/ 54/           / recipients: / [
/ 55/             [
/ 56/               / protected: / << {
/ 57/                 / alg / 1: -29 / ECDH-ES + A128KW /
/ 58/               } >>,
/ 59/               / unprotected: / {
/ 60/                 / ephemeral key / -1: {
/ 61/                   / kty / 1: 2 / EC2 /,
/ 62/                   / crv / -1: 1 / P-256 /,
/ 63/                   / x / -2:
/ 64/                     h'73024F415AA51529A66CCEFD88F3F62A
/ 65/                       734492FF45F6AD37FD2888E73EAF19DA',
/ 66/                   / y / -3:
/ 67/                     h'4005B48A6FD091AA6ABFE3CFBEEDE88B
/ 68/                       347E521D43405FDBD7D2CFF0EBC21B26'
/ 69/                 },
/ 70/                 / kid / 4: 'kid-2'
/ 71/               },
/ 72/               / ciphertext: /
/ 73/                 h'A06B8E6550F308712B1DF044
/ 74/                   B21B7D11D9B22792F1DE0997'
/ 75/                 / CEK encrypted with KEK /
/ 76/             ]
/ 77/           ]
/ 78/         ]) >>
/ 79/       },
/ 80/ 
/ 81/       / NOTE: call dependency-manifest /
/ 82/       / directive-set-component-index / 12,
/ 83/         1 / ['dependenty-manifest.suit'] /,
/ 84/       / directive-override-parameters / 20, {
/ 85/         / parameter-image-digest / 3: << [
/ 86/           / algorithm-id / -16 / SHA256 /,
/ 87/           / digest-bytes / h'4B15C90FBD776A820E7E733DF040D90B
/ 88/                              356B5C75982ECAECE8673818179BDF16'
/ 89/         ] >>,
/ 90/         / parameter-image-size / 14: 247,
/ 91/         / parameter-uri / 21: "#dependency-manifest"
/ 92/       },
/ 93/       / directive-fetch / 21, 15,
/ 94/       / condition-dependency-integrity / 7, 15,
/ 95/       / directive-process-dependency / 11, 15
/ 96/     ] >>
/ 97/   } >>,
/ 98/   "#dependency-manifest": <<
/ 99/     / SUIT_Envelope_Tagged / 107({
/100/       / authentication-wrapper / 2: << [
/101/         << [
/102/           / digest-algorithm-id: / -16 / SHA256 /,
/103/           / digest-bytes: /
/104/             h'4B15C90FBD776A820E7E733DF040D90B
/105/               356B5C75982ECAECE8673818179BDF16'
/106/         ] >>,
/107/         << / COSE_Sign1_Tagged / 18([
/108/           / protected: / << {
/109/             / algorithm-id / 1: -7 / ES256 /
/110/           } >>,
/111/           / unprotected: / {},
/112/           / payload: / null,
/113/           / signature: / h'2B1B9C4E44E52863A78F73DA2A935823
/114/                            B28AEAE6A85CADAC4C4E3AABAAD56CBC
/115/                            E5A47D288F86B54D0186657E972E748B
/116/                            48CDB1D420FBAC1285DCC978382F62CC'
/117/         ]) >>
/118/       ] >>,
/119/       / manifest / 3: << {
/120/         / manifest-version / 1: 1,
/121/         / manifest-sequence-number / 2: 1,
/122/         / common / 3: << {
/123/           / components / 2: [
/124/             ['decrypted-firmware']
/125/           ],
/126/           / shared-sequence / 4: << [
/127/             / directive-set-componnt-index / 12,
/128/               0 / ['decrypted-firmware'] /,
/129/             / directive-override-parameters / 20, {
/130/               / parameter-image-digest / 3: << [
/131/                 / algorithm-id / -16 / SHA256 /,
/132/                 / digest-bytes /
/133/                   h'36921488FE6680712F734E11F58D87EE
/134/                     B66D4B21A8A1AD3441060814DA16D50F'
/135/               ] >>,
/136/               / parameter-image-size / 14: 30
/137/             }
/138/           ] >>
/139/         } >>,
/140/         / manifest-component-id / 5: [
/141/           'dependency-manifest.suit'
/142/         ],
/143/         / validate / 7: << [
/144/           / condition-image-match / 3, 15
/145/         ] >>,
/146/         / install / 20: << [
/147/           / directive-set-component-index / 12,
/148/             0 / ['decrypted-firmware'] /,
/149/           / directive-write / 18, 15
/150/             / consumes the SUIT_Encryption_Info /
/151/             / set by the dependent /,
/152/           / condition-image-match / 3, 15
/153/             / check the integrity of the decrypted payload /
/154/         ] >>
/155/       } >>
/156/     })
/157/   >>
/158/ })
]]></sourcecode></figure>

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

<figure><sourcecode type="cbor-pretty"><![CDATA[
D86BA3025873825824822F5820A00CB6C85515C1EF471B50B542FACDD88B
71B3C7EA2A43DE13D32C4A99056FE9584AD28443A10126A0F65840421B30
FE76DA848616D72FC1115EA6105578CB95DF9C6BEAD931105C9D555CF8CD
38C8FD68ACE43445D8D2CAE6391A995A212487D92F8DAD789F65511AC617
780359016CA501010201035837A201A101A101815818646570656E64656E
63792D6D616E69666573742E73756974028181526465637279707465642D
6669726D77617265058157646570656E64656E742D6D616E69666573742E
737569741459010F8E0C0014A212582E758C4B7BBAE2C4C1D462423E0F0D
C3164FFA7B85BB94D4BD6D7ED26AB32FEB063385D4D3465927EC82CB5E19
8A5913588CD8608443A10101A1054CF14AAB9D81D51F7AD943FE87F68183
44A101381CA220A40102200121582073024F415AA51529A66CCEFD88F3F6
2A734492FF45F6AD37FD2888E73EAF19DA2258204005B48A6FD091AA6ABF
E3CFBEEDE88B347E521D43405FDBD7D2CFF0EBC21B2604456B69642D3258
18A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE09970C0114A303
5824822F58204B15C90FBD776A820E7E733DF040D90B356B5C75982ECAEC
E8673818179BDF160E18F7157423646570656E64656E63792D6D616E6966
657374150F070F0B0F7423646570656E64656E63792D6D616E6966657374
58F7D86BA2025873825824822F58204B15C90FBD776A820E7E733DF040D9
0B356B5C75982ECAECE8673818179BDF16584AD28443A10126A0F658402B
1B9C4E44E52863A78F73DA2A935823B28AEAE6A85CADAC4C4E3AABAAD56C
BCE5A47D288F86B54D0186657E972E748B48CDB1D420FBAC1285DCC97838
2F62CC03587BA601010201035849A2028181526465637279707465642D66
69726D7761726504582F840C0014A2035824822F582036921488FE668071
2F734E11F58D87EEB66D4B21A8A1AD3441060814DA16D50F0E181E058158
18646570656E64656E63792D6D616E69666573742E73756974074382030F
1447860C00120F030F
]]></sourcecode></figure>

</section>
</section>
<section anchor="operational-considerations"><name>Operational Considerations</name>

<t>The algorithms outlined in this document assume that the party
responsible for 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>possesses the  recipient's public key (for use with ES-DH).</t>
</list></t>

<t>Both scenarios necessitate initial communication to distribute
these keys among the involved parties. This interaction can be
facilitated by a device management protocol, as described in
<xref target="RFC9019"/>, or may occur earlier in the device lifecycle, such
as during manufacturing or commissioning. In addition to the
keying material, key identifiers and algorithm information must
also be provisioned. This specification does not impose any
requirements on the structure of the key identifier.</t>

<t>In certain situations, third-party companies analyze binaries for
known security vulnerabilities. However, encrypted payloads hinder
this type of analysis. Consequently, these third-party companies
must either be granted access to the plaintext binary before
encryption or be authorized recipients of the encrypted payloads.</t>

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

<t>This entire document focuses on security.</t>

<t>It is considered best security practice to use different keys for
different purposes. For instance, the key-encryption key (KEK)
utilized in an AES-KW-based content key distribution method for
encryption should be distinct from the long-term symmetric key
employed for authentication in a communication security protocol.</t>

<t>To further minimize the attack surface, it may be advantageous to
use different long-term keys for encrypting various types of
payloads. For example, KEK_1 could be used with an AES-KW content
key distribution method to encrypt a firmware image, while KEK_2
would encrypt configuration data.</t>

<t>A substantial part of this document focuses on content key
distribution, utilizing two primary methods: AES Key Wrap (AES-KW) and
Ephemeral-Static Diffie-Hellman (ES-DH). The key properties associated
with their deployment are summarized in <xref target="cek-distribution"/>.</t>

<texttable title="Content Key Distribution: Comparison" anchor="cek-distribution">
      <ttcol align='left'>Number ofLong-TermKeys</ttcol>
      <ttcol align='left'>Number of ContentEncryption Keys (CEKs)</ttcol>
      <ttcol align='left'>Use Case</ttcol>
      <ttcol align='left'>Recommended?</ttcol>
      <c>Same key<br />for all<br />devices</c>
      <c>Single CEK per<br />payload shared<br />with all devies</c>
      <c>Legacy Usage</c>
      <c>No, bad<br />practice</c>
      <c>One key<br />per device</c>
      <c>Single CEK per<br />payload shared<br />with all devies</c>
      <c>Efficient<br />Payload<br />Distribution</c>
      <c>Yes</c>
      <c>One Key<br />per device</c>
      <c>One CEK per payload<br />encryption transaction<br />per device</c>
      <c>Point-to-<br />Point Payload<br />Distribution</c>
      <c>Yes</c>
</texttable>

<t>The use of firmware encryption in battery-powered IoT devices introduces the
risk of a battery exhaustion attack. This attack exploits the
high energy cost of flash memory operations. To execute this
attack, the adversary must be able to swap detached payloads
and trick the device into processing an incorrect payload.
Payload swapping is feasible only if there is no communication
security protocol between the device and the distribution
system or if the distribution system itself has been compromised.</t>

<t>While the security features provided by the manifest can detect
this attack and prevent the device from booting with an
incorrectly supplied payload, the energy-intensive flash
operations will have already occurred. As a result, these
operations can diminish the lifespan of the devices, making
battery-powered IoT devices particularly susceptible to such
attacks. For further discussion on IoT devices using flash memory,
see <xref target="flash"/>.</t>

<t>Including the digest of the encrypted firmware in the manifest
enables the device to detect a battery exhaustion attack before
energy-consuming decryption and flash memory copy or swap
operations take place.</t>

<t>As specified in <xref section="8" sectionFormat="of" target="RFC9459"/>, recipients must perform
integrity checks before decryption to mitigate padding oracle
vulnerabilities, particularly when using AES-CBC mode. This practice
not only prevents padding oracle attacks but also protects against
format and decryption oracles, as decryption is skipped if the
integrity check fails. For further details on payload integrity
validation, see <xref target="payload-integrity-validation"/>.</t>

<t>The same combination of IV and AES key MUST NOT be reused. This
requirement applies not only to AES-CTR mode, as specified in
<xref section="4" sectionFormat="of" target="RFC9459"/>, but also to other content encryption
algorithms, including AEAD ciphers like AES-GCM.</t>

<t>Although the examples in this document use the coaps scheme for
payload retrieval, alternative URI schemes like coap and http
can also be used. This flexibility is possible because the SUIT
manifest and this extension do not rely on the TLS layer for security.</t>

<t>Confidentiality, integrity, and authentication are ensured by the
SUIT manifest and the extensions defined in this document. For
details on how the SUIT manifest meets the security requirements
outlined in <xref target="RFC9124"/>, refer to <xref section="12" sectionFormat="of" target="I-D.ietf-suit-manifest"/>.
Additional security considerations for the cryptographic primitives used
in these extensions are discussed in <xref section="11" sectionFormat="of" target="RFC9053"/> and
<xref section="8" sectionFormat="of" target="RFC9459"/>.</t>

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

<t>IANA is asked to add the following value to the SUIT Parameters
registry at <xref target="iana-suit"/>, which is established by <xref section="11.5" sectionFormat="of" target="I-D.ietf-suit-manifest"/>:</t>

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

<t>RFC Editor's Note (TBD19): The value for the Encryption Info
parameter is set to 19, as the proposed value.</t>

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

<reference anchor="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">
         </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="9" month="December" year="2024"/>
      <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 Internet of Things (IoT) device), where to find
   the 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-32"/>
   
</reference>

<reference anchor="RFC9459">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): AES-CTR and AES-CBC</title>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <date month="September" 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="RFC" value="9459"/>
  <seriesInfo name="DOI" value="10.17487/RFC9459"/>
</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="4" month="December" year="2024"/>
      <abstract>
	 <t>   This specification describes extensions to the SUIT Manifest format
   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-09"/>
   
</reference>


<reference anchor="I-D.ietf-suit-mti">
   <front>
      <title>Mandatory-to-Implement Algorithms for Authors and Recipients of Software Update for the Internet of Things manifests</title>
      <author fullname="Brendan Moran" initials="B." surname="Moran">
         <organization>Arm Limited</organization>
      </author>
      <author fullname="Øyvind Rønningstad" initials="O." surname="Rønningstad">
         <organization>Nordic Semiconductor</organization>
      </author>
      <author fullname="Akira Tsukamoto" initials="A." surname="Tsukamoto">
         <organization>ALAXALA Networks Corp.</organization>
      </author>
      <date day="21" month="October" year="2024"/>
      <abstract>
	 <t>   This document specifies algorithm profiles for SUIT manifest parsers
   and authors to ensure better interoperability.  These profiles apply
   specifically to a constrained node software update use case.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-suit-mti-08"/>
   
</reference>




    </references>

    <references title='Informative References' anchor="sec-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="RFC9397">
  <front>
    <title>Trusted Execution Environment Provisioning (TEEP) Architecture</title>
    <author fullname="M. Pei" initials="M." surname="Pei"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <author fullname="D. Thaler" initials="D." surname="Thaler"/>
    <author fullname="D. Wheeler" initials="D." surname="Wheeler"/>
    <date month="July" year="2023"/>
    <abstract>
      <t>A Trusted Execution Environment (TEE) is an environment that enforces the following: any code within the environment cannot be tampered with, and any data used by such code cannot be read or tampered with by any code outside the environment. This architecture document discusses the motivation for designing and standardizing a protocol for managing the lifecycle of Trusted Applications running inside such a TEE.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9397"/>
  <seriesInfo name="DOI" value="10.17487/RFC9397"/>
</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="RFC5869">
  <front>
    <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
    <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
    <author fullname="P. Eronen" initials="P." surname="Eronen"/>
    <date month="May" year="2010"/>
    <abstract>
      <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5869"/>
  <seriesInfo name="DOI" value="10.17487/RFC5869"/>
</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="I-D.ietf-teep-usecase-for-cc-in-network">
   <front>
      <title>TEEP Usecase for Confidential Computing in Network</title>
      <author fullname="Penglin Yang" initials="P." surname="Yang">
         <organization>Dawning Information Industry Co., Ltd.</organization>
      </author>
      <author fullname="Meiling Chen" initials="M." surname="Chen">
         <organization>China Mobile</organization>
      </author>
      <author fullname="Li Su" initials="L." surname="Su">
         <organization>China Mobile</organization>
      </author>
      <author fullname="Ting Pang" initials="T." surname="Pang">
         <organization>Huawei Technology Co.,Ltd.</organization>
      </author>
      <date day="1" month="January" year="2025"/>
      <abstract>
	 <t>   Confidential computing is the protection of data in use by performing
   computation in a hardware-based Trusted Execution Environment.
   Confidential computing could provide integrity and confidentiality
   for users who want to run applications and process data in that
   environment.  When confidential computing is used in scenarios which
   need network to provision user data and applications, TEEP
   architecture and protocol could be used.  This usecase illustrates
   the steps of how to deploy applications, containers, VMs and data in
   different confidential computing hardware in network.  This document
   is a use case and extension of TEEP architecture and could provide
   guidance for cloud computing, MEC (Multi-access Computing) and other
   scenarios to use confidential computing in network.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-teep-usecase-for-cc-in-network-09"/>
   
</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>
<reference anchor="SP800-56" target="http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf">
  <front>
    <title>Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography, NIST Special Publication 800-56A Revision 3</title>
    <author >
      <organization>NIST</organization>
    </author>
    <date year="2018" month="April"/>
  </front>
</reference>


    </references>


<?line 2214?>

<section anchor="full-cddl"><name>Full CDDL</name>

<t>The following CDDL must be appended to the SUIT Manifest CDDL. The SUIT CDDL is defined in
Appendix A of <xref target="I-D.ietf-suit-manifest"/></t>

<figure><sourcecode type="cddl"><![CDATA[
SUIT_Encryption_Info = #6.96(COSE_Encrypt)

$$SUIT_Parameters //= (suit-parameter-encryption-info =>
    bstr .cbor SUIT_Encryption_Info)

suit-parameter-encryption-info = 19
]]></sourcecode></figure>

</section>
<section numbered="no" 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, Dick Brooks, Øyvind Rønningstad, Dave Thaler, Laurence
Lundblade, Christian Amsüss, Ruud Derwig, Martin Thomson. Kris Kwiatkowski, Suresh Krishnan and Carsten Bormann for their review feedback.</t>

<t>We would like to thank the IESG, in particular Deb Cooley, Éric Vyncke and Roman Danyliw, for their help to improve the quality of this document.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+2923bjRpYo+M619A9Y6bMmpbJI4UqC6nZXgwDoVOXVqbRd
Lp9cXhAJSSiRBA2QkuV0nvcz77PWfMo8zFv/yXzJ7EtEIACCpJRlV1VXlbrL
KQGBuOzYse+xd7fbPeisstUsPTXixaS4X67SqfEmuZ/lybQ0soVx/vXZO+Nl
ssgu03JVHnSSi4sivX1o62k+WSRz6HxaJJerbpauLrvlOlt1L7NifpcUaTfl
frJ80bWdg84kWaVXeXF/apSr6UHnoJMti1NjVazLlW2aQ9OGGRRpcmqcp5N1
ka3uDzp3eXFzVeTr5SkNf9C5Se/h2fTUOFus0mKRrroRjo69latkMf0hmeUL
mNN9CjNcZqcHHcMoLifptFzdz+Rzw1jlE/33bDFNFyv1pMyLVZFeltWD+3n9
71WRTar2k3w+h++r99lili200dKfVt1ZVq660NFFPoOG3fx3n+MrAOI8WS6z
xZU+nx9m6W2KzVxcWLJeXecFLqWL7+mHIf8sWSzS0nhXTq7zy3SRXan3eQEd
fr3IbtOiBEga+aURLJezDPb0fJLBxsBno3yx6L69TrNF9zxLq28lGjzrjt6e
q6fpPMlmcsheNeR/Xs1/6sFG4Ey1CWYLmP7bnvEsX5ez9L4x8bfrstx4BXMG
7Po5QYQ5Nb7JrrKZQoVj48WLcGOG9TbNqV5z//95i63KdNKDfarPkiY56hkv
8yJZyIc8w1GRLqbJov6qPsOgmBsvsnkGB0U2ECOLj3v08X8mxXzL0FEPmuZ3
jaGj5Dab1l/UB36RLZIib4w5xa96F/jVf86oQQ++ahn0ec94l9wk98k8qY/7
PF1svKkPfB6Hr18a4esebMe7qNeYwU266K3E9z0kB4Aa8EKufZEXc+jnNqVD
+XYc2pY1lL87ztCVvw9Nz9Z+d+TvvjXgNmfdqFeRm7kgSeoT1xu2NCM6053m
MCWAQks3K6QWQJQWl82JDs1qokNnOFC/W7aatOf3VRt/6Kg2Xr9ajGf75kZ7
NYtVmi67a8DTpEy7MIfuZNKFowlHC6kgtc2SRUKzPWXQV5ShOvSSMBpBWWZX
Czjwr9bzCyADRkCt1UERrOEseBXUabvxNr0CYlWIdlMg26eGbSIJp++S4ioF
4vduFNFaXr/ZMZtvs5tsmU6zpDbm23S1Lhbd1wVQImIzRX5VJPM5kEF9TLPf
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
uE1rH8zq/wc2a3rzvmYBAA==

-->

</rfc>

