<?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="pre5378Trust200902" docName="draft-ietf-suit-firmware-encryption-12" 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="April" day="13"/>

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

    <abstract>


<t>This document specifies techniques for encrypting software, firmware
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 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"/>. The SUIT manifest provides a
bundle of metadata about the firmware for an IoT device, where to find 
the firmware image, and the devices to which it applies.</t>

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

<t>Encryption prevents third parties, including attackers, from gaining access to
the firmware binary. Hackers typically need intimate knowledge of the target
firmware 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>The SUIT manifest provides the data needed for authorized recipients
of the firmware image to decrypt it. The firmware image is encrypted using a
symmetric key.</t>

<t>A symmetric key can be established using a variety of mechanisms; this document
defines two approaches 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) using a pre-shared key-encryption key (KEK).</t>
</list></t>

<t>OPEN ISSUE: Should KEM algorithms also be supported?</t>

<t>These choices reduce the number of possible key establishment options and thereby
help increase interoperability between different SUIT manifest parser implementations.</t>

<t>While the original motivating use case of this document was firmware encryption, SUIT manifests
may require payloads other than firmware images to experience 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, the term payload is used to generically refer to those objects that may be subject to
encryption.</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 terms sender and recipient have the following meaning:</t>

<t><list style="symbols">
  <t>Sender: Role of the entity that sends an encrypted payload.</t>
  <t>Recipient: Role of the entity that receives an encrypted payload.</t>
</list></t>

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

</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.</t>

<t>This document enhances this architecture to support encryption. 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>

<t><xref target="arch-fig"/> shows the distribution system, which represents the firmware
server and the device management infrastructure. The distribution system is
aware of the individual devices to which a payload has to be delivered. The
author is typically unaware which devices need to receive these payloads.</t>

<t>To apply encryption the sender needs to know the recipient. 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 DH public key and parameters may be in
the recipient's X.509 certificate <xref target="RFC5280"/>.</t>

<t>If the author delegates the task of identifying the recipients of the payloads
to the distribution system, it needs to trust it with the appropriate
protection of the plaintext firmware image before encryption is performed.</t>

<figure title="Firmware Encryption Architecture." anchor="arch-fig"><artwork><![CDATA[
                                           +----------+
                                           |          |
                                           |  Author  |
                                           |          |
 +----------+                              +----------+
 |  Device  |---+                               |
 |          |   |                               | Firmware +
 |          |   |                               | Manifest
 +----------+   |                               |
                |                               |
                |                        +--------------+
                |                        |              |
 +----------+   |  Firmware + Manifest   | Distribution |
 |  Device  |---+------------------------|    System    |
 |          |   |                        |              |
 |          |   |                        |              |
 +----------+   |                        +--------------+
                |
                |
 +----------+   |
 |  Device  +---+
 |          |
 |          |
 +----------+
]]></artwork></figure>

<t>To offer confidentiality protection two deployment variants need to be
supported:</t>

<t><list style="symbols">
  <t>The author, as the sender, transmits the encrypted payload to a single
device, or to multiple devices. 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 flexiblity 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>For both variants the key distribution data, which is embedded inside the
COSE_Encrypt structure, is included in the SUIT manifest.</t>

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

<t>This specification introduces two extensions to the SUIT_Parameters structure.</t>

<t><list style="symbols">
  <t>A SUIT encryption info parameter (called suit-parameter-encryption-info),
see <xref target="parameter-fig"/>, which contains key distribution information. It is carried
within the suit-directive-override-parameters or the suit-directive-set-parameters
structure. The content of the SUIT_Encryption_Info structure is explained in
<xref target="AES-KW"/> (for AES-KW) and <xref target="ES-DH"/> (for ECDH-ES). An implementation claiming
conformance with this specification must implement support for this parameter.
A device may, however, support only one of the available key distribution techniques.</t>
  <t>A CEK verification parameter (called suit-parameter-cek-verification), see
<xref target="parameter-fig"/>, is utilized in environments where battery exhaustion attacks
are a concern. Details about the CEK verification can be found in
<xref target="cek-verification"/>. This parameter is optional to implement and use.</t>
</list></t>

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

