<?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-18" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Encrypted Payloads in SUIT Manifests">Encrypted Payloads in SUIT Manifests</title>

    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization></organization>
      <address>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="R." surname="Housley" fullname="Russ Housley">
      <organization abbrev="Vigil Security">Vigil Security, LLC</organization>
      <address>
        <email>housley@vigilsec.com</email>
      </address>
    </author>
    <author initials="B." surname="Moran" fullname="Brendan Moran">
      <organization>Arm Limited</organization>
      <address>
        <email>Brendan.Moran@arm.com</email>
      </address>
    </author>
    <author initials="D." surname="Brown" fullname="David Brown">
      <organization>Linaro</organization>
      <address>
        <email>david.brown@linaro.org</email>
      </address>
    </author>
    <author initials="K." surname="Takayama" fullname="Ken Takayama">
      <organization>SECOM CO., LTD.</organization>
      <address>
        <email>ken.takayama.ietf@gmail.com</email>
      </address>
    </author>

    <date year="2023" month="October" day="23"/>

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

    <abstract>


<?line 93?>

<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 102?>

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

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

<t><xref target="RFC9124"/> details the information that has to be provided by the SUIT
manifest format. In addition to offering protection against modification,
via a digital signature or a message authentication code,
confidentiality may also be afforded.</t>

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

<t>While the original motivating use case of this document was firmware
encryption, the use of SUIT manifests has been extended to other use cases
requiring integrity and confidentiality protection, such as:</t>

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

<t>Hence, we use the term payload to generically refer to all those objects.</t>

<t>The payload is encrypted using a symmetric content encryption
key, which can be established using a variety of mechanisms; this
document defines two content key distribution methods for use with
the IETF SUIT manifest, namely:</t>

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

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

<t>Our goal was to reduce the number of content key distribution methods
for use with payload encryption and thereby increase interoperability
between different SUIT manifest parser implementations.</t>

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

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>

<t>This document assumes familiarity with the IETF SUIT manifest <xref target="I-D.ietf-suit-manifest"/>,
the SUIT information model <xref target="RFC9124"/>, and the SUIT architecture <xref target="RFC9019"/>.</t>

<t>The following abbreviations are used in this document:</t>

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

<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.</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"/> describes the architecture for distributing payloads and
manifests from an author to devices. It does, however, not detail the
use of payload encryption. This document enhances the architecture to
support encryption.</t>

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

<t>The sender (author) needs to know the recipient (device) to use encryption.
For AES-KW, the KEK needs to be known and, in case of ES-DH, the sender needs
to be in possession of the public key of the recipient. The public key and
parameters may be in the recipient's X.509 certificate <xref target="RFC5280"/>. For
authentication of the sender and for integrity protection the recipients
must be provisioned with a trust anchor when a manifest is protected using
a digital signature. When a MAC is used to protect the manifest then a
symmetric key must be shared by the recipient and the sender.</t>

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

<figure title="Architecture for the distribution of Encrypted Payloads." anchor="arch-fig"><artwork><![CDATA[
 +----------+
 |  Device  |                              +----------+
 |    1     |<--+                          |  Author  |
 |          |   |                          +----------+
 +----------+   |                               |
                |                               | Payload +
                |                               | Manifest
                |                               v
 +----------+   |                        +--------------+
 |  Device  |   |  Payload + Manifest    | Distribution |
 |    2     |<--+------------------------|    System    |
 |          |   |                        +--------------+
 +----------+   |
                |
      ...       |
                |
 +----------+   |
 |  Device  |   |
 |    n     |<--+
 |          |
 +----------+
]]></artwork></figure>

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

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

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

<t><list style="numbers">
  <t>The distributor replaces the COSE_Encrypt in the manifest and then signs the
manifest again. However, the COSE_Encrypt structure is contained within a signed
container, which presents a problem: replacing the COSE_Encrypt with a new one
will cause the digest of the manifest to change, thereby changing the signature.
This means that the distributor must be able to sign the new manifest. If this
is the case, then the distributor  gains the ability to construct and sign
manifests, which allows the distributor the authority to sign code, effectively
presenting the distributor with full control over the recipient. Because
distributors typically perform their re-encryption online in order to handle
a large number of devices in a timely fashion, it is not possible to air-gap
the distributor's signing operations. This impacts the recommendations in
Section 4.3.17 of <xref target="RFC9124"/>.</t>
  <t>The distributor uses a two-manifest system. More precisely, the distributor
constructs a new manifest that overrides the COSE_Encrypt using the dependency
system defined in <xref target="I-D.ietf-suit-trust-domains"/>. This incurs additional
overhead: one additional signature verification and one additional manifest,
as well as the additional machinery in the recipient needed for dependency
processing.</t>
</list></t>

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

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

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

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

<t>The SUIT_Encryption_Info structure (called suit-parameter-encryption-info in
<xref target="parameter-fig"/>) contains the content key distribution information. The
content of the SUIT_Encryption_Info structure is explained in <xref target="AES-KW"/>
(for AES-KW) and in <xref target="ES-DH"/> (for ES-DH).</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 described in this
section.</t>

<t>The SUIT_Encryption_Info structure is either carried inside the
suit-directive-override-parameters or the suit-directive-set-parameters
parameters used in the "Directive Write" and "Directive Copy" directives.
An implementation claiming conformance with this specification
must implement support for these two parameters. Since a device will
typically only support one of the content key distribution methods,
the distribution system needs to know which of two specified methods
wis supported. Mandating only a single content key distribution
method for a constrained device also reduces the code size.</t>

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

suit-parameter-encryption-info = 19
]]></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="extended-directives"><name>Extended Directives</name>

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

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

<t>Examples of the two directives are shown below.</t>

<t><xref target="encryption-info-consumed-with-write"/> illustrates the Directive Write.
The encrypted payload specified with parameter-content, namely
h'EA1...CED' in the example, is decrypted using the SUIT_Encryption_Info
structure referred to by parameter-encryption-info, i.e., h'D86...1F0'.
The resulting plaintext payload is stored into component #0.</t>

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

