<?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-11" 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="March" 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="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 Key Wrap Encryption" 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 field with alg=AES-GCM-128 /
        h'A10101', 
        {
           / unprotected field with iv /
           5: h'26682306D4FB28CA01B43B80'
        }, 
        / null value due to detached ciphertext /
        null,
        [ / recipients array /
           h'', / protected field /
           {    / unprotected field /
              1: -3,            / alg=A128KW /
              4: h'6B69642D31'  / key id /
           }, 
           / CEK encrypted with KEK /
           h'AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D'
        ]
    ]
)
]]></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.
The steps taken by the sender are:</t>
</list></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 " 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. The last IV used to encrypt 
data in the slot is therefore</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 the encrypted firmware and its encryption info to the 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"><name>AES Key Wrap Example</name>

<t>Diagnostic notation of the SUIT manifest (with line
breaks added for readability).</t>

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107( {
  / suit-authentication-wrapper / 2: << [
    / digest: / << [
      / suit-digest-algorithm-id: / -16 / SHA256 /,
      / suit-digest-bytes: / 
      h'A447024C395B90095678C174C4075F3
      21EF29A57A0A028D01080019E5B21ED5F'
    ] >>,
    / signatures: / << / COSE_Sign1_Tagged / 18( [
      / protected: / << {
        / alg / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / 
      h'65C40240E28F7F02046CE85F8343A78
      86B349D2523B3A815C161D54337395721
      953ACA109690B3588761195071BCF04D5
      57260484B4B281C508D9E95FED4B9EF'
    ] ) >>
  ] >>,
  / suit-manifest / 3: << {
    / suit-manifest-version / 1: 1,
    / suit-manifest-sequence-number / 2: 1,
    / suit-common / 3: << {
      / suit-components / 2: [
        [h'00'] / to be decrypted firmware /,
        [h'01'] / encrypted firmware /
      ]
    } >>,
    / suit-install / 17: << [
      / fetch encrypted firmware /
      / suit-directive-set-component-index / 12, 1 / [h'01'] /,
      / suit-directive-override-parameters / 20, {
        / suit-parameter-uri / 
        21: "https://author.example.com/encrypted-firmware.bin",
        / suit-parameter-image-digest / 3: << [
          / suit-digest-algorithm-id: / -16 / SHA256 /,
          / suit-digest-bytes: / 
          h'F63187728B49B0E57FE891B932C9C88
          1735D880EFAE69A9A4D45E0FE72C70DA1'
        ] >>,
        / suit-parameter-image-size / 14: 46
      },
      / suit-directive-fetch / 21, 15,
      / suit-condition-image-match / 3, 15,

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

      / verify decrypted firmware /
      / suit-directive-override-parameters / 20, {
        / suit-parameter-image-digest / 3: << [
          / suit-digest-algorithm-id: / -16 / SHA256 /,
          / suit-digest-bytes: / 
          h'36921488FE6680712F734E11F58D87E
          EB66D4B21A8A1AD3441060814DA16D50F'
        ] >>,
        / suit-parameter-image-size / 14: 30
      },
      / suit-condition-image-match / 3, 15
    ] >>
  } >>
} )
]]></artwork></figure>

<t>In hex:</t>

<figure><artwork><![CDATA[
D86BA2025873825824822F5820A447024C395B90095678C174C4075F321E
F29A57A0A028D01080019E5B21ED5F584AD28443A10126A0F6584065C402
40E28F7F02046CE85F8343A7886B349D2523B3A815C161D5433739572195
3ACA109690B3588761195071BCF04D557260484B4B281C508D9E95FED4B9
EF0358EEA4010102010349A102828141008141011158DB920C0114A31578
3168747470733A2F2F617574686F722E6578616D706C652E636F6D2F656E
637279707465642D6669726D776172652E62696E035824822F5820F63187
728B49B0E57FE891B932C9C881735D880EFAE69A9A4D45E0FE72C70DA10E
182E150F030F0C0014A2160113D8608443A10101A1054C26682306D4FB28
CA01B43B80F68340A2012204456B69642D315818AF09622B4F40F1793012
9D18D0CEA46F159C49E7F68B644D160F14A2035824822F582036921488FE
6680712F734E11F58D87EEB66D4B21A8A1AD3441060814DA16D50F0E181E
030F
]]></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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

-->

</rfc>

