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


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

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

<rfc ipr="trust200902" docName="draft-ietf-suit-firmware-encryption-17" 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="September" day="11"/>

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

    <abstract>


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


<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 authentication: COSE_Mac0 with HMAC-256</t>
  <t>Algorithm for payload encryption: AES-GCM-128</t>
  <t>Algorithm id for key wrap: A128KW</t>
  <t>IV: h'93702C81590F845D9EC866CCAC767BD1'</t>
  <t>KEK: 'aaaaaaaaaaaaaaaa'</t>
  <t>KID: 'kid-1'</t>
  <t>Plaintext (txt): "This is a real firmware image."
(in hex): 546869732069732061207265616C206669726D7761726520696D6167652E</t>
</list></t>

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

<figure><artwork><![CDATA[
D8608443A10101A1055093702C81590F845D9EC866CCAC767BD1F6818341A0A2012204456B69642D
315818CA0DF4EE01796D12FE379165602E0AC2476391A4EF122A64
]]></artwork></figure>

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

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

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

<figure><artwork><![CDATA[
9890D8DC740A2E82C2BEA9BAB13E0BFA0FB4EB2BA3C0BCA4B23A0D660C5B3038F8634933921B3C2D
1A84EE6C2779
]]></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-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 -4), 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"><artwork><![CDATA[
PartyInfoSender = (
    identity : nil,
    nonce : nil,
    other : nil
)

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

COSE_KDF_Context = [
    AlgorithmID : int,
    PartyUInfo : [ PartyInfoSender ],
    PartyVInfo : [ PartyInfoRecipient ],
    SuppPubInfo : [
        keyDataLength : uint,
        protected : bstr .cbor recipient_header_map_esdh,
        other: bstr "SUIT Payload Encryption"
    ],
    SuppPrivInfo : bstr .size 0
]
]]></artwork></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</t>
  <t>IV: h'3517CE3E78AC2BF3D1CDFDAF955E8600'</t>
  <t>Algorithm for content key distribution: ECDH-ES + A128KW</t>
  <t>SuppPubInfo.other = 'SUIT Payload Encryption'</t>
  <t>KID: 'kid-2'</t>
  <t>Plaintext: "This is a real firmware image."</t>
  <t>Plaintext (in hex encoding):
546869732069732061207265616C206669726D7761726520696D6167652E</t>
</list></t>

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

<figure><artwork><![CDATA[
D8608443A10101A105501485CADEC69C011B5CC3B0BE0F2B3801F6818344
A101381CA220A4010220012158203982C1863015824881D1A6C9059332BE
281C9613D7F7462D43EE520D20FE132F2258205EB51EF8AD7C1DA6972948
77BBA291DC5AEE20FEE887D8A173BAD7FAFF091E5C04456B69642D325818
DF698D95D3BF3EA7CCC655A7A5609BEF206E208A46D66D91
]]></artwork></figure>

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

<figure title="COSE_Encrypt Example for ES-DH" anchor="esdh-example"><artwork><![CDATA[
96([
  / protected: / << {
    / alg / 1: 1 / AES-GCM-128 /
  } >>,
  / unprotected: / {
    / IV / 5: h'1485CADEC69C011B5CC3B0BE0F2B3801'
  },
  / 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'3982C1863015824881D1A6C9059332BE281C9613D7F7462D43EE520D20FE132F',
          / y / -3: h'5EB51EF8AD7C1DA697294877BBA291DC5AEE20FEE887D8A173BAD7FAFF091E5C'
        },
        / kid / 4: 'kid-2'
      },
      / payload: / h'DF698D95D3BF3EA7CCC655A7A5609BEF206E208A46D66D91'
        / CEK encrypted with KEK /
    ]
  ]
])
]]></artwork></figure>

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

<figure><artwork><![CDATA[
C7C4583D2763F3ECCF09FD1EB34EC9296426899510DAF3098E849C8B4F8F
5364638B309447D6B6393B899F8F0AEE
]]></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>
<section anchor="aes-ctr"><name>AES-CTR</name>

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

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

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

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