<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. "http://example.com/encrypted.bin". The
encrypted payload will be downloaded and stored in component #1.
Then, the information in the SUIT_Encryption_Info structure of the
parameter-encryption-info, i.e. h'D86...1F0', will be used to
decrypt the content in component #1 and the resulting plaintext
payload will be stored into component #0.</t>

<figure title="Example showing the extended suit-directive-copy." anchor="encryption-info-consumed-with-copy"><artwork><![CDATA[
/ directive-set-component-index / 12, 1,
/ directive-override-parameters / 20, {
  / parameter-uri / 21: "http://example.com/encrypted.bin",
},
/ directive-fetch / 21, 15,
/ directive-set-component-index / 12, 0,
/ directive-override-parameters / 20, {
  / parameter-source-component / 22: 1,
  / parameter-encryption-info / 19: h'D86...1F0'
},
/ directive-copy / 22, 15
]]></artwork></figure>

<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 payload 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 Section
8.4.8.6 of <xref 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>

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

<t>The sub-sections below describe two content key distribution methods,
namely AES Key Wrap (AES-KW) and Ephemeral-Static Diffie-Hellman (ES-DH).
Many other methods are specified in the literature, and even supported
by COSE. New methods can be added via enhancements to this specification.
The two specified methods were selected to their maturity, different
security properties, and to ensure interoperability in deployments.</t>

<t>The two content key distribution methods require the CEKs to be
randomly generated. It must be ensured that the guidelines for random
number generation in <xref target="RFC8937"/> are followed.</t>

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

<figure><artwork><![CDATA[
   - KEK(R1, S) refers to a KEK shared between recipient R1 and
     the sender S. The KEK, as a concept, is used by AES Key Wrap
     but not by ES-DH.
   - 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 is described in <xref target="RFC3394"/>, and
can be used to encrypt a randomly generated content-encryption key (CEK)
with a pre-shared key-encryption key (KEK). The COSE conventions for using
AES-KW are specified in Section 8.5.2 of <xref target="RFC9052"/> and in Section 6.2.1 of
<xref target="RFC9053"/>. The encrypted CEK is carried in the COSE_recipient structure
alongside the information needed for AES-KW. The COSE_recipient structure,
which is a substructure of the COSE_Encrypt structure, contains the CEK
encrypted by the KEK.</t>

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

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

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

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

<t><list style="symbols">
  <t>If all 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 stronly 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).
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="cddl"><name>CDDL</name>

<t>The CDDL for the COSE_Encrypt_Tagged structure 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"><artwork><![CDATA[
outer_header_map_protected = empty_or_serialized_map
outer_header_map_unprotected = header_map

SUIT_Encryption_Info_AESKW = [
  protected   : bstr .cbor outer_header_map_protected,
  unprotected : outer_header_map_unprotected,
  ciphertext  : bstr / nil,
  recipients  : [ + COSE_recipient_AESKW .within COSE_recipient ]
]

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,         ; algorithm identifier
  ? 4 => bstr,        ; identifier of the KEK pre-shared with the recipient
  * label => values   ; extension point
}
]]></artwork></figure>

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

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

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

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-GCM-128
  <list style="symbols">
      <t>IV: h'93702C81590F845D9EC866CCAC767BD1'</t>
    </list></t>
  <t>Algorithm id for key wrap: A128KW</t>
  <t>KEK COSE_Key (Secret Key):
  <list style="symbols">
      <t>/ kty / 1: 4 / Symmetric /</t>
      <t>/ k / -1: 'aaaaaaaaaaaaaaaa'</t>
    </list></t>
  <t>KID: 'kid-1'</t>
  <t>Plaintext: "This is a real firmware image."
  <list style="symbols">
      <t>in hex: 546869732069732061207265616C206669726D7761726520696D6167652E</t>
    </list></t>
</list></t>

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

<figure><artwork><![CDATA[
D8608443A10101A10550F14AAB9D81D51F7AD943FE87AF4F70CDF6818341
A0A2012204456B69642D31581875603FFC9518D794713C8CA8A115A7FB32
565A6D59534D62
]]></artwork></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"><artwork><![CDATA[
96([
  / protected: / << {
    / alg / 1: 1 / AES-GCM-128 /
  } >>,
  / unprotected: / {
    / IV / 5: h'F14AAB9D81D51F7AD943FE87AF4F70CD'
  },
  / payload: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / << {
      } >>,
      / unprotected: / {
        / alg / 1: -3 / A128KW /,
        / kid / 4: 'kid-1'
      },
      / payload: /
        h'75603FFC9518D794713C8CA8A115A7FB32565A6D59534D62'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></artwork></figure>

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

<figure><artwork><![CDATA[
2F59C3A34D9570FB99A5382E66466A3221A8AD85CE508BA306FB431A60EF
A5AAAA078355070205A4B196832DF17F
]]></artwork></figure>

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

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

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

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

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

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

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

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

<t><list style="symbols">
  <t>A sender wants to transmit a payload to multiple recipients. All recipients
shall receive the same encrypted payload, i.e. the same CEK is used.
One COSE_recipient structure per recipient is used and it contains the
CEK encrypted with the KEK. To generate the KEK each COSE_recipient structure
contains a COSE_recipient_inner structure to carry the sender's ephemeral key
and an identifier for the recipients 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 a payload with a different CEK for each
recipient. This results in n-manifests. This approach is useful when payloads contain
information unique to a device. The encryption operation then effectively becomes
ENC(payload_i, CEK(Ri, S)). Assume that KEK(R1, S),..., KEK(Rn, S) have been generated
for the different recipients using ES-DH. The following steps need to be made
by the sender:</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="cddl-1"><name>CDDL</name>

<t>The CDDL for the COSE_Encrypt_Tagged structure is shown in <xref target="cddl-esdh"/>.
Only the minimum number of parameters is shown. empty_or_serialized_map
and header_map are structures defined in <xref target="RFC9052"/>.</t>

<figure title="CDDL for ES-DH-based Content Key Distribution" anchor="cddl-esdh"><artwork><![CDATA[
outer_header_map_protected = empty_or_serialized_map
outer_header_map_unprotected = header_map

SUIT_Encryption_Info_ESDH = [
  protected   : bstr .cbor outer_header_map_protected,
  unprotected : outer_header_map_unprotected,
  ciphertext  : bstr / nil,
  recipients  : [ + COSE_recipient_ESDH .within COSE_recipient ]
]

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,         ; algorithm identifier
  * label => values   ; extension point
}

recipient_header_unpr_map_esdh =
{
   -1 => COSE_Key,    ; ephemeral public key for the sender
  ? 4 => bstr,        ; identifier of the recipient public key
  * label => values   ; extension point
}
]]></artwork></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 is used to ensure that the derived keying material
is "bound" to the context of the transaction. This specification re-uses the structure
defined in Section 5.2 of <xref target="RFC9053"/> and tailors it accordingly.</t>

<t>The following information 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 algorithm identifier
for AES Key Wrap algorithm utilized. 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 contain the key length
of the algorithm in the COSE_KDF_Context.AlgorithmID field expressed as the number
of bits. 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 in
which the ES-DH content key distribution algorithm is used and 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 fields)
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 .cbor recipient_header_map_esdh,
        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 Section 5.1 of <xref target="RFC9053"/>. This optional value is used to
