<?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-16" 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 payload encryption: AES-GCM-128</t>
  <t>Algorithm id for key wrap: A128KW</t>
  <t>IV: h'11D40BB56C3836AD44B39835B3ABC7FC'</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[
D8608443A10101A1054C26682306D4FB28CA01B43B80F68340A2012204456B69642D
315818AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D
]]></artwork></figure>

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

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

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

<figure><artwork><![CDATA[
CE9AB65E7591EE38669C4CCA7A58FA324C1A0DBFDBC2C7C057376AFB805D
660048310E8DAB045A2BE0A93F014FC9
]]></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 RFC 9053 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>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[
D8608443A10101A105503517CE3E78AC2BF3D1CDFDAF955E8600F6818344
A101381CA220A401022001215820AAE9A733DEF11E9160A66BD81CC8215F
045ACAC3F8490C7749D58A627323624A22582008A7B88B7F00762BA0919C
A065ABF45C2A303B483E86D674E50B015122F8E51504456B69642D325818
0A44E77C3DBBB0780F2DB42C64FD325D18FBE13A25A9369D
]]></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[
/ SUIT_Envelope_Tagged / 107({
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: / h'4C56CA660A5D1414BC04C835025D52CC
                          A9AE6101202E127329AD2465B38A1C89'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: /
        h'ACC8962628B78BF30DD74BDEEA9305D7
          3BFA302D82B280A7E2FCE8331C363F27
          9ECCABE920DA97F9074DF5B3B2AAD170
          9D844B8DE1D33F80FA99AC806B9778D0'
    ]) >>
  ] >>,
  / 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'B94272BD7C7E9A144D12CF46D9CEE6318753574A6F7808
            29B87911BE1CF2B24477BA4E7D1337541F308010088920',
        / parameter-encryption-info / 19: << 96([
          / protected: / << {
            / alg / 1: 1 / AES-GCM-128 /
          } >>,
          / unprotected: / {
            / IV / 5: h'3517CE3E78AC2BF3D1CDFDAF955E8600'
          },
          / 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'AAE9A733DEF11E9160A66BD81CC8215F
                              045ACAC3F8490C7749D58A627323624A',
                  / y / -3: h'08A7B88B7F00762BA0919CA065ABF45C
                              2A303B483E86D674E50B015122F8E515'
                },
                / kid / 4: 'kid-2'
              },
              / payload: /
                h'0A44E77C3DBBB0780F2DB42C64FD325D18FBE13A25A9369D'
                / CEK encrypted with KEK /
            ]
          ]
        ]) >>
      },
      / directive-write / 18, 15
        / consumes the SUIT_Encryption_Info above /
    ] >>
  } >>
})
]]></artwork></figure>

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

<figure><artwork><![CDATA[
B94272BD7C7E9A144D12CF46D9CEE6318753574A6F780829B87911BE1CF2
B24477BA4E7D1337541F308010088920
]]></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>The examples are signed using the following ECDSA secp256r1 key:</t>

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

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

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

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

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

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

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

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107({
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: / h'5DEFDDB7F175FA20778FFE24BE7B9C36
                          9BD8ED06AA4654F28794CD134CDBA932'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'4C4A5FB50738699649BA439237D20ADC
                       ADD6EC634A800A8E093733FC1C64984B
                       F2BFEC583C124B5546BF0CDAC543AB09
                       95589543B434951A29A40000EC56CBE7'
    ]) >>
  ] >>,
  / 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'CE9AB65E7591EE38669C4CCA7A58FA324C1A0DBFDBC2C7
            C057376AFB805D660048310E8DAB045A2BE0A93F014FC9',
        / parameter-encryption-info / 19: << 96([
          / protected: / << {
            / alg / 1: 1 / AES-GCM-128 /
          } >>,
          / unprotected: / {
            / IV / 5: h'11D40BB56C3836AD44B39835B3ABC7FC'
          },
          / payload: / null / detached ciphertext /,
          / recipients: / [
            [
              / protected: / << {
              } >>,
              / unprotected: / {
                / alg / 1: -3 / A128KW /,
                / kid / 4: 'kid-1'
              },
              / payload: /
                h'E01F4443C88CA89DF93A9C7E6D79D1C9BC330757C7D2D75A'
                / 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[
D86BA2025873825824822F58205DEFDDB7F175FA20778FFE24BE7B9C369B
D8ED06AA4654F28794CD134CDBA932584AD28443A10126A0F658404C4A5F
B50738699649BA439237D20ADCADD6EC634A800A8E093733FC1C64984BF2
BFEC583C124B5546BF0CDAC543AB0995589543B434951A29A40000EC56CB
E703589DA4010102010357A102818152706C61696E746578742D6669726D
7761726511587C8414A212582ECE9AB65E7591EE38669C4CCA7A58FA324C
1A0DBFDBC2C7C057376AFB805D660048310E8DAB045A2BE0A93F014FC913
5843D8608443A10101A1055011D40BB56C3836AD44B39835B3ABC7FCF681
8341A0A2012204456B69642D315818E01F4443C88CA89DF93A9C7E6D79D1
C9BC330757C7D2D75A120F
]]></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'C6A66263CCF4C6FF5992AE4074B30DDD
                          34520AA099F6BAD96B2F60FE79F07EC4'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'DA08C3A6455FF30865A97A7F4FBC3BA1
                       5F954E39B57167DEA9FE16EBA12CFE33
                       D58790DB64CB70A08F89513B15CFF995
                       1222868195224E1AB87D46FA37F58864'
    ]) >>
  ] >>,
  / 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'11D40BB56C3836AD44B39835B3ABC7FC'
          },
          / payload: / null / detached ciphertext /,
          / recipients: / [
            [
              / protected: / << {
              } >>,
              / unprotected: / {
                / alg / 1: -3 / A128KW /,
                / kid / 4: 'kid-1'
              },
              / payload: /
                h'E01F4443C88CA89DF93A9C7E6D79D1C9BC330757C7D2D75A'
                / 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[
D86BA2025873825824822F5820C6A66263CCF4C6FF5992AE4074B30DDD34
520AA099F6BAD96B2F60FE79F07EC4584AD28443A10126A0F65840DA08C3
A6455FF30865A97A7F4FBC3BA15F954E39B57167DEA9FE16EBA12CFE33D5
8790DB64CB70A08F89513B15CFF9951222868195224E1AB87D46FA37F588
640358E5A40101020103582BA102828152706C61696E746578742D666972
6D776172658152656E637279707465642D6669726D776172651158AF900C
0114A20E182E15782668747470733A2F2F6578616D706C652E636F6D2F65
6E637279707465642D6669726D77617265150F0C0014A2135843D8608443
A10101A1055011D40BB56C3836AD44B39835B3ABC7FCF6818341A0A20122
04456B69642D315818E01F4443C88CA89DF93A9C7E6D79D1C9BC330757C7
D2D75A1601160F14A2035824822F582036921488FE6680712F734E11F58D
87EEB66D4B21A8A1AD3441060814DA16D50F0E181E030F
]]></artwork></figure>

</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>
<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_Value = #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_Value)

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>