</section>
<section 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'
  (0x616161... 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'6117ACE74E900E65C560D609BBC34C90
                          E4A33E340B12444D525C427E4AD9FF10'
    ] >>,
    << / COSE_Mac0_Tagged / 17([
      / protected: / << {
        / algorithm-id / 1: 5 / HMAC256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / tag: / h'02B4BCA870F62D6A351C13A52B622D2C
                 3779D43823A2FD20C08147A8A337A391'
    ]) >>
  ] >>,
  / 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'9890D8DC740A2E82C2BEA9BAB13E0BFA0FB4EB2BA3C0BC
            A4B23A0D660C5B3038F8634933921B3C2D1A84EE6C2779',
        / parameter-encryption-info / 19: << 96([
          / protected: / << {
            / alg / 1: 1 / AES-GCM-128 /
          } >>,
          / unprotected: / {
            / IV / 5: h'93702C81590F845D9EC866CCAC767BD1'
          },
          / payload: / null / detached ciphertext /,
          / recipients: / [
            [
              / protected: / << {
              } >>,
              / unprotected: / {
                / alg / 1: -3 / A128KW /,
                / kid / 4: 'kid-1'
              },
              / payload: /
                h'CA0DF4EE01796D12FE379165602E0AC2476391A4EF122A64'
                / 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[
D86BA2025853825824822F58206117ACE74E900E65C560D609BBC34C90E4
A33E340B12444D525C427E4AD9FF10582AD18443A10105A0F6582002B4BC
A870F62D6A351C13A52B622D2C3779D43823A2FD20C08147A8A337A39103
589DA4010102010357A102818152706C61696E746578742D6669726D7761
726511587C8414A212582E9890D8DC740A2E82C2BEA9BAB13E0BFA0FB4EB
2BA3C0BCA4B23A0D660C5B3038F8634933921B3C2D1A84EE6C2779135843
D8608443A10101A1055093702C81590F845D9EC866CCAC767BD1F6818341
A0A2012204456B69642D315818CA0DF4EE01796D12FE379165602E0AC247
6391A4EF122A64120F
]]></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'9300AD376FE65C505593C82B78F14299
                          BD0125A477720C044AD0552ABD27AAF6'
    ] >>,
    << / COSE_Mac0_Tagged / 17([
      / protected: / << {
        / algorithm-id / 1: 5 / HMAC256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / tag: / h'F48509F3027EEAA2C40473212C3A12F2
                 5A9C8BE6699E5E7936816836E91A9003'
    ]) >>
  ] >>,
  / 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'93702C81590F845D9EC866CCAC767BD1'
          },
          / payload: / null / detached ciphertext /,
          / recipients: / [
            [
              / protected: / << {
              } >>,
              / unprotected: / {
                / alg / 1: -3 / A128KW /,
                / kid / 4: 'kid-1'
              },
              / payload: /
                h'CA0DF4EE01796D12FE379165602E0AC2476391A4EF122A64'
                / 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[
D86BA2025853825824822F58209300AD376FE65C505593C82B78F14299BD
0125A477720C044AD0552ABD27AAF6582AD18443A10105A0F65820F48509
F3027EEAA2C40473212C3A12F25A9C8BE6699E5E7936816836E91A900303
58B7A40101020103582BA102828152706C61696E746578742D6669726D77
6172658152656E637279707465642D6669726D776172651158818C0C0114
A20E182E15782668747470733A2F2F6578616D706C652E636F6D2F656E63
7279707465642D6669726D77617265150F0C0014A2135843D8608443A101
01A1055093702C81590F845D9EC866CCAC767BD1F6818341A0A201220445
6B69642D315818CA0DF4EE01796D12FE379165602E0AC2476391A4EF122A
641601160F
]]></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'AA45EE17A2345F8161926980949C9CB3
                          0EB928BE302A1198B5F298434472DDA1'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: /
        h'30CA0FF4223B0FBD9084B453624A4284
          6F5BE7B724CBBEF33C334F3C89699A7B
          1C0B2D97805A6F45707125EEBC51A807
          560064EA38498E48F33743DD29561B08'
    ]) >>
  ] >>,
  / 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'C7C4583D2763F3ECCF09FD1EB34EC9296426899510DAF3
            098E849C8B4F8F5364638B309447D6B6393B899F8F0AEE',
        / parameter-encryption-info / 19: << 96([
          / protected: / << {
            / alg / 1: 1 / AES-GCM-128 /
          } >>,
          / unprotected: / {
            / IV / 5: h'1485CADEC69C011B5CC3B0BE0F2B3801'
          },
          / 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'3982C1863015824881D1A6C9059332BE
                              281C9613D7F7462D43EE520D20FE132F',
                  / y / -3: h'5EB51EF8AD7C1DA697294877BBA291DC
                              5AEE20FEE887D8A173BAD7FAFF091E5C'
                },
                / kid / 4: 'kid-2'
              },
              / payload: /
                h'DF698D95D3BF3EA7CCC655A7A5609BEF206E208A46D66D91'
                / 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[
D86BA2025873825824822F5820AA45EE17A2345F8161926980949C9CB30E
B928BE302A1198B5F298434472DDA1584AD28443A10126A0F6584030CA0F
F4223B0FBD9084B453624A42846F5BE7B724CBBEF33C334F3C89699A7B1C
0B2D97805A6F45707125EEBC51A807560064EA38498E48F33743DD29561B
080358ECA4010102010357A1028181526465637279707465642D6669726D
776172651158CB860C0014A212582EC7C4583D2763F3ECCF09FD1EB34EC9
296426899510DAF3098E849C8B4F8F5364638B309447D6B6393B899F8F0A
EE135890D8608443A10101A105501485CADEC69C011B5CC3B0BE0F2B3801
F6818344A101381CA220A4010220012158203982C1863015824881D1A6C9
059332BE281C9613D7F7462D43EE520D20FE132F2258205EB51EF8AD7C1D
A697294877BBA291DC5AEE20FEE887D8A173BAD7FAFF091E5C04456B6964
2D325818DF698D95D3BF3EA7CCC655A7A5609BEF206E208A46D66D91120F
]]></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'5D7F604EE23212C615CB83246F17BD06
          4F237CEA31170183AFCD52D08EE4F58B'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature:
        / h'F5B14132C023ACBFD0BEC7954A63E94D
            2B2795B303FD6FB4031A5FD016353D72
            17BDC2AA6F0EF04A628B452F0ACD5A10
            EEDA04E5AD0B766B3C30838B4581B5B4'
    ]) >>
  ] >>,
  / 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'C7C4583D2763F3ECCF09FD1EB34EC9296426899510DAF3
            098E849C8B4F8F5364638B309447D6B6393B899F8F0AEE',
        / parameter-encryption-info / 19: << 96([
          / protected: / << {
            / alg / 1: 1 / AES-GCM-128 /
          } >>,
          / unprotected: / {
            / IV / 5: h'1485CADEC69C011B5CC3B0BE0F2B3801'
          },
          / 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'3982C1863015824881D1A6C9059332BE
                              281C9613D7F7462D43EE520D20FE132F',
                  / y / -3: h'5EB51EF8AD7C1DA697294877BBA291DC
                              5AEE20FEE887D8A173BAD7FAFF091E5C'
                },
                / kid / 4: 'kid-2'
              },
              / payload: /
                h'DF698D95D3BF3EA7CCC655A7A5609BEF206E208A46D66D91'
                / 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