influence the key generation process. This specification does not mandate the
use of a salt value. If the salt is public and carried in the message, then
the "salt" algorithm header parameter MUST be used. The purpose of the salt
is to provide extra randomness in the KDF context. If the salt is sent
in the 'salt' algorithm header parameter, then the receiver MUST be able to
process the salt and MUST pass it into the key derivation function.
For more information about the salt, see <xref target="RFC5869"/> and NIST
SP800-56 <xref target="SP800-56"/>.</t>

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

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

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

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-GCM-128
  <list style="symbols">
      <t>IV: h'3517CE3E78AC2BF3D1CDFDAF955E8600'</t>
    </list></t>
  <t>Algorithm for content key distribution: ECDH-ES + A128KW</t>
  <t>KEK COSE_Key (Receiver's Private Key):
  <list style="symbols">
      <t>/ kty / 1: 2 / EC2 /</t>
      <t>/ crv / -1: 1 / P-256 /</t>
      <t>/ x / -2: h'5886CD61DD875862E5AAA820E7A15274C968A9BC96048DDCACE32F50C3651BA3'</t>
      <t>/ y / -3: h'9EED8125E932CD60C0EAD3650D0A485CF726D378D1B016ED4298B2961E258F1B'</t>
      <t>/ d / -4: h'60FE6DD6D85D5740A5349B6F91267EEAC5BA81B8CB53EE249E4B4EB102C476B3'</t>
    </list></t>
  <t>KID: 'kid-2'</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: -3 / A128KW / } &gt;&gt;</t>
          <t>other = 'SUIT Payload Encryption'</t>
        </list></t>
    </list></t>
  <t>Plaintext: "This is a real firmware image."
  <list style="symbols">
      <t>in hex: 546869732069732061207265616C206669726D7761726520696D6167652E</t>
    </list></t>
</list></t>

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

<figure><artwork><![CDATA[
D8608443A10101A10550DAE613B2E0DC55F4322BE38BDBA9DC68F6818344
A101381CA220A401022001215820FF6E266DABAF51B7207569E31CF72646
183E94CEE64FCDC8695AD9A505AEFDEA2258205FBC4A29844450B3AC22AB
30C7F7004BB59D8BD60D7997734A9FA0124B65089504456B69642D325818
B0E21628283F3E409F8158D8FFCA567F340E379AC39E49C9
]]></artwork></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"><artwork><![CDATA[
96([
  / protected: / << {
    / alg / 1: 1 / AES-GCM-128 /
  } >>,
  / unprotected: / {
    / IV / 5: h'DAE613B2E0DC55F4322BE38BDBA9DC68'
  },
  / payload: / 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'FF6E266DABAF51B7207569E31CF72646
                      183E94CEE64FCDC8695AD9A505AEFDEA',
          / y / -3: h'5FBC4A29844450B3AC22AB30C7F7004B
                      B59D8BD60D7997734A9FA0124B650895'
        },
        / kid / 4: 'kid-2'
      },
      / payload:
        / h'B0E21628283F3E409F8158D8FFCA567F340E379AC39E49C9'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></artwork></figure>

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

<figure><artwork><![CDATA[
344FA2D5AD2F43F6F363DA6FF2C337FE69E33E3D63714D23985BF02499EB
0E8B231D45C378245DA3611C160CC511
]]></artwork></figure>

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

<t>This section summarizes the steps taken for content encryption, which
applies to both content key distribution methods.</t>

<t>For use with AEAD ciphers, the COSE specification requires a consistent byte
stream for the authenticated data structure to be created. This structure
is shown in <xref target="cddl-enc-aeskw"/> and is defined in Section 5.3 of <xref target="RFC9052"/>.</t>

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

<t>This Enc_structure needs to be populated as follows:</t>

<t>The protected field in the Enc_structure from <xref target="cddl-enc-aeskw"/> refers
to the content of the protected field from the COSE_Encrypt structure.</t>

<t>The value of the external_aad MUST be set to a zero-length byte string,
i.e., h'' in diagnostic notation and encoded as 0x40.</t>

<t>For use with ciphers that do not provide integrity protection, such as
AES-CTR and AES-CBC (see <xref target="I-D.ietf-cose-aes-ctr-and-cbc"/>), the
Enc_structure shown in <xref target="cddl-enc-aeskw"/> MUST NOT be used
because the Enc_structure represents the Additional Authenticated Data
(AAD) byte string consumable only by AEAD ciphers. Hence, the 
Additional Authenticated Data structure is not supplied to the 
API of the cipher. The protected header in the SUIT_Encryption_Info_AESKW
or SUIT_Encryption_Info_ESDH structure MUST be a zero-length byte string,
respectively.</t>

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

<t>Note: This section is specific to firmware images and does not apply to
generic software, configuration data, and machine learning models.</t>

