<?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.39 (Ruby 3.0.2) -->


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

]>

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

<rfc ipr="trust200902" docName="draft-ietf-suit-firmware-encryption-15" 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="05"/>

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

    <abstract>


<?line 93?>

<t>This document specifies techniques for encrypting software, firmware,
machine learning models, and personalization data by utilizing the IETF
SUIT manifest. Key agreement is provided by ephemeral-static (ES)
Diffie-Hellman (DH) and AES Key Wrap (AES-KW). ES-DH uses public key
cryptography while AES-KW uses a pre-shared key. Encryption of the
plaintext is accomplished with conventional symmetric key cryptography.</t>



    </abstract>



  </front>

  <middle>


<?line 102?>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<t><list style="symbols">
  <t>Sender: Entity that sends an encrypted payload.</t>
  <t>Recipient: Entity that receives an encrypted payload.</t>
</list></t>

<t>Additionally, we introduce the term "distribution system" (or distributor)
to refer to an entity that knows the recipients of payloads. It is important
to note that the distribution system is far more than a file server. For
use of encryption, the distribution system either knows the public key
of the recipient (for ES-DH), or the KEK (for AES-KW).</t>

<t>The author, which is responsible for creating the payload, does not
know the recipients.</t>

<t>The author and the distribution system are logical roles. In some
deployments these roles are separated in different physical entities
and in others they are co-located.</t>

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

<t><xref target="RFC9019"/> describes the architecture for distributing payloads and
manifests from an author to devices. It does, however, not detail the
use of payload encryption. This document enhances the architecture to
support encryption.</t>

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

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

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

<figure title="Architecture for the distribution of Encrypted Payloads." anchor="arch-fig"><artwork><![CDATA[
 +----------+
 |  Device  |                              +----------+
 |    1     |---+                          |  Author  |
 |          |   |                          +----------+
 +----------+   |                               |
                |                               | Payload +
                |                               | Manifest
                |                               |
 +----------+   |                        +--------------+
 |  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 and distributor are separate entities, then the author must delegate
encryption rights to the distributor. By the principle of least privilege, this
delegation should only grant the distributor decryption and re-encryption rights.
There are two models:</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 alternative is to use a two-manifest system, where 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 algorithms,
the distribution system needs to know about the properties of the
deployed devices. Mandating only a single content key distribution
algorithm 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 (TBD1): 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>

<t>Another attack concerns battery exhaustion. 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 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>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>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 authorized recipients have access to the 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><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>
<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>
<section anchor="sec-cons"><name>Security 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>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 key data protected with that KEK.</t>

<t>Since the CEK is randomly generated, it must be ensured that the
guidelines for random number generation in <xref target="RFC8937"/> are followed.</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="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
-----------------------------------------
TBD1       Encryption Info      Section 4
]]></artwork></figure>

<t>[Editor's Note: TBD1: 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">
         <organization>Arm Limited</organization>
      </author>
      <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname="Koen Zandberg" initials="K." surname="Zandberg">
         <organization>Inria</organization>
      </author>
      <author fullname="Øyvind Rønningstad" initials="O." surname="Rønningstad">
         <organization>Nordic Semiconductor</organization>
      </author>
      <date day="27" month="February" 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 that 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-22"/>
   
</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="7" month="July" 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-04"/>
   
</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>


<?line 1369?>

<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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
vbcigcNu/T8YIe5FMdoAAA==

-->

</rfc>