06CA2298CD1A95519AAE4C4B5315025873825824822F58205D7F604EE232
12C615CB83246F17BD064F237CEA31170183AFCD52D08EE4F58B584AD284
43A10126A0F65840F5B14132C023ACBFD0BEC7954A63E94D2B2795B303FD
6FB4031A5FD016353D7217BDC2AA6F0EF04A628B452F0ACD5A10EEDA04E5
AD0B766B3C30838B4581B5B403590170A501010201035837A201A101A101
815818646570656E64656E63792D6D616E69666573742E73756974028181
526465637279707465642D6669726D77617265058157646570656E64656E
742D6D616E69666573742E73756974115901138E0C0014A212582EC7C458
3D2763F3ECCF09FD1EB34EC9296426899510DAF3098E849C8B4F8F536463
8B309447D6B6393B899F8F0AEE135890D8608443A10101A105501485CADE
C69C011B5CC3B0BE0F2B3801F6818344A101381CA220A401022001215820
3982C1863015824881D1A6C9059332BE281C9613D7F7462D43EE520D20FE
132F2258205EB51EF8AD7C1DA697294877BBA291DC5AEE20FEE887D8A173
BAD7FAFF091E5C04456B69642D325818DF698D95D3BF3EA7CCC655A7A560
9BEF206E208A46D66D910C0114A3035824822F58201051324059C5193317
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'>



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



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