<t>Flash memory on microcontrollers is a type of non-volatile memory that erases
data in units called blocks, pages, or sectors and re-writes data at the byte level
(often 4-bytes) or larger units.
Flash memory is furthermore segmented into different memory regions, which store
the bootloader, different versions of firmware images (in so-called slots),
and configuration data. <xref target="image-layout"/> shows an example layout of a
microcontroller flash area. The primary slot typically contains the firmware image
to be executed by the bootloader, which is a common deployment on devices that do
not offer the concept of position independent code. Position independent code
is not a feature frequently found in real-time operating systems used on
microcontrollers. There are many flavors of embedded devices, the market
is large and fragmented. Hence, it is likely that some implementations and deployments
implement their firmware update procedure different than described below.
On a positive note, the SUIT manifest allows different deployment scenarios
to be supported easily thanks to the "scripting" functionality offered by
the commands.</t>

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

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

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

<t>This approach of swapping the newly downloaded image with the previously valid
image requires two slots to allow the update to be reversed in case the newly obtained
firmware image fails to boot. This approach adds robustness to the firmware
update procedure.</t>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<t><list style="symbols">
  <t>Algorithm for payload encryption: A128-CBC
  <list style="symbols">
      <t>IV: h'93702C81590F845D9EC866CCAC767BD1'</t>
    </list></t>
  <t>Algorithm id for key wrap: A128KW</t>
  <t>KEK COSE_Key (Secret Key):
  <list style="symbols">
      <t>/ kty / 1: 4 / Symmetric /</t>
      <t>/ k / -1: 'aaaaaaaaaaaaaaaa'</t>
    </list></t>
  <t>KID: 'kid-1'</t>
  <t>Plaintext: "This is a real firmware image."
  <list style="symbols">
      <t>in hex: 546869732069732061207265616C206669726D7761726520696D6167652E</t>
    </list></t>
</list></t>

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

<figure><artwork><![CDATA[
D8608445A10139FFFAA1055093702C81590F845D9EC866CCAC767BD1F681
8341A0A2012204456B69642D315818E198FF269626EC43299D33586FC7B2
646B13292261160422
]]></artwork></figure>

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

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

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

<figure><artwork><![CDATA[
9C09156CF4ACE0401086D98586E0B09FA5B5CF78F2BCCBF6C914DDB42BF0
E21E
]]></artwork></figure>

</section>
<section anchor="es-dh-aes-cbc-example"><name>ES-DH + AES-CBC Example</name>

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

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-CBC-128
  <list style="symbols">
      <t>IV: h'DAE613B2E0DC55F4322BE38BDBA9DC68'</t>
    </list></t>
  <t>Algorithm for content key distribution: ECDH-ES + A128KW</t>
  <t>KEK COSE_Key (Receiver's Private Key):
  <list style="symbols">
      <t>/ kty / 1: 2 / EC2 /</t>
      <t>/ crv / -1: 1 / P-256 /</t>
      <t>/ x / -2: h'5886CD61DD875862E5AAA820E7A15274C968A9BC96048DDCACE32F50C3651BA3'</t>
      <t>/ y / -3: h'9EED8125E932CD60C0EAD3650D0A485CF726D378D1B016ED4298B2961E258F1B'</t>
      <t>/ d / -4: h'60FE6DD6D85D5740A5349B6F91267EEAC5BA81B8CB53EE249E4B4EB102C476B3'</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: -3 / A128KW / } &gt;&gt;</t>
          <t>other = 'SUIT Payload Encryption'</t>
        </list></t>
    </list></t>
  <t>Plaintext: "This is a real firmware image."
  <list style="symbols">
      <t>in hex: 546869732069732061207265616C206669726D7761726520696D6167652E</t>
    </list></t>
</list></t>

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

<figure><artwork><![CDATA[
D8608445A10139FFFAA10550DAE613B2E0DC55F4322BE38BDBA9DC68F681
8344A101381CA120A401022001215820BE4FB61E951F0378F453B610C91D
DD29EF00CD36A0957F9686AC7D693E8880A32258200DF7D9253B34FC0247
A11E15F20281680447896BE91B65E1D1E06D3E5FC57B0A581832970E4511
E3709F118B838C5EDD62A05A1421558CE56C20
]]></artwork></figure>

<t>The resulting COSE_Encrypt structure in a diagnostic format is shown in
<xref target="esdh-aescbc-example"/>. Note that the COSE_Encrypt structure also needs to
be protected and authenticated by the suit-authentication-wrapper,
which is not shown below.</t>