suit-parameter-encryption-info   = [TBD1: Proposed 19]
suit-parameter-cek-verification  = [TBD2: Proposed 20]
]]></artwork></figure>

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

<figure title="Extended suit-directive-write example." anchor="encryption-info-consumed-with-write"><artwork><![CDATA[
/ directive-override-parameters / 20, {
  / parameter-content / 18: h'EA1CED',
  / parameter-encryption-info / 19: h'D860E1A1F0'
},
/ directive-write / 18, 15
/ NOTE: decrypt h'EA1CED' using h'D860E1A1F0' /
/ NOTE: plaintext payload is stored into component #0 /
]]></artwork></figure>

<figure title="Extended suit-directive-copy example." 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,
/ NOTE: encrypted payload is stored into component #1 /
/ directive-set-component-index / 12, 0,
/ directive-override-parameters / 20, {
  / parameter-source-component / 22: 1,
  / parameter-encryption-info / 19: h'D860E1A1F0'
},
/ directive-copy / 22, 15
/ NOTE: decrypt component #1 using h'D860E1A1F0' /
/ NOTE: plaintext payload is stored into component #0 /
]]></artwork></figure>

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

<t>The sub-sections below describe two content key distribution mechanisms,
namely AES Key Wrap (AES-KW) and Ephemeral-Static Diffie-Hellman (ES-DH).
Other mechanisms are supported by COSE and may be supported via enhancements
to this specification.</t>

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

<t><list style="symbols">
  <t>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.</t>
  <t>CEK(R1,S) refers to a CEK shared between R1 and S.</t>
  <t>CEK(<em>,S) or KEK(</em>,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.</t>
  <t>ENC(plaintext, k) refers to the encryption of plaintext with a key k.</t>
  <t>KEK_i or CEK_i refers to the i-th instance of the KEK or CEK, respectively.</t>
</list></t>

<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 RFC 3394 <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 is not embedded in the COSE_Encrypt.ciphertext itself since it
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[
      Fetch KEK(*,S)
      Generate CEK
      ENC(CEK,KEK)
      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[
      Generate CEK
      for i=1 to n {
         Fetch KEK_i(Ri, S)
         ENC(CEK, KEK_i)
      }
      ENC(payload,CEK)
]]></artwork></figure>

<t><list style="symbols">
  <t>The third option is to use different CEKs encrypted with KEKs of
authorized recipients. Assume there are n recipients with their unique KEKs -
KEK_1(R1, S),..., KEK_n(Rn, S). The sender needs to make the following steps:</t>
</list></t>

<figure><artwork><![CDATA[
      for i=1 to n {
         Fetch KEK_i(Ri, S)
         Generate CEK_i
         ENC(CEK_i, KEK_i)
         ENC(payload,CEK_i)
      }
]]></artwork></figure>

<t>This approach is appropriate when no benefits can be gained from encrypting
and transmitting payloads only once.</t>

</section>
<section anchor="cddl"><name>CDDL</name>

<t>The CDDL for the COSE_Encrypt_Tagged structure is shown in <xref target="cddl-aeskw"/>.</t>

<figure title="CDDL for AES-KW-based Content Key Distribution" anchor="cddl-aeskw"><artwork><![CDATA[
COSE_Encrypt_Tagged = #6.96(COSE_Encrypt)
 
SUIT_Encryption_Info = COSE_Encrypt_Tagged

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

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

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

COSE_recipient = [
  protected   : bstr .size 0,
  unprotected : recipient_header_map,
  ciphertext  : bstr        ; CEK encrypted with KEK
]

recipient_header_map = 
{
    1 => int,         ; algorithm identifier
    4 => bstr,        ; key identifier
  * 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 parameter in the COSE_recipient structure is a byte string
of zero length.</t>

<t>The COSE specification requires a consistent byte stream for the authenticated
data structure to be created. This structure is replaced in <xref target="cddl-enc-aeskw"/>.</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.
It is important to note that there are two protected fields shown
in <xref target="cddl-aeskw"/>:</t>

<t><list style="symbols">
  <t>one in the COSE_Encrypt structure, and</t>
  <t>a second one in the COSE_recipient structure.</t>
</list></t>

<t>The value of the external_aad MUST be set to a null value (major type 7,
value 22).</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: 0x26, 0x68, 0x23, 0x06, 0xd4, 0xfb, 0x28, 0xca, 0x01, 0xb4, 0x3b, 0x80</t>
  <t>KEK: "aaaaaaaaaaaaaaaa"</t>
  <t>KID: "kid-1"</t>
  <t>Plaintext firmware (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'1de460e8b5b68d7222c0d6f20484d8ab'
  },
  / payload: / null / detached ciphertext /,
  / recipients: / [
    [
      / protected: / << {
      } >>,
      / unprotected: / {
        / alg / 1: -3 / A128KW /,
        / kid / 4: 'kid-1'
      },
      / payload: CEK encrypted with KEK /
      h'a86200e4754733e4c00fc08c6a72cc1996e129922eab504f'
    ]
  ]
])
]]></artwork></figure>

