<?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-10" 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
- software packages,
- personalization data, 
- configuration data, and
- machine learning models.</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"/>:
- one in the COSE_Encrypt structure, and 
- a second one in the COSE_recipient structure.</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:
- Algorithm for payload encryption: AES-GCM-128
- Algorithm id for key wrap: A128KW
- IV: 0x26, 0x68, 0x23, 0x06, 0xd4, 0xfb, 0x28, 0xca, 0x01, 0xb4, 0x3b, 0x80
- KEK: "aaaaaaaaaaaaaaaa"
- KID: "kid-1"
- Plaintext firmware (txt): "This is a real firmware image."
  (in hex): 546869732069732061207265616C206669726D7761726520696D6167652E</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:
- Algorithm for payload encryption: AES-GCM-128
- Algorithm id for key wrap: A128KW
- Algorithm for ES-DH: ECDH-ES + HKDF-256
- IV: 0x26, 0x68, 0x23, 0x06, 0xd4, 0xfb, 0x28, 0xca, 0x01, 0xb4, 0x3b, 0x80
- KID: "kid-1"
- Plaintext: "This is a real firmware image."
- Firmware (hex): 546869732069732061207265616C206669726D7761726520696D6167652E</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>