<figure title="COSE_Encrypt Example for ES-DH" anchor="esdh-aescbc-example"><artwork><![CDATA[
96([
  / protected: / << {
    / alg / 1: -65531 / A128CBC /
  } >>,
  / unprotected: / {
    / IV / 5: h'DAE613B2E0DC55F4322BE38BDBA9DC68'
  },
  / payload: / 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'BE4FB61E951F0378F453B610C91DDD29EF00CD36A0957F9686AC7D693E8880A3',
          / y / -3: h'0DF7D9253B34FC0247A11E15F20281680447896BE91B65E1D1E06D3E5FC57B0A'
        }
      },
      / payload: / h'32970E4511E3709F118B838C5EDD62A05A1421558CE56C20'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></artwork></figure>

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

<figure><artwork><![CDATA[
9C09156CF4ACE0401086D98586E0B09FA5B5CF78F2BCCBF6C914DDB42BF0
E21E
]]></artwork></figure>

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

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

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

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

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

<section 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 for payload encryption: AES-CTR-128
  <list style="symbols">
      <t>IV: h'93702C81590F845D9EC866CCAC767BD1'</t>
    </list></t>
  <t>Algorithm id for key wrap: A128KW</t>
  <t>KEK COSE_Key (Secret Key):
  <list style="symbols">
      <t>/ kty / 1: 4 / Symmetric /</t>
      <t>/ k / -1: 'aaaaaaaaaaaaaaaa'</t>
    </list></t>
  <t>KID: 'kid-1'</t>
  <t>Plaintext: "This is a real firmware image."
  <list style="symbols">
      <t>in hex: 546869732069732061207265616C206669726D7761726520696D6167652E</t>
    </list></t>
</list></t>

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

<figure><artwork><![CDATA[
D8608445A10139FFFDA1055093702C81590F845D9EC866CCAC767BD1F681
8341A0A2012204456B69642D315818CE34035CE5C2E2666E46D4C131FC56
1DD190A6D26CFA1990
]]></artwork></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"><artwork><![CDATA[
96([
  / protected: / << {
    / alg / 1: -65534 / A128CTR /
  } >>,
  / unprotected: / {
    / IV / 5: h'93702C81590F845D9EC866CCAC767BD1'
  },
  / payload: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / << {
      } >>,
      / unprotected: / {
        / alg / 1: -3 / A128KW /,
        / kid / 4: 'kid-1'
      },
      / payload: /
        h'CE34035CE5C2E2666E46D4C131FC561DD190A6D26CFA1990'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></artwork></figure>

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

<figure><artwork><![CDATA[
B74188DE68CD904873C7D4AB265A7F5608AC63F68DBBCE7773ADCB38DA07
]]></artwork></figure>

</section>
<section anchor="es-dh-aes-ctr-example"><name>ES-DH + AES-CTR Example</name>

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

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-CTR-128
  <list style="symbols">
      <t>IV: h'DAE613B2E0DC55F4322BE38BDBA9DC68'</t>
    </list></t>
  <t>Algorithm for content key distribution: ECDH-ES + A128KW</t>
  <t>KEK COSE_Key (Receiver's Private Key):
  <list style="symbols">
      <t>/ kty / 1: 2 / EC2 /</t>
      <t>/ crv / -1: 1 / P-256 /</t>
      <t>/ x / -2: h'5886CD61DD875862E5AAA820E7A15274C968A9BC96048DDCACE32F50C3651BA3'</t>
      <t>/ y / -3: h'9EED8125E932CD60C0EAD3650D0A485CF726D378D1B016ED4298B2961E258F1B'</t>
      <t>/ d / -4: h'60FE6DD6D85D5740A5349B6F91267EEAC5BA81B8CB53EE249E4B4EB102C476B3'</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: -3 / A128KW / } &gt;&gt;</t>
          <t>other = 'SUIT Payload Encryption'</t>
        </list></t>
    </list></t>
  <t>Plaintext: "This is a real firmware image."
  <list style="symbols">
      <t>in hex: 546869732069732061207265616C206669726D7761726520696D6167652E</t>
    </list></t>
</list></t>

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

<figure><artwork><![CDATA[
D8608445A10139FFFDA10550DAE613B2E0DC55F4322BE38BDBA9DC68F681
8344A101381CA120A401022001215820CB2A8EEAF7E260F02AD5C29E4608
939A6487E2172D239562819E5F52C6D34674225820FB6F870883864A9B14
828501FE47A4E9282A7065CD1C234E8A3BCE46F49A1A9F581818DC08054C
462C7977EE90FA2B9DE62FF6D42E398CEE8168
]]></artwork></figure>

<t>The resulting COSE_Encrypt structure in a diagnostic format is shown in
<xref target="esdh-aesctr-example"/>. Note that the COSE_Encrypt structure also needs to
be protected and authenticated by the suit-authentication-wrapper,
which is not shown below.</t>

<figure title="COSE_Encrypt Example for ES-DH" anchor="esdh-aesctr-example"><artwork><![CDATA[
96([
  / protected: / << {
    / alg / 1: -65534 / A128CTR /
  } >>,
  / unprotected: / {
    / IV / 5: h'DAE613B2E0DC55F4322BE38BDBA9DC68'
  },
  / payload: / 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'CB2A8EEAF7E260F02AD5C29E4608939A6487E2172D239562819E5F52C6D34674',
          / y / -3: h'FB6F870883864A9B14828501FE47A4E9282A7065CD1C234E8A3BCE46F49A1A9F'
        }
      },
      / payload: / h'18DC08054C462C7977EE90FA2B9DE62FF6D42E398CEE8168'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></artwork></figure>

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

<figure><artwork><![CDATA[
2BB8DB522AE978246CC775C3B0241BD4B0333FFDD2DB70C7EE7A4966E3B7
]]></artwork></figure>

</section>
</section>
<section anchor="battery-exhaustion-attacks"><name>Battery Exhaustion Attacks</name>

<t>The use of flash memory opens up for another attack. An attacker may swap
detached payloads and thereby force the device to process a wrong
payload. While this attack will be detected, a device may have performed
energy-expensive flash operations already. These operations may reduce
the lifetime of devices when they are battery powered Iot devices. See
<xref target="flash"/> for further discussion about IoT devices using flash memory.</t>

<t>Including the digest of the encrypted payload allows the device to
detect a battery exhaustion attack before energy consuming decryption
and flash operations took place. Including the digest of the plaintext
payload is adequate when battery exhaustion attacks are not a concern.</t>

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

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

<t>HMAC-256 MAC are added in AES-KW examples using 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 requests a parser
to authenticate the manifest with COSE_Mac0 HMAC256,
and to write and to decrypt the
encrypted payload into a component with the suit-directive-write
directive.</t>

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

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107({
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: / h'536EC695E423342FF57FA89B3E3C12C0
                          F9257992F7D96F017281782D2DF1C50F'
    ] >>,
    << / COSE_Mac0_Tagged / 17([
      / protected: / << {
        / algorithm-id / 1: 5 / HMAC256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / tag: / h'3B70571169B0FEE5E6220BF86E5E973F
                 7F32875495908EDAA91EC994BCA44B29'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 1,
    / common / 3: << {
      / components / 2: [
        ['plaintext-firmware']
      ]
    } >>,
    / install / 17: << [
      / fetch encrypted firmware /
      / directive-override-parameters / 20, {
        / parameter-content / 18:
          h'2F59C3A34D9570FB99A5382E66466A3221A8AD85CE508B
            A306FB431A60EFA5AAAA078355070205A4B196832DF17F',
        / parameter-encryption-info / 19: << 96([
          / protected: / << {
            / alg / 1: 1 / AES-GCM-128 /
          } >>,
          / unprotected: / {
            / IV / 5: h'F14AAB9D81D51F7AD943FE87AF4F70CD'
          },
          / payload: / null / detached ciphertext /,
          / recipients: / [
            [
              / protected: / << {
              } >>,
              / unprotected: / {
                / alg / 1: -3 / A128KW /,
                / kid / 4: 'kid-1'
              },
              / payload: /
                h'75603FFC9518D794713C8CA8A115A7FB32565A6D59534D62'
                / CEK encrypted with KEK /
            ]
          ]
        ]) >>
      },

      / decrypt encrypted firmware /
      / directive-write / 18, 15
        / consumes the SUIT_Encryption_Info above /
    ] >>
  } >>
})
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA2025853825824822F5820536EC695E423342FF57FA89B3E3C12C0F9
257992F7D96F017281782D2DF1C50F582AD18443A10105A0F658203B7057
1169B0FEE5E6220BF86E5E973F7F32875495908EDAA91EC994BCA44B2903
589DA4010102010357A102818152706C61696E746578742D6669726D7761
726511587C8414A212582E2F59C3A34D9570FB99A5382E66466A3221A8AD
85CE508BA306FB431A60EFA5AAAA078355070205A4B196832DF17F135843
D8608443A10101A10550F14AAB9D81D51F7AD943FE87AF4F70CDF6818341
A0A2012204456B69642D31581875603FFC9518D794713C8CA8A115A7FB32
565A6D59534D62120F
]]></artwork></figure>

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

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

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

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107({
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: / h'AAB6A7868C4E43D5983BDE019EF22779
                          21F6F8EF1FCAF9403CA97255BED2CD30'
    ] >>,
    << / COSE_Mac0_Tagged / 17([
      / protected: / << {
        / algorithm-id / 1: 5 / HMAC256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / tag: / h'93B4B774A5D0421ED6FB5EBF890A284C
                 DAC7816CBC048BF47EE7FA7FF3BC02C3'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 1,
    / common / 3: << {
      / components / 2: [
        ['plaintext-firmware'],
        ['encrypted-firmware']
      ]
    } >>,
    / install / 17: << [
      / fetch encrypted firmware /
      / directive-set-component-index / 12, 1 / ['encrypted-firmware'] /,
      / directive-override-parameters / 20, {
        / parameter-image-size / 14: 46,
        / parameter-uri / 21: "https://example.com/encrypted-firmware"
      },
      / directive-fetch / 21, 15,

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

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

<figure><artwork><![CDATA[
D86BA2025853825824822F5820AAB6A7868C4E43D5983BDE019EF2277921
F6F8EF1FCAF9403CA97255BED2CD30582AD18443A10105A0F6582093B4B7
74A5D0421ED6FB5EBF890A284CDAC7816CBC048BF47EE7FA7FF3BC02C303
58B7A40101020103582BA102828152706C61696E746578742D6669726D77
6172658152656E637279707465642D6669726D776172651158818C0C0114
A20E182E15782668747470733A2F2F6578616D706C652E636F6D2F656E63
7279707465642D6669726D77617265150F0C0014A2135843D8608443A101
01A10550F14AAB9D81D51F7AD943FE87AF4F70CDF6818341A0A201220445
6B69642D31581875603FFC9518D794713C8CA8A115A7FB32565A6D59534D
621601160F
]]></artwork></figure>

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

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

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

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107({
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: / h'CEF034223D7F2C39D676876995B4ED4E
                          8221AC5BF184B6606EE62C41C149C266'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: /
        h'65E59AAB8A35BDE9547458316D1C769F
          FB2CEA304C9FB6151E5C8A88A002A292
          C5B8C63C81B5AC0AE31948B610834E12
          CBDBB2753EA221544B6733076A92EE20'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 1,
    / common / 3: << {
      / components / 2: [
        ['decrypted-firmware']
      ]
    } >>,
    / install / 17: << [
      / directive-set-component-index / 12, 0
        / ['plaintext-firmware'] /,
      / directive-override-parameters / 20, {
        / parameter-content / 18:
          h'344FA2D5AD2F43F6F363DA6FF2C337FE69E33E3D63714D
            23985BF02499EB0E8B231D45C378245DA3611C160CC511',
        / parameter-encryption-info / 19: << 96([
          / protected: / << {
            / alg / 1: 1 / AES-GCM-128 /
          } >>,
          / unprotected: / {
            / IV / 5: h'DAE613B2E0DC55F4322BE38BDBA9DC68'
          },
          / payload: / 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'FF6E266DABAF51B7207569E31CF72646
                              183E94CEE64FCDC8695AD9A505AEFDEA',
                  / y / -3: h'5FBC4A29844450B3AC22AB30C7F7004B
                              B59D8BD60D7997734A9FA0124B650895'
                },
                / kid / 4: 'kid-2'
              },
              / payload: /
                h'B0E21628283F3E409F8158D8FFCA567F340E379AC39E49C9'
                / CEK encrypted with KEK /
            ]
          ]
        ]) >>
      },
      / directive-write / 18, 15
        / consumes the SUIT_Encryption_Info above /
    ] >>
  } >>
})
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA2025873825824822F5820CEF034223D7F2C39D676876995B4ED4E82
21AC5BF184B6606EE62C41C149C266584AD28443A10126A0F6584065E59A
AB8A35BDE9547458316D1C769FFB2CEA304C9FB6151E5C8A88A002A292C5
B8C63C81B5AC0AE31948B610834E12CBDBB2753EA221544B6733076A92EE
200358ECA4010102010357A1028181526465637279707465642D6669726D
776172651158CB860C0014A212582E344FA2D5AD2F43F6F363DA6FF2C337
FE69E33E3D63714D23985BF02499EB0E8B231D45C378245DA3611C160CC5
11135890D8608443A10101A10550DAE613B2E0DC55F4322BE38BDBA9DC68
F6818344A101381CA220A401022001215820FF6E266DABAF51B7207569E3
1CF72646183E94CEE64FCDC8695AD9A505AEFDEA2258205FBC4A29844450
B3AC22AB30C7F7004BB59D8BD60D7997734A9FA0124B65089504456B6964
2D325818B0E21628283F3E409F8158D8FFCA567F340E379AC39E49C9120F
]]></artwork></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 delegation chain and dependency respectively.
The parser validates the COSE_Key in the suit-delegation section using the key above,
and then dynamically trusts it.
The dependency manifest is embedded as an integrated-dependency
and referred by uri "#dependency-manifest" .</t>

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

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107({
  / delegation / 1: << [
    [
      / NOTE: signed by trust anchor /
      << 18([
        / protected: / << {
          / alg / 1: -7 / ES256 /
        } >>,
        / unprotected / {
        },
        / payload: / << {
          / cnf / 8: {
            / NOTE: public key of delegated authority /
            / COSE_Key / 1: {
              / kty / 1: 2 / EC2 /,
              / crv / -1: 1 / P-256 /,
              / x / -2: h'0E908AA8F066DB1F084E0C3652C63952
                          BD99F2A5BDB22F9E01367AAD03ABA68B',
              / y / -3: h'77DA1BD8AC4F0CB490BA210648BF79AB
                          164D49AD3551D71D314B2749EE42D29A'
            }
          }
        } >>,
        / signature: /
          h'FB2D5ACF66B9C8573CE92E13BFB8D113
            F798715CC10B5A0010B11925C155E724
            5A64E131073B87AC50CAC71650A21315
            B82D06CA2298CD1A95519AAE4C4B5315'
      ]) >>
    ]
  ] >>,
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: / h'6A1D9F42E7B4047D2F54046019AE3ED4
                          3A8ACC467AC16576B17D6F8E633042D2'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: /
        h'DF493BDBF167EFFB40593C5910D33B66
          429721467DF05800EA66A88B91729CD5
          1007981F151FC324745FF43E6F75AAF5
          197DD5EC4AA6BCEFCE43E4B1E35C948E'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 1,
    / common / 3: << {
      / dependencies / 1: {
        / component-index / 1: {
          / dependency-prefix / 1: [
             'dependency-manifest.suit'
          ]
        }
      },
      / components / 2: [
        ['decrypted-firmware']
      ]
    } >>,
    / manifest-component-id / 5: [
      'dependent-manifest.suit'
    ],
    / install / 17: << [
      / NOTE: set SUIT_Encryption_Info /
      / directive-set-component-index / 12, 0
        / ['decrypted-firmware'] /,
      / directive-override-parameters / 20, {
        / parameter-content / 18:
          h'344FA2D5AD2F43F6F363DA6FF2C337FE69E33E3D63714D
            23985BF02499EB0E8B231D45C378245DA3611C160CC511',
        / parameter-encryption-info / 19: << 96([
          / protected: / << {
            / alg / 1: 1 / AES-GCM-128 /
          } >>,
          / unprotected: / {
            / IV / 5: h'DAE613B2E0DC55F4322BE38BDBA9DC68'
          },
          / payload: / 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'FF6E266DABAF51B7207569E31CF72646
                              183E94CEE64FCDC8695AD9A505AEFDEA',
                  / y / -3: h'5FBC4A29844450B3AC22AB30C7F7004B
                              B59D8BD60D7997734A9FA0124B650895'
                },
                / kid / 4: 'kid-2'
              },
              / payload: /
                h'B0E21628283F3E409F8158D8FFCA567F340E379AC39E49C9'
                / CEK encrypted with KEK /
            ]
          ]
        ]) >>
      },

      / NOTE: call dependency-manifest /
      / directive-set-component-index / 12, 1
        / ['dependenty-manifest.suit'] /,
      / directive-override-parameters / 20, {
        / parameter-image-digest / 3: << [
          / algorithm-id / -16 / SHA256 /,
          / digest-bytes / h'1051324059C5193317CAC9A099BBC0B6
                             AFB56184C04277F566A3A4131F4A1C25'
        ] >>,
        / parameter-image-size / 14: 247,
        / parameter-uri / 21: "#dependency-manifest"
      },
      / directive-fetch / 21, 15,
      / condition-dependency-integrity / 7, 15,
      / directive-process-dependency / 11, 15
    ] >>
  } >>,
  "#dependency-manifest": <<
    / SUIT_Envelope_Tagged / 107({
      / authentication-wrapper / 2: << [
        << [
          / digest-algorithm-id: / -16 / SHA256 /,
          / digest-bytes: / h'1051324059C5193317CAC9A099BBC0B6
                              AFB56184C04277F566A3A4131F4A1C25'
        ] >>,
        << / COSE_Sign1_Tagged / 18([
          / protected: / << {
            / algorithm-id / 1: -7 / ES256 /
          } >>,
          / unprotected: / {},
          / payload: / null,
          / signature: /
            h'55990F3745DC4F200FF946643A6DE30D
              DCE57B080B7D68DE9896D8190B9A63E2
              D60E7C3D9693B67221AA6D07BBF0AB45
              314C236827A242C22B5E688DDC467269'
        ]) >>
      ] >>,
      / manifest / 3: << {
        / manifest-version / 1: 1,
        / manifest-sequence-number / 2: 1,
        / common / 3: << {
          / components / 2: [
            ['decrypted-firmware']
          ],
          / shared-sequence / 4: << [
            / directive-set-componnt-index / 12, 0
              / ['decrypted-firmware'] /,
            / directive-override-parameters / 20, {
              / parameter-image-digest / 3: << [
                / algorithm-id / -16 / SHA256 /,
                / digest-bytes / h'36921488FE6680712F734E11F58D87EE
                                   B66D4B21A8A1AD3441060814DA16D50F'
              ] >>,
              / parameter-image-size / 14: 30
            }
          ] >>
        } >>,
        / manifest-component-id / 5: [
          'dependency-manifest.suit'
        ],
        / validate / 7: << [
          / condition-image-match / 3, 15
        ] >>,
        / install / 17: << [
          / directive-set-component-index / 12, 0
            / ['decrypted-firmware'] /,
          / directive-write / 18, 15
            / consumes the SUIT_Encryption_Info set by dependent /,
          / condition-image-match / 3, 15
            / check the integrity of the decrypted payload /
        ] >>
      } >>
    })
  >>
})
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA401589E8181589AD28443A10126A0584FA108A101A4010220012158
200E908AA8F066DB1F084E0C3652C63952BD99F2A5BDB22F9E01367AAD03
ABA68B22582077DA1BD8AC4F0CB490BA210648BF79AB164D49AD3551D71D
314B2749EE42D29A5840FB2D5ACF66B9C8573CE92E13BFB8D113F798715C
C10B5A0010B11925C155E7245A64E131073B87AC50CAC71650A21315B82D
06CA2298CD1A95519AAE4C4B5315025873825824822F58206A1D9F42E7B4
047D2F54046019AE3ED43A8ACC467AC16576B17D6F8E633042D2584AD284
43A10126A0F65840DF493BDBF167EFFB40593C5910D33B66429721467DF0
5800EA66A88B91729CD51007981F151FC324745FF43E6F75AAF5197DD5EC
4AA6BCEFCE43E4B1E35C948E03590170A501010201035837A201A101A101
815818646570656E64656E63792D6D616E69666573742E73756974028181
526465637279707465642D6669726D77617265058157646570656E64656E
742D6D616E69666573742E73756974115901138E0C0014A212582E344FA2
D5AD2F43F6F363DA6FF2C337FE69E33E3D63714D23985BF02499EB0E8B23
1D45C378245DA3611C160CC511135890D8608443A10101A10550DAE613B2
E0DC55F4322BE38BDBA9DC68F6818344A101381CA220A401022001215820
FF6E266DABAF51B7207569E31CF72646183E94CEE64FCDC8695AD9A505AE
FDEA2258205FBC4A29844450B3AC22AB30C7F7004BB59D8BD60D7997734A
9FA0124B65089504456B69642D325818B0E21628283F3E409F8158D8FFCA
567F340E379AC39E49C90C0114A3035824822F58201051324059C5193317
CAC9A099BBC0B6AFB56184C04277F566A3A4131F4A1C250E18F715742364
6570656E64656E63792D6D616E6966657374150F070F0B0F742364657065
6E64656E63792D6D616E696665737458F7D86BA2025873825824822F5820
1051324059C5193317CAC9A099BBC0B6AFB56184C04277F566A3A4131F4A
1C25584AD28443A10126A0F6584055990F3745DC4F200FF946643A6DE30D
DCE57B080B7D68DE9896D8190B9A63E2D60E7C3D9693B67221AA6D07BBF0
AB45314C236827A242C22B5E688DDC46726903587BA601010201035849A2
028181526465637279707465642D6669726D7761726504582F840C0014A2
035824822F582036921488FE6680712F734E11F58D87EEB66D4B21A8A1AD
3441060814DA16D50F0E181E05815818646570656E64656E63792D6D616E
69666573742E73756974074382030F1147860C00120F030F
]]></artwork></figure>

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

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

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