<section anchor="full-cddl"><name>A. 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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
1RFblQ/dVG5VIiH0ukEjvBkm0jJgcSB0tFfsJiWqygr56PhiZaLOG4eSuUmp
ahvl+5LFFkSSskhOTFf+NPRu2OKIYrrNZD0b2UUrso2ChOF86Lj4v0ajIW4r
1eS0xcVz3OampxM38dVrNSPKSRNfL6NZ5eRGwfAS045NV7C+1C3OkojrYPTt
xQv71euLt/6bkf109AP9emQ9v/j2iX898p8Pnn87ePjp28vnrT78/W0QiO/3
oyeDb5378P5i4P/lL9f+6j9/+Nt/Bt99++x523mLymTwtx8u879+4/T/9u1i
+fDnV+lq+OzNz2c38V9f3rz2XwS+fzmaJ6MwvV7/9FP/zzdvP8RR90WyuPvp
p2e91/ndkfXqG9A+vv9+ejO789M32dXT2zwLfhh9uH/6Ik9fPPlr3H85aL74
5n7pf5dnPy9ee83nrfxp/L1Y2ujFsGJhxrWlaZJiRGmyJKA3cpyUauNQUA3F
4mWqJmxWvY/fDZ5dBOY2jm/vR/c/PHma/OfFz39zAv8vP1yI70P/L9MhbNzo
5s/h4NufWs9++unu8oe30x+W65/DP6edn+Kz0eTImvx8tmilb+fLi79O7p86
3ScPq2cTfzF4Pg3+Ngl/fu227t5cz36+yv58P342ed6+neU/v3x2mcyvHz82
N6I8MwlPZBs2LzZePvEJG0SuAkEHCrn+WKLVCR9GpqzGlZJ1tdSPX4nu6yIl
M9f03UTyYjAcxRUixmMqsjSj6KOkcIGhGJJCY+usw4jUKNcy3YM3uXSs+MMo
flBVPpVs/KFdqoCsrLWlsrJAoeUPhcrxhRKMVbHwfDVG30XMmPKwDwP5nfCK
nOqLcsifNeSdychqrgYp02Sd2a7TPflIN8K2VJM8s71zvALGl8PUF3yDD7yu
LiDXY7qDVAeB9wyBo3ANSzUnqZvvKnVct+sHo25r1HecUacdtDvOEK8pDYJm
K+g7lr31M2r5zeao2XIGrtdqtYZtrx20vC78POyPx67D15reqTtoMPEzfejG
+rsnB197U6vky2ht+EcAz4GX3qrvbOFlPf0gD695cxxv0BoEfq/rjDvesOM3
227gNv22N+h43tALNjen2e32h61mz2v63njoOYHTc1tdvwc71fWb8qrXu1OY
o6X35kxD35ndPDcvMcoHdXmfmm801sqPuQ7INKqL/GkEM6qZCD8udi4eMNZk
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
Y7SqjIz77IrSlGhtsyU6zXbfgVn7bTMYt9nF0FOfXbCu1aOgU3Qddx2KhG2J
wNu+N6RiyqNOv9OBpyCCeCP4bxs00Ra7nK3dPmfpcnYwnrdbHsKiyN+tI7gY
Qwtg0RtVeaqtLysGymYma7udab+n2tpX43mXp9r6NYVorX01nnd5qq19NZ53
aeZWlWrOMdd+kwK8FT5tagBWUQXYJ+NjBPcY6ADAAhyWdQhYUmx2F/4/cMb8
Gr9l7X6tDeNsDyOx9ukyuxZi4Uq2xZHslej3yfC7hHYLpfZ9YjoeWRfou0kW
gH571iGRJAqrYQO9MaxHoKdVBIR9Al5ReLM2pTcEBHdEtGMPgbIqKVQXr0E7
TWcMUNoV8S6AE/iLjrDQSdbCOSbEz0BmFtmvVPJ5KevKKjBmLaJZMl1TjniV
rFXWhAnT/OHIMgozSalB26xxhDprDhiHcRs9GAZtMn6ePB09PdXx7cqoS+mh
CqmXZTJDdRU5m6IV9RRrOOIonDkYqztFnKRMpu4quM73DEJRJpwbfkAliylP
tsy2TXXz1qurNKGCgIvFeimzzVOq/lAk1KTKjqK+cSTyJsH4qsRRvLzDIJRZ
qQ/c0ZiSctHlYqNLWWxIZU+n4u4qo9wShD46I9TPk2kyx7CS0mGK8sNuH5Oj
J6nsURVbjMJ0HlOqbJ1HbvownUdaOuTidlc6ka8sQQYzWF+FWMeUKhdhmaC1
qNq6EEWOMA2wDdJhKCqzyq245cJbIC1SEeMjixJgo5CLddxEiQEFoIVE3kba
Z9oXHIaSOr/ZqKHFKd6w2oBZ9iBTGbJVFVZea3kWIlvbxZIhQOZhj9MZYwFp
2iDhUt7NcP6A+ZRjLFfItcTs22Vyv6SCe2uSt2VtJgyOwQO3v6e74eV7IFQt
AAVmLniKgTzYeUzZ0DHloqjziFgtq1DWBLhVzu7IimK67m5s3TXoJ0tZlEoc
ipEvFJfxIPLrFTLJccZPs5rWFPdGBKT8HM0MB43a1s0lElCIWeG+1qpqUUQf
MP15nGMliakgYdBhUlgnbrYMwJIZ7amw74OI7sIkfaIQWygXZu4ooAsAxqwh
E/NdyuMqUk3741dwkOgyzHQZbJHQVRHLOBM5EuWZN2S5XSagvMjrJJmpFnCi
iOwZJZtEgqRLhmFi8TogyIIAk2FKPxXVHThdvEqxjfuATgPOMU9JZJdcHvrp
93XOD7+nHns52Xl2k6znVOTZGFxV11ZztDMzkbBOm1403HJUWmX9CUqmSKnY
ijnNVGwaHtS1oO8bmC5zSB6yh3JxmndlpV2EHXzvSlqpthInL5Mj7ttEo4hG
aNS2ExX6KHMoDuLZ97i7Zto9+VpVsV6uC6JK6XECULYgiJSY2Tq9wgQTnHe+
UG3uSmBpRuk1mV7o46PdwRXfEeYblQTiFEvt3cGUr0XqSEQT+8J/4VdIFvQz
4kF2y+sB0l9Kz8gl1wXRITvBK2XMwwBCLMeBCTWzPAQent0w45OVQFy30cbF
bK8Coq0Mz8JJNGfzxQsss1D+vI4ITDCJ6sFlfwAYB0O3zx0YibXJZEMfOdOW
Esd+HAH7S9JHmS1Kb2MP5/arNEEUntlu/x3JTPU67DwmjcYd9gEo0S0eDIfP
sHw3fK9jMfaKEFhqssDwRywlviJ70ayww8+lJQabcuJ++p3eJCooS64AtaAO
4g+2v3ufxTZTH0fWH+wh9VFd9vxrilXFch1o1YJuCb9FK8uqtH89tr/qNPqd
E7I6ba+1bjdEim2zS2HD2l6Cveql0+qJiGEekwVRB3za9rk9AUi1G9MJEA8g
+1H6ngvEv1+Eq/eqJVrtzEjR8822xmNsbYQ/yEHO7GVMzhWDv8KzH/HiKy5B
/Vy1Keqh/c56Z1mVL2xfHhmOMRbHWG20WOUPOPXNxemOxQLxMa0yjLLb+y3r
E58/bPGCw7TVkDDVj58sa8849mOLXQKu/fiPyHJqth7EEC2VuAeN/8NuYWOc
UE031k02VAlDzYDXv7bnRHCgC6JxGb0Oq8T8ziiOJjAN69MWKCOw/L0A2SYO
7YaxQxa3caA46Sib3XwOjMn2XwRimzAlu/wSaDoYHHavRg5dp6FlgHeNh9Yx
RYbCK/PyZ8gH/pFw/QfpmSR2QhpfZm2H2b/rpu4CfzVwu2JbLt5+zjCw5hH+
OsuKjNay/u3fCM1fGY7Ks8f2SanyWTnS7zE7WQy0qCIWwKn29QNChZI/SJyY
oj46j2ZsNMgoTT97mKPZ4+Nlwtn4v4+ESEr1OkiECJe3WADn1h7E6e1NMv+Z
AAxl8CvQAlFgkRo1SRNmSeGyOQnER1+YAvDCS82+rx7ueQzKG2z/a/w3nWVY
DOS//9fDXQzaw+v//t9LNCyAeDir2UNMqv/mJpxj7aRn4VqIc8/Wy9lkDmdf
s4ObFATKGGX3Rfbf/yfLONl4EKYZFlIcUO28pUSaGOnQXRzdq8WBGBZXzZYM
PjzdYQx7MEiT5JY1jEV4i2IZ1joihVSgF6xljvnNo8xUsOIFCoFklSipp7Bb
/xdDSTxhUwYBAA==

-->

</rfc>