<t>The CEK, in hex format, was "4C805F1587D624ED5E0DBB7A7F7FA7EB".
The encrypted firmware (with a line feed added) was:</t>

<figure><artwork><![CDATA[
A8B6E61EF17FBAD1F1BF3235B3C64C06098EA512223260
F9425105F67F0FB6C92248AE289A025258F06C2AD70415
]]></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 three 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 a randomly generated
CEK with the KEK derived by layer 2.</t>
  <t>Layer 2: Uses ECDH Ephemeral-Static direct to generate the KEK for layer 1.</t>
</list></t>

<t>As a result, the three layers combine ECDH-ES with AES-KW. An example is
given in Appendix B of RFC 9052 and 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 emphemeral key
and an identifier for the recipients public key.</t>
</list></t>

<t>The steps taken by the sender are:</t>

<figure><artwork><![CDATA[
      Generate CEK
      for i=1 to n {
         Generate KEK_i(Ri, S) using ES-DH
         ENC(CEK, KEK_i)
      }
      ENC(payload,CEK)
]]></artwork></figure>

<t><list style="symbols">
  <t>The alternative is to encrypt a payload with a different CEK for each
recipient. Assume there are KEK_1(R1, S),..., KEK_n(Rn, S) have been generated
for the different recipients using ES-DH. The following steps needs to be made
by the sender:</t>
</list></t>

<figure><artwork><![CDATA[
      for i=1 to n {
         Generate KEK_i(Ri, S) using ES-DH
         Generate CEK_i
         ENC(CEK_i, KEK_i)
         ENC(payload,CEK_i)
      }
]]></artwork></figure>

<t>This results in n-manifests. This approach is useful when payloads contain
information unique to a device. The encryption operation effectively becomes
ENC(payload_i,CEK_i).</t>

</section>
<section anchor="cddl-1"><name>CDDL</name>

<t>The CDDL for the COSE_Encrypt_Tagged structure is shown in <xref target="cddl-esdh"/>.</t>

<figure title="CDDL for ES-DH-based Content Key Distribution" anchor="cddl-esdh"><artwork><![CDATA[
COSE_Encrypt_Tagged = #6.96(COSE_Encrypt)
 
SUIT_Encryption_Info = COSE_Encrypt_Tagged

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

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

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

COSE_recipient = [
  protected   : bstr .size 0,
  unprotected : recipient_header_map,
  ciphertext  : bstr        ; CEK encrypted with KEK
  recipients : [ + COSE_recipient_inner ]  
]

recipient_header_map = 
{
    1 => int,         ; algorithm identifier for key wrap
    4 => bstr,        ; key identifier
  * label =values     ; extension point
}

COSE_recipient_inner = [
  protected   : bstr .cbor inner_recipient_header_pr_map,
  unprotected : inner_recipient_header_unpr_map,
  ciphertext  : nil
]

inner_recipient_header_pr_map = 
{
    1 => int,         ; algorithm identifier for ES-DH
  * label =values     ; extension point
}

inner_recipient_header_unpr_map = 
{
    1 => int,         ; algorithm identifier
   -1 => COSE_Key,    ; ephemeral public key for the sender
    4 => bstr,        ; identifier of the recipient public key
  * label =values     ; extension point
}
]]></artwork></figure>