<t>Both cases require some upfront communication interaction
to distribute these keys to the involved communication parties.
This interaction may be provided by a device management protocol,
as described in <xref target="RFC9019"/>, or may be executed earlier in
the lifecycle of the device, for example during manufacturing
or during commissioning. In addition to the keying material
key identifiers and algorithm information need to be provisioned.
This specification places no requirements on the structure of the
key identifier.</t>

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

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

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

<t>Note that it is good security practise to use different long-term
keys for different purpose. For example, the KEK used with an
AES-KW-based content key distribution method for encryption should
be different from the long-term symmetric key used for authentication
and integrity protection when uses with COSE_Mac0.</t>

<t>The design of this specification allows to use different long-term
keys for encrypting payloads. For example, KEK_1 may be used with
an AES-KW content key distribution method to encrypt a firmware
image while KEK_2 would be used to encrypt configuration data. This
approach reduces the attack surface since permissions of authors to
these long-term keys may vary based on their privileges.</t>

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

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

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

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

</section>


  </middle>

  <back>


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



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

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

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

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

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


<reference anchor="I-D.ietf-suit-manifest">
   <front>
      <title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
      <author fullname="Brendan Moran" initials="B." surname="Moran">
         <organization>Arm Limited</organization>
      </author>
      <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
      <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname="Koen Zandberg" initials="K." surname="Zandberg">
         <organization>Inria</organization>
      </author>
      <author fullname="Øyvind Rønningstad" initials="O." surname="Rønningstad">
         <organization>Nordic Semiconductor</organization>
      </author>
      <date day="10" month="September" year="2023"/>
      <abstract>
	 <t>   This specification describes the format of a manifest.  A manifest is
   a bundle of metadata about code/data obtained by a recipient (chiefly
   the firmware for an IoT device), where to find the 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-23"/>
   
