<?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-26" 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="December" day="08"/>

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

<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 counter value MUST start with the
IV value and incremented by one for each 16-byte plaintext block. The IV value MAY be
provided by the COSE header field or is communicated via out-of-band means, for example by
setting it to a given value (e.g. the value of zero). Firmware authors MUST make sure that
the same IV and AES content key encryption combination is not used more than once.
Communicating the IV value inside the COSE header is RECOMMENDED.</t>

<t>The following abbreviations are used in <xref target="aes-ctr-fig"/>:</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>

<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>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>
<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 the AES-CTR 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-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>

<t>To offer a specific 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 an AES plaintext block
size of 16 bytes. The counter values used with AES-CTR range from IV+0 to IV+255 in the
first sector, and 16 * 256 counter values are required for the slot. This</t>

<t>IV value is either communicated in the COSE header or via out-of-band means.</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: -9 / ESP256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / signature: / h'2B20A797AC7DBEBC53147592BB110AEC
/ 15/                        43A2489AC19A169BB59FF6BD429300A9
/ 16/                        719FEB7DF277E4B8D1D821C816854229
/ 17/                        F266AC62AFD9DB52114F608EE66B187B'
/ 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
B4ADD03902BDB3D1EDF3DA2075F593584AD28443A10128A0F658402B20A7
97AC7DBEBC53147592BB110AEC43A2489AC19A169BB59FF6BD429300A971
9FEB7DF277E4B8D1D821C816854229F266AC62AFD9DB52114F608EE66B18
7B0358E8A4010102010357A1028181526465637279707465642D6669726D
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: -9 / ESP256 /
/ 11/       } >>,
/ 12/       / unprotected: / {},
/ 13/       / payload: / null,
/ 14/       / signature: / h'3000301B7C54B3383CC4723C4B7BE667
/ 15/                        C6760C504213A105DD38401BED5EEF8E
/ 16/                        B915F8313420104F59467D76790A0EA2
/ 17/                        20B6021B4ED87051B3B4A8D05F7E0254'
/ 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: -9 / ESP256 /
/110/           } >>,
/111/           / unprotected: / {},
/112/           / payload: / null,
/113/           / signature: / h'BF95C29295B45470EF819E7F4E3C9084
/114/                            F4534E26469C0A0F2B8B9664881A5359
/115/                            D500F81BD3A6436A025C3E92E51CD714
/116/                            8F83DF47D29FF253F8D41B4D350A2B75'
/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
71B3C7EA2A43DE13D32C4A99056FE9584AD28443A10128A0F65840300030
1B7C54B3383CC4723C4B7BE667C6760C504213A105DD38401BED5EEF8EB9
15F8313420104F59467D76790A0EA220B6021B4ED87051B3B4A8D05F7E02
540359016CA501010201035837A201A101A101815818646570656E64656E
63792D6D616E69666573742E73756974028181526465637279707465642D
6669726D77617265058157646570656E64656E742D6D616E69666573742E
737569741459010F8E0C0014A212582E758C4B7BBAE2C4C1D462423E0F0D
C3164FFA7B85BB94D4BD6D7ED26AB32FEB063385D4D3465927EC82CB5E19
8A5913588CD8608443A10101A1054CF14AAB9D81D51F7AD943FE87F68183
44A101381CA220A40102200121582073024F415AA51529A66CCEFD88F3F6
2A734492FF45F6AD37FD2888E73EAF19DA2258204005B48A6FD091AA6ABF
E3CFBEEDE88B347E521D43405FDBD7D2CFF0EBC21B2604456B69642D3258
18A06B8E6550F308712B1DF044B21B7D11D9B22792F1DE09970C0114A303
5824822F58204B15C90FBD776A820E7E733DF040D90B356B5C75982ECAEC
E8673818179BDF160E18F7157423646570656E64656E63792D6D616E6966
657374150F070F0B0F7423646570656E64656E63792D6D616E6966657374
58F7D86BA2025873825824822F58204B15C90FBD776A820E7E733DF040D9
0B356B5C75982ECAECE8673818179BDF16584AD28443A10128A0F65840BF
95C29295B45470EF819E7F4E3C9084F4534E26469C0A0F2B8B9664881A53
59D500F81BD3A6436A025C3E92E51CD7148F83DF47D29FF253F8D41B4D35
0A2B7503587BA601010201035849A2028181526465637279707465642D66
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>The recipient MUST verify that the algorithm identifiers carried
in both the outer header of the COSE_Encrypt structure and within
each recipient structure correspond to the algorithm configuration
expected at the recipient, as defined by local policy. If any
mismatch is detected between the algorithm identifiers and the
configured algorithms, the recipient MUST reject the message.
This prevents an attacker from modifying the algorithm field to
perform a downgrade attack (for example, changing an AEAD cipher to
a non-AEAD cipher) or to cause the recipient to use a key for an
unintended purpose.</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 the AES-CTR 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">
         <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
      </author>
      <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname="Koen Zandberg" initials="K." surname="Zandberg">
         <organization>Inria</organization>
      </author>
      <author fullname="Øyvind Rønningstad" initials="O." surname="Rønningstad">
         <organization>Nordic Semiconductor</organization>
      </author>
      <date day="28" month="May" year="2025"/>
      <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-34"/>
   
</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>Software Update for the Internet of Things (SUIT) Manifest Extensions for Multiple Trust Domain</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="22" month="July" year="2025"/>
      <abstract>
	 <t>   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.  This specification describes extensions to the
   Software Update for the Internet of Things (SUIT) Manifest format for
   use in deployments with multiple trust domains.

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


<reference anchor="I-D.ietf-suit-mti">
   <front>
      <title>Cryptographic Algorithms for Internet of Things (IoT) Devices</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>Openchip &amp; Software Technologies, S.L.</organization>
      </author>
      <date day="22" month="July" year="2025"/>
      <abstract>
	 <t>   The SUIT manifest, as defined in &quot;A Manifest Information Model for
   Firmware Updates in Internet of Things (IoT) Devices&quot; (RFC 9124),
   provides a flexible and extensible format for describing how firmware
   and software updates are to be fetched, verified, decrypted, and
   installed on resource-constrained devices.  To ensure the security of
   these update processes, the manifest relies on cryptographic
   algorithms for functions such as digital signature verification,
   integrity checking, and confidentiality.

   This document defines cryptographic algorithm profiles for use with
   the Software Updates for Internet of Things (SUIT) manifest.  These
   profiles specify sets of algorithms to promote interoperability
   across implementations.

   Given the diversity of IoT deployments and the evolving cryptographic
   landscape, algorithm agility is essential.  This document groups
   algorithms into named profiles to accommodate varying levels of
   device capabilities and security requirements.  These profiles
   support the use cases laid out in the SUIT architecture, published in
   &quot;A Firmware Update Architecture for Internet of Things&quot; (RFC 9019).

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-suit-mti-23"/>
   
</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="Meiling Chen" initials="M." surname="Chen">
         <organization>China Mobile</organization>
      </author>
      <author fullname="Penglin Yang" initials="P." surname="Yang">
         <organization>Dawning Information Industry Co., Ltd.</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="30" month="June" 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-11"/>
   
</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 2055?>

<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:
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
+U9rTr1ctfjRqv5/P09PYeFVAQA=

-->

</rfc>