</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>Algorithm id for key wrap: A128KW</t>
  <t>Algorithm for ES-DH: ECDH-ES + HKDF-256</t>
  <t>IV: 0x26, 0x68, 0x23, 0x06, 0xd4, 0xfb,
    0x28, 0xca, 0x01, 0xb4, 0x3b, 0x80</t>
  <t>KID: "kid-1"</t>
  <t>Plaintext: "This is a real firmware image."</t>
  <t>Firmware (hex):
546869732069732061207265616C206669726D7761726520696D6167652E</t>
</list></t>

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

<figure><artwork><![CDATA[
D8608443A10101A1054C26682306D4FB28CA01B43B80F6818440A101225
818DBD43C4E9D719C27C6275C67D628D493F090593DB8218F11818344A1
013818A220A401022001215820B2ADD44368EA6D641F9CA9AF308B4079A
EB519F11E9B8A55A600B21233E86E6822F404456B69642D3140
]]></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 ES-DH" anchor="esdh-example"><artwork><![CDATA[
  96(
     [
       / protected / h'a10101' / {
           \ alg \ 1:1 \ AES-GCM-128 \
         } / ,
       / unprotected / {
         / iv / 5:h'26682306D4FB28CA01B43B80'
         },
       / null value due to detached ciphertext /
         null,
       / recipients / [
         [
           / protected / h'',
           / unprotected / {
             / alg / 1:-3 / A128KW /
           },
           / ciphertext - CEK encrypted with KEK /
           h'dbd43c4e9d719c27c6275c67d628d493f090593db8218f11',
           / recipients-inner / [
             [
               / protected / h'a1013818' / {
                   \ alg \ 1:-25 \ ECDH-ES + HKDF-256 \
                 } / ,
               / unprotected / {
                 / ephemeral / -1:{
                   / kty / 1:2,
                   / crv / -1:1,
                   / x / -2:h'b2add44368ea6d641f9ca9af308b4079
                              aeb519f11e9b8a55a600b21233e86e68',
                   / y / -3:false
                 },
                 / kid / 4:'kid-1'
               },
               / ciphertext / h''
             ]
           ]
         ]
       ]
     ]
   )
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="cek-verification"><name>CEK Verification</name>

<t>While the SUIT manifest is integrity protected and authenticated, the SUIT envelope
is not protected cryptographically. Hence, an adversary located along the communication
path between the sender and the recipient could modify the COSE_Encrypt structure
(assuming that no other communication security mechanism is in use).</t>

<t>For example, if the attacker alters the key distribution data then a recipient will
decrypt the firmware image with an incorrect key. This will lead to expending
energy and flash cycles until the failure is detected.</t>

<t>To mitigate this attack, a new parameter, called suit-cek-verification, is added
to the manifest. The suit-cek-verification parameter is optional to implement and
optional to use. When used, it reduces the risk of a battery exhaustion attack against
the IoT device.</t>

<t>Since the manifest is protected by a digital signature or a MAC, an adversary cannot
successfully modify this value. This parameter allows the recipient to verify
whether the CEK has successfully been derived.</t>

<t>The suit-cek-verification parameter contains a byte string resulting from the
encryption of 8 bytes of 0xA5 using the CEK with a nonce of all zeros and empty
additional data using the cipher algorithm and mode also used to encrypt the
plaintext. The same nonce used for CEK verification MUST NOT be used to
encrypt plaintext with the same CEK.</t>

</section>
<section anchor="firmware-updates-on-iot-devices-with-flash-memory"><name>Firmware Updates on IoT Devices with Flash Memory.</name>