</reference>


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


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

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-suit-trust-domains-05"/>
   
</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="RFC9124">
  <front>
    <title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title>
    <author fullname="B. Moran" initials="B." surname="Moran"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <date month="January" year="2022"/>
    <abstract>
      <t>Vulnerabilities with Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism that is also suitable for constrained devices. Ensuring that devices function and remain secure over their service lifetime requires such an update mechanism to fix vulnerabilities, update configuration settings, and add new functionality.</t>
      <t>One component of such a firmware update is a concise and machine-processable metadata document, or manifest, that describes the firmware image(s) and offers appropriate protection. This document describes the information that must be present in the manifest.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9124"/>
  <seriesInfo name="DOI" value="10.17487/RFC9124"/>
</reference>

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

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

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

<reference anchor="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="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 1966?>

<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[
; Define SUIT_Encryption_Info_* as a subset of COSE_Encrypt

SUIT_Encryption_Info = #6.96(
    SUIT_Encryption_Info_AESKW .within COSE_Encrypt /
    SUIT_Encryption_Info_ESDH .within COSE_Encrypt)

SUIT_Encryption_Info_AESKW = [
  protected   : bstr .cbor outer_header_map_protected,
  unprotected : outer_header_map_unprotected,
  ciphertext  : bstr / nil,
  recipients  : [ + COSE_recipient_AESKW .within COSE_recipient ]
]

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,         ; algorithm identifier
  ? 4 => bstr,        ; identifier of the recipient public key
  * label => values   ; extension point
}

SUIT_Encryption_Info_ESDH = [
  protected   : bstr .cbor outer_header_map_protected,
  unprotected : outer_header_map_unprotected,
  ciphertext  : bstr / nil,
  recipients  : [ + COSE_recipient_ESDH .within COSE_recipient ]
]

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,         ; algorithm identifier
  * label => values   ; extension point
}

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

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

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


; Extends SUIT Manifest

$$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, Øyvind Rønningstad, Dave Thaler, Laurence
Lundblade, Christian Amsüss, and Carsten Bormann for their review feedback. Finally, we would like
to thank Dick Brooks for making us aware of the challenges encryption imposes on binary analysis.</t>

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