<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 byte level
(often 4-bytes).
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 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.</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 should 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 is often referred as A/B approach. A/B refers to the two slots involved.
Two slots are used 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
re-encrypted it 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 an off-chip flash memory and therefore more vulnerable to
physical attacks. Note that this description assumes that the processor does
not execute encrypted memory (i.e. 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 for the firmware image must, however, 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 mode (AES-CTR) and
AES Cipher Block Chaining (AES-CBC) ciphers that do not offer integrity protection.
These ciphers are useful for the use cases that require firmware encryption on IoT
devices. For many other use cases where software packages, configuration information
or personalization data needs to be encrypted, the use of Authenticated Encryption
with Additional Data (AEAD) ciphers is preferred.</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 NOTE 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 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 toghether, 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>[[Editor's Note: Add examples for a complete manifest here (including a digital signature), 
multiple recipients, encryption of manifests (in comparison to firmware images).]]</t>

<t>The following manifests examplify how to deliver encrypted firmware 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'21F91D0007458DED08ED6C3D6B9A6824
        FE58100529DF05F5947BDD1FFF5DFBE9'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: /
      h'B1614992A357783A6D35D7D77807D7DA
        0F67E0CB5D0BDBFD592D9C45C5BDD3B6
        828E3A7A1101B33D558EB7C5114D0571
        22D69455972D9937A1000E8F10DD5A2E'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 1,
    / common / 3: << {
      / components / 2: [
        [h'00'] / to be decrypted payload /,
      ]
    } >>,
    / install / 17: << [
      / fetch encrypted firmware /
      / directive-override-parameters / 20, {
        / parameter-content / 18:
        h'2b3765ff457dd98a4ba7130a40462b66
          3c08198146d23f3a32094392ca5040c3
          121c8e5f4c04d5a3d1d6171bcf362b',
        / parameter-encryption-info / 19: << 96([
          / protected: / << {
            / alg / 1: 1 / AES-GCM-128 /
          } >>,
          / unprotected: / {
            / IV / 5: h'1de460e8b5b68d7222c0d6f20484d8ab'
          },
          / payload: / null / detached ciphertext /,
          / recipients: / [
            [
              / protected: / << {
              } >>,
              / unprotected: / {
                / alg / 1: -3 / A128KW /,
                / kid / 4: 'kid-1'
              },
              / payload: /
              h'a86200e4754733e4c00fc08c
                6a72cc1996e129922eab504f'
              / CEK encrypted with KEK /
            ]
          ]
        ]) >>
      },

      / decrypt encrypted firmware /
      / directive-write / 18, 15
      / consumes the SUIT_Encryption_Info above /,

      / verify decrypted firmware /
      / directive-override-parameters / 20, {
        / parameter-image-digest / 3: << [
          / digest-algorithm-id: / -16 / SHA-256 /,
          / digest-bytes: /
          h'efe16b6a486ff25e9fb5fabf515e2bfc
            3f38b405de377477b23275b53049b46b'
        ] >>,
        / parameter-image-size / 14: 31
      },
      / condition-image-match / 3, 15
    ] >>
  } >>
})
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA2025873825824822F582021F91D0007458DED08ED6C3D6B9A6824FE
58100529DF05F5947BDD1FFF5DFBE9584AD28443A10126A0F65840B16149
92A357783A6D35D7D77807D7DA0F67E0CB5D0BDBFD592D9C45C5BDD3B682
8E3A7A1101B33D558EB7C5114D057122D69455972D9937A1000E8F10DD5A
2E0358BBA4010102010346A102818141001158AB8814A212582F2B3765FF
457DD98A4BA7130A40462B663C08198146D23F3A32094392CA5040C3121C
8E5F4C04D5A3D1D6171BCF362B135843D8608443A10101A105501DE460E8
B5B68D7222C0D6F20484D8ABF6818341A0A2012204456B69642D315818A8
6200E4754733E4C00FC08C6A72CC1996E129922EAB504F120F14A2035824
822F5820EFE16B6A486FF25E9FB5FABF515E2BFC3F38B405DE377477B232
75B53049B46B0E181F030F
]]></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 decrypt 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'65576167AF903B981C419CDAC9B5F63C
        3A697927CC7FBF81CD6E34F4A70BCB60'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: /
      h'A8C807FF03015088492C9C3B0779A771
        502639676E7D27C3D33E8432037FA9D1
        FE948D3C4C82778A6E2B1ADA74287809
        526014A2BACFDC64600F63847956AE6F'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 1,
    / common / 3: << {
      / components / 2: [
        [h'00'] / to be decrypted payload /,
        [h'01'] / encrypted payload /
      ]
    } >>,
    / install / 17: << [
      / fetch encrypted firmware /
      / directive-set-component-index / 12, 1 / [h'01'] /,
      / directive-override-parameters / 20, {
        / parameter-uri / 21:
        "https://author.example.com/encrypted-firmware.bin",
        / parameter-image-size / 14: 47
      },
      / directive-fetch / 21, 15,

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

      / verify decrypted firmware /
      / directive-override-parameters / 20, {
        / parameter-image-digest / 3: << [
          / digest-algorithm-id: / -16 / SHA-256 /,
          / digest-bytes: /
          h'efe16b6a486ff25e9fb5fabf515e2bfc
            3f38b405de377477b23275b53049b46b'
        ] >>,
        / parameter-image-size / 14: 31
      },
      / condition-image-match / 3, 15
    ] >>
  } >>
})
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA2025873825824822F582065576167AF903B981C419CDAC9B5F63C3A
697927CC7FBF81CD6E34F4A70BCB60584AD28443A10126A0F65840A8C807
FF03015088492C9C3B0779A771502639676E7D27C3D33E8432037FA9D1FE
948D3C4C82778A6E2B1ADA74287809526014A2BACFDC64600F63847956AE
6F0358CDA4010102010349A102828141008141011158BA900C0114A21578
3168747470733A2F2F617574686F722E6578616D706C652E636F6D2F656E
637279707465642D6669726D776172652E62696E0E182F150F0C0014A216
01135843D8608443A10101A105501DE460E8B5B68D7222C0D6F20484D8AB
F6818341A0A2012204456B69642D315818A86200E4754733E4C00FC08C6A
72CC1996E129922EAB504F160F14A2035824822F5820EFE16B6A486FF25E
9FB5FABF515E2BFC3F38B405DE377477B23275B53049B46B0E181F030F
]]></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 ECDH-ES).</t>
</list></t>

<t>Both cases require some upfront communication interaction. This interaction is likely provided by
an IoT device management solution, as described in <xref target="RFC9019"/>.</t>

<t>For AES Key Wrap to provide high security 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 two values to the SUIT_Parameters registry established by 
<xref target="I-D.ietf-suit-manifest"/>.</t>

<figure><artwork><![CDATA[
Label      Name                 Reference
-----------------------------------------
TBD1       Encryption Info      Section 4
TBD2       CEK Verification     Section 4
]]></artwork></figure>

<t>[Editor's Note: 
 - TBD1: Proposed 19
 - TBD2: Proposed 20
]</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'><organization/></author>
<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'><organization/></author>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<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'><organization/></author>
<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'><organization/></author>
<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'><organization/></author>
<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='19' month='January' 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-03'/>
   
</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'><organization/></author>
<author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'><organization/></author>
<author fullname='D. Brown' initials='D.' surname='Brown'><organization/></author>
<author fullname='M. Meriac' initials='M.' surname='Meriac'><organization/></author>
<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'><organization/></author>
<author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'><organization/></author>
<author fullname='H. Birkholz' initials='H.' surname='Birkholz'><organization/></author>
<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'><organization/></author>
<author fullname='L. Garratt' initials='L.' surname='Garratt'><organization/></author>
<author fullname='S. Smyshlyaev' initials='S.' surname='Smyshlyaev'><organization/></author>
<author fullname='N. Sullivan' initials='N.' surname='Sullivan'><organization/></author>
<author fullname='C. Wood' initials='C.' surname='Wood'><organization/></author>
<date month='October' year='2020'/>
<abstract><t>Randomness is a crucial ingredient for Transport Layer Security (TLS) and related security protocols.  Weak or predictable &quot;cryptographically secure&quot; 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'><organization/></author>
<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'><organization/></author>
<author fullname='S. Santesson' initials='S.' surname='Santesson'><organization/></author>
<author fullname='S. Farrell' initials='S.' surname='Farrell'><organization/></author>
<author fullname='S. Boeyen' initials='S.' surname='Boeyen'><organization/></author>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<author fullname='W. Polk' initials='W.' surname='Polk'><organization/></author>
<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="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>


    </references>


<section 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, and
Carsten Bormann for their review feedback. Finally, we would like to thank Dick Brooks for
making us aware of the challenges firmware encryption imposes on binary analysis.</t>

</section>


  </back>

<!-- ##markdown-source:
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
xqwKlRA+Hh5QTOP/A47wzeAHsAAA

-->

</rfc>

