<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.12 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc rfcedstyle="yes"?>
<?rfc toc="yes"?>
<?rfc tocindent="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-suit-information-model-12" category="info">

  <front>
    <title abbrev="A Firmware Manifest Information Model">A Manifest Information Model for Firmware Updates in IoT Devices</title>

    <author initials="B." surname="Moran" fullname="Brendan Moran">
      <organization>Arm Limited</organization>
      <address>
        <email>Brendan.Moran@arm.com</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization>Arm Limited</organization>
      <address>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization>Fraunhofer SIT</organization>
      <address>
        <email>henk.birkholz@sit.fraunhofer.de</email>
      </address>
    </author>

    <date year="2021" month="May" day="24"/>

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

    <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 life requires such an update mechanism to fix vulnerabilities, to update configuration settings, as well as adding new functionality.</t>

<t>One component of such a firmware update is a concise and machine-processable meta-data 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>

  <middle>


<section anchor="introduction" title="Introduction">

<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 life requires such an update mechanism to fix vulnerabilities, to update configuration settings, as well as adding new functionality.</t>

<t>One component of such a firmware update is a concise and machine-processable meta-data 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>

<t>This document describes all the information elements required in a manifest to secure firmware updates of IoT devices. Each information element is motiviated by user stories and threats it aims to mitigate. These threats and user stories are not intended to be an exhaustive list of the threats against IoT devices, nor of the possible user stories that describe how to conduct a firmware update. Instead they are intended to describe the threats against firmware updates in isolation and provide sufficient motivation to specify the information elements that cover a wide range of user stories.</t>

<t>To distinguish information elements from their encoding and serialization over the wire this document presents an information model. RFC 3444 <xref target="RFC3444"/> describes the differences between information and data models.</t>

<t>Because this document covers a wide range of user stories and a wide range of threats, not all information elements apply to all scenarios. As a result, various information elements are optional to implement and optional to use, depending on which threats exist in a particular domain of application and which user stories are important for deployments.</t>

</section>
<section anchor="requirements-and-terminology" title="Requirements and Terminology">

<section anchor="requirements-notation" title="Requirements Notation">

<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>Unless otherwise stated these words apply to the design of the manifest format, not its implementation or application. Hence, whenever an information is declared as “REQUIRED” this implies that the manifest format document has to include support for it.</t>

</section>
<section anchor="terminology" title="Terminology">

<t>This document uses terms defined in <xref target="I-D.ietf-suit-architecture"/>.
The term ‘Operator’ refers to both Device and Network Operator.</t>

<t>Secure time and secure clock refer to a set of requirements on time sources. For local time sources, this primarily means that the clock must be monotonically increasing, including across power cycles, firmware updates, etc. For remote time sources, the provided time must be both authenticated and guaranteed to be correct to within some predetermined bounds, whenever the time source is accessible.</t>

<t>The term Envelope is used to describe an encoding that allows the bundling of a manifest with related information elements that are not directly contained within the manifest.</t>

<t>The term Payload is used to describe the data that is delivered to a device during an update. This is distinct from a “firmware image”, as described in <xref target="I-D.ietf-suit-architecture"/>, because the payload is often in an intermediate state, such as being encrypted, compressed and/or encoded as a differential update. The payload, taken in isolation, is often not the final firmware image.</t>

</section>
</section>
<section anchor="manifest-information-elements" title="Manifest Information Elements">

<t>Each manifest information element is anchored in a security requirement or a usability requirement. The manifest elements are described below, justified by their requirements.</t>

<section anchor="element-version-id" title="Version ID of the Manifest Structure">

<t>An identifier that describes which iteration of the manifest format is contained in the structure. This allows devices to identify the version of the manifest data model that is in use.</t>

<t>This element is REQUIRED.</t>

</section>
<section anchor="element-sequence-number" title="Monotonic Sequence Number">

<t>A monotonically increasing sequence number to prevent malicious actors from reverting a firmware update against the policies of the relevant authority.</t>

<t>For convenience, the monotonic sequence number may be a UTC timestamp. This allows global synchronisation of sequence numbers without any additional management.</t>

<t>This element is REQUIRED.</t>

<t>Implements: <xref target="req-sec-sequence">REQ.SEC.SEQUENCE</xref></t>

</section>
<section anchor="element-vendor-id" title="Vendor ID">

<t>The Vendor ID element helps to distinguish between identically named products from different vendors. Vendor ID is not intended to be a human-readable element. It is intended for binary match/mismatch comparison only.</t>

<t>Recommended practice is to use <xref target="RFC4122"/> version 5 UUIDs with the vendor’s domain name and the DNS name space ID. Other options include type 1 and type 4 UUIDs.</t>

<t>Fixed-size binary identifiers are preferred because they are simple to match, unambiguous in length, explicitly non-parsable, and require no issuing authority. Guaranteed unique integers are preferred because they are small and simple to match, however they may not be fixed length and they may require an issuing authority to ensure uniqueness. Free-form text is avoided because it is variable-length, prone to error, and often requires parsing outside the scope of the manifest serialization.</t>

<t>If human-readable content is required, it SHOULD be contained in a separate manifest information element: <xref target="manifest-element-text">Manifest text information</xref></t>

<t>This element is RECOMMENDED.</t>

<t>Implements: <xref target="req-sec-compatible">REQ.SEC.COMPATIBLE</xref>, <xref target="req-sec-authentic-compatibility">REQ.SEC.AUTH.COMPATIBILITY</xref>.</t>

<t>Here is an example for a domain name-based UUID. Vendor A creates a UUID based on a domain name it controls, such as vendorId = UUID5(DNS, “vendor-a.example”)</t>

<t>Because the DNS infrastructure prevents multiple registrations of the same domain name, this UUID is (with very high probability) guaranteed to be unique. Because the domain name is known, this UUID is reproducible. Type 1 and type 4 UUIDs produce similar guarantees of uniqueness, but not reproducibility.</t>

<t>This approach creates a contention when a vendor changes its name or relinquishes control of a domain name. In this scenario, it is possible that another vendor would start using that same domain name. However, this UUID is not proof of identity; a device’s trust in a vendor must be anchored in a cryptographic key, not a UUID.</t>

</section>
<section anchor="element-class-id" title="Class ID">

<t>A device “Class” is a set of different device types that can accept the same firmware update without modification. It thereby allows devices to determine applicability of a firmware in an unambiguous way. Class IDs must be unique within the scope of a Vendor ID. This is to prevent similarly, or identically named devices colliding in their customer’s infrastructure.</t>

<t>Recommended practice is to use <xref target="RFC4122"/> version 5 UUIDs with as much information as necessary to define firmware compatibility. Possible information used to derive the class UUID includes:</t>

<t><list style="symbols">
  <t>model name or number</t>
  <t>hardware revision</t>
  <t>runtime library version</t>
  <t>bootloader version</t>
  <t>ROM revision</t>
  <t>silicon batch number</t>
</list></t>

<t>The Class ID UUID should use the Vendor ID as the name space identifier. Other options include version 1 and 4 UUIDs. Classes may be more fine-grained granular than is required to identify firmware compatibility. Classes must not be less granular than is required to identify firmware compatibility. Devices may have multiple Class IDs.</t>

<t>Class ID is not intended to be a human-readable element. It is intended for binary match/mismatch comparison only. A manifest serialization SHOULD NOT permit free-form text content to be used for Class ID. A fixed-size binary identifier SHOULD be used.</t>

<t>Some organizations desire to keep the same product naming across multiple, incompatible hardware revisions for ease of user experience. If this naming is propagated into the firmware, then matching a specific hardware version becomes a challenge. An opaque, non-readable binary identifier has no naming implications and so is more likely to be usable for distinguishing among incompatible device groupings, regardless of naming.</t>

<t>Fixed-size binary identifiers are preferred because they are simple to match, unambiguous in length, opaque and free from naming implications, and explicitly non-parsable. Free-form text is avoided because it is variable-length, prone to error, often requires parsing outside the scope of the manifest serialization, and may be homogenized across incompatible device groupings.</t>

<t>If Class ID is not implemented, then each logical device class must use a unique trust anchor for authorization.</t>

<t>This element is RECOMMENDED.</t>

<t>Implements: Security Requirement <xref target="req-sec-compatible">REQ.SEC.COMPATIBLE</xref>, <xref target="req-sec-authentic-compatibility">REQ.SEC.AUTH.COMPATIBILITY</xref>.</t>

<section anchor="example-1-different-classes" title="Example 1: Different Classes">

<t>Vendor A creates product Z and product Y. The firmware images of products Z and Y are not interchangeable. Vendor A creates UUIDs as follows:</t>

<t><list style="symbols">
  <t>vendorId = UUID5(DNS, “vendor-a.com”)</t>
  <t>ZclassId = UUID5(vendorId, “Product Z”)</t>
  <t>YclassId = UUID5(vendorId, “Product Y”)</t>
</list></t>

<t>This ensures that Vendor A’s Product Z cannot install firmware for Product Y and Product Y cannot install firmware for Product Z.</t>

</section>
<section anchor="example-2-upgrading-class-id" title="Example 2: Upgrading Class ID">

<t>Vendor A creates product X. Later, Vendor A adds a new feature to product X, creating product X v2. Product X requires a firmware update to work with firmware intended for product X v2.</t>

<t>Vendor A creates UUIDs as follows:</t>

<t><list style="symbols">
  <t>vendorId = UUID5(DNS, “vendor-a.com”)</t>
  <t>XclassId = UUID5(vendorId, “Product X”)</t>
  <t>Xv2classId = UUID5(vendorId, “Product X v2”)</t>
</list></t>

<t>When product X receives the firmware update necessary to be compatible with product X v2, part of the firmware update changes the class ID to Xv2classId.</t>

</section>
<section anchor="example-3-shared-functionality" title="Example 3: Shared Functionality">

<t>Vendor A produces two products, product X and product Y. These components share a common core (such as an operating system), but have different applications. The common core and the applications can be updated independently. To enable X and Y to receive the same common core update, they require the same class ID. To ensure that only product X receives application X and only product Y receives application Y, product X and product Y must have different class IDs. The vendor creates Class IDs as follows:</t>

<t><list style="symbols">
  <t>vendorId = UUID5(DNS, “vendor-a.com”)</t>
  <t>XclassId = UUID5(vendorId, “Product X”)</t>
  <t>YclassId = UUID5(vendorId, “Product Y”)</t>
  <t>CommonClassId = UUID5(vendorId, “common core”)</t>
</list></t>

<t>Product X matches against both XclassId and CommonClassId. Product Y matches against both YclassId and CommonClassId.</t>

</section>
<section anchor="example-4-white-labelling" title="Example 4: White-labelling">

<t>Vendor A creates a product A and its firmware. Vendor B sells the product under its own name as Product B with some customised configuration. The vendors create the Class IDs as follows:</t>

<t><list style="symbols">
  <t>vendorIdA = UUID5(DNS, “vendor-a.com”)</t>
  <t>classIdA = UUID5(vendorIdA, “Product A-Unlabelled”)</t>
  <t>vendorIdB = UUID5(DNS, “vendor-b.com”)</t>
  <t>classIdB = UUID5(vendorIdB, “Product B”)</t>
</list></t>

<t>The product will match against each of these class IDs. If Vendor A and Vendor B provide different components for the device, the implementor may choose to make ID matching scoped to each component. Then, the vendorIdA, classIdA match the component ID supplied by Vendor A, and the vendorIdB, classIdB match the component ID supplied by Vendor B.</t>

</section>
</section>
<section anchor="element-precursor-digest" title="Precursor Image Digest Condition">

<t>This element provides information about the payload that needs to be present on the device for an update to apply. This may, for example, be the case with differential updates.</t>

<t>This element is OPTIONAL.</t>

<t>Implements: <xref target="req-sec-authentic-precursor">REQ.SEC.AUTH.PRECURSOR</xref></t>

</section>
<section anchor="element-required-version" title="Required Image Version List">

<t>Payloads may only be applied to a specific firmware version or firmware versions. For example, a payload containing a differential update may be applied only to a specific firmware version.</t>

<t>When a payload applies to multiple versions of a firmware, the required image version list specifies which firmware versions must be present for the update to be applied. This allows the update author to target specific versions of firmware for an update, while excluding those to which it should not or cannot be applied.</t>

<t>This element is OPTIONAL.</t>

<t>Implements: <xref target="req-use-img-versions">REQ.USE.IMG.VERSIONS</xref></t>

</section>
<section anchor="manifest-element-expiration" title="Expiration Time">

<t>This element tells a device the time at which the manifest expires and should no longer be used. This element should be used where a secure source of time is provided and firmware is intended to expire predictably. This element may also be displayed (e.g. via an app) for user confirmation since users typically have a reliable knowledge of the date.</t>

<t>Special consideration is required for end-of-life if a firmware will not be updated again, for example if a business stops issuing updates to a device. In this case the last valid firmware should not have an expiration time.</t>

<t>This element is OPTIONAL.</t>

<t>Implements: <xref target="req-sec-exp">REQ.SEC.EXP</xref></t>

</section>
<section anchor="manifest-element-format" title="Payload Format">

<t>This element describes the payload format within the signed metadata. It is used to enable devices to decode payloads correctly.</t>

<t>This element is REQUIRED.</t>

<t>Implements: <xref target="req-sec-authentic-image-type">REQ.SEC.AUTH.IMG_TYPE</xref>, <xref target="req-use-img-format">REQ.USE.IMG.FORMAT</xref></t>

</section>
<section anchor="manifest-element-processing-steps" title="Processing Steps">

<t>A representation of the Processing Steps required to decode a payload, in particular those that are compressed, packed, or encrypted. The representation must describe which algorithms are used and must convey any additional parameters required by those algorithms.</t>

<t>A Processing Step may indicate the expected digest of the payload after the processing is complete.</t>

<t>This element is RECOMMENDED.</t>

<t>Implements: <xref target="req-use-img-nested">REQ.USE.IMG.NESTED</xref></t>

</section>
<section anchor="maniest-element-storage-location" title="Storage Location">

<t>This element tells the device where to store a payload within a given component. The device can use this to establish which permissions are necessary and the physical storage location to use.</t>

<t>This element is REQUIRED.</t>

<t>Implements: <xref target="req-sec-authentic-image-location">REQ.SEC.AUTH.IMG_LOC</xref></t>

<section anchor="example-1-two-storage-locations" title="Example 1: Two Storage Locations">

<t>A device supports two components: an OS and an application. These components can be updated independently, expressing dependencies to ensure compatibility between the components. The Author chooses two storage identifiers:</t>

<t><list style="symbols">
  <t>“OS”</t>
  <t>“APP”</t>
</list></t>

</section>
<section anchor="example-2-file-system" title="Example 2: File System">

<t>A device supports a full-featured filesystem. The Author chooses to use the storage identifier as the path at which to install the payload. The payload may be a tarball, in which case, it unpacks the tarball into the specified path.</t>

</section>
<section anchor="example-3-flash-memory" title="Example 3: Flash Memory">

<t>A device supports flash memory. The Author chooses to make the storage identifier the offset where the image should be written.</t>

</section>
</section>
<section anchor="manifest-element-component-identifier" title="Component Identifier">

<t>In a device with more than one storage subsystem, a storage identifier is insufficient to identify where and how to store a payload. To resolve this, a component identifier indicates to which part of the storage subsystem the payload shall be placed.</t>

<t>A serialization may choose to combine Component Identifier and <xref target="maniest-element-storage-location">Storage Location</xref>.</t>

<t>This element is OPTIONAL.</t>

<t>Implements: <xref target="req-use-mfst-component">REQ.USE.MFST.COMPONENT</xref></t>

</section>
<section anchor="manifest-element-payload-indicator" title="Payload Indicator">

<t>This element provides the information required for the device to acquire the payload. This functionality is only needed when the target device does not intrinsically know where to find the payload.</t>

<t>This can be encoded in several ways:</t>

<t><list style="symbols">
  <t>One URI</t>
  <t>A list of URIs</t>
  <t>A prioritised list of URIs</t>
  <t>A list of signed URIs</t>
</list></t>

<t>This element is OPTIONAL.</t>

<t>Implements: <xref target="req-sec-authenticated-remote-payload">REQ.SEC.AUTH.REMOTE_LOC</xref></t>

</section>
<section anchor="manifest-element-payload-digest" title="Payload Digests">

<t>This element contains one or more digests of one or more payloads. This allows the target device to ensure authenticity of the payload(s) when combined with the <xref target="manifest-element-signature">Signature</xref> element. A manifest format must provide a mechanism to select one payload from a list based on system parameters, such as Execute-In-Place Installation Address.</t>

<t>This element is REQUIRED. Support for more than one digest is OPTIONAL.</t>

<t>Implements: <xref target="req-sec-authentic">REQ.SEC.AUTHENTIC</xref>, <xref target="req-use-img-select">REQ.USE.IMG.SELECT</xref></t>

</section>
<section anchor="manifest-element-size" title="Size">

<t>The size of the payload in bytes, which informs the target device how big of a payload to expect. Without it, devices are exposed to some classes of denial of service attack.</t>

<t>This element is REQUIRED.</t>

<t>Implements: <xref target="req-sec-authentic-execution">REQ.SEC.AUTH.EXEC</xref></t>

</section>
<section anchor="manifest-element-signature" title="Manifest Envelope Element: Signature">

<t>The Signature element contains all the information necessary to protect the contents of the manifest against modification and to offer authentication of the signer. Because the Signature element authenticates the manifest, it cannot be contained within the manifest. Instead, the manifest is either contained within the signature element, or the signature element is a member of the Manifest Envelope and bundled with the manifest.</t>

<t>The Signature element represents the foundation of all security properties of the manifest. Manifests, which are included as dependencies by another manifests, should include a signature so that the recipient can distinguish between different actors with different permissions.</t>

<t>The Signature element must support multiple signers and multiple signing algorithms. A manifest format may allow multiple manifests to be covered by a single Signature element.</t>

<t>This element is REQUIRED in non-dependency manifests.</t>

<t>Implements: <xref target="req-sec-authentic">REQ.SEC.AUTHENTIC</xref>, <xref target="req-sec-rights">REQ.SEC.RIGHTS</xref>, <xref target="req-use-mfst-multi-auth">REQ.USE.MFST.MULTI_AUTH</xref></t>

</section>
<section anchor="manifest-element-additional-install-info" title="Additional Installation Instructions">

<t>Additional installation instructions are machine-readable commands the device should execute when processing the manifest. This information is distinct from the information necessary to process a payload. Additional installation instructions include information such as update timing (for example, install only on Sunday, at 0200), procedural considerations (for example, shut down the equipment under control before executing the update), pre- and post-installation steps (for example, run a script). Other installation instructions could include requesting user confirmation before installing.</t>

<t>This element is OPTIONAL.</t>

<t>Implements: <xref target="req-use-mfst-pre-check">REQ.USE.MFST.PRE_CHECK</xref></t>

</section>
<section anchor="manifest-element-text" title="Manifest text information">

<t>Textual information pertaining to the update described by the manifest. This information is for human consumption only. It MUST NOT be the basis of any decision made by the recipient.</t>

<t>Implements: <xref target="req-use-mfst-text">REQ.USE.MFST.TEXT</xref></t>

</section>
<section anchor="manifest-element-aliases" title="Aliases">

<t>A mechanism for a manifest to augment or replace URIs or URI lists defined by one or more of its dependencies.</t>

<t>This element is OPTIONAL.</t>

<t>Implements: <xref target="req-use-mfst-override">REQ.USE.MFST.OVERRIDE_REMOTE</xref></t>

</section>
<section anchor="manifest-element-dependencies" title="Dependencies">

<t>A list of other manifests that are required by the current manifest. Manifests are identified an unambiguous way, such as a cryptographic digest.</t>

<t>This element is REQUIRED to support deployments that include both multiple authorities and multiple payloads.</t>

<t>Implements: <xref target="req-use-mfst-component">REQ.USE.MFST.COMPONENT</xref></t>

</section>
<section anchor="manifest-element-encryption-wrapper" title="Encryption Wrapper">

<t>Encrypting firmware images requires symmetric content encryption keys. The encryption wrapper provides the information needed for a device to obtain or locate a key that it uses to decrypt the firmware.</t>

<t>This element is REQUIRED for encrypted payloads.</t>

<t>Implements: <xref target="req-sec-image-confidentiality">REQ.SEC.IMG.CONFIDENTIALITY</xref></t>

</section>
<section anchor="manifest-element-xip-address" title="XIP Address">

<t>In order to support execute in place (XIP) systems with multiple possible base addresses, it is necessary to specify which address the payload is linked for.</t>

<t>For example a microcontroller may have a simple bootloader that chooses one of two images to boot. That microcontroller then needs to choose one of two firmware images to install, based on which of its two images is older.</t>

<t>This element is OPTIONAL.</t>

<t>Implements: <xref target="req-use-img-select">REQ.USE.IMG.SELECT</xref></t>

</section>
<section anchor="manifest-element-load-metadata" title="Load-time Metadata">

<t>Load-time metadata provides the device with information that it needs in order to load one or more images. This metadata may include any of:</t>

<t><list style="symbols">
  <t>the source (e.g. non-volatile storage)</t>
  <t>the destination (e.g. an address in RAM)</t>
  <t>cryptographic information</t>
  <t>decompression information</t>
  <t>unpacking information</t>
</list></t>

<t>Typically, loading is done by copying an image from its permanent storage location into its active use location. The metadata allows operations such as decryption, decompression, and unpacking to be performed during that copy.</t>

<t>This element is OPTIONAL.</t>

<t>Implements: <xref target="req-use-load">REQ.USE.LOAD</xref></t>

</section>
<section anchor="manifest-element-exec-metadata" title="Run-time metadata">

<t>Run-time metadata provides the device with any extra information needed to boot the device. This may include the entry-point of an XIP image or the kernel command-line to boot a Linux image.</t>

<t>This element is OPTIONAL.</t>

<t>Implements: <xref target="req-use-exec">REQ.USE.EXEC</xref></t>

</section>
<section anchor="manifest-element-payload" title="Payload">

<t>The Payload element is contained within the manifest or manifest envelope and enables the manifest and payload to be delivered simultaneously. This is used for delivering small payloads, such as cryptographic keys or configuration data.</t>

<t>This element is OPTIONAL.</t>

<t>Implements: <xref target="req-use-payload">REQ.USE.PAYLOAD</xref></t>

</section>
<section anchor="manifest-element-key-claims" title="Manifest Envelope Element: Delegation Chain">

<t>The delegation chain offers enhanced authorization functionality via authorization tokens, such as CBOR Web Tokens <xref target="RFC8392"/> with Proof of Possession Key Semantics <xref target="RFC8747"/>. Each token itself is protected and does not require another layer of protection. Each authorization token typically includes a public key or a public key fingerprint, however this is dependent on the tokens used. Each token MAY include additional metadata, such as key usage information. Because the delegation chain is needed to verify the signature, it must be placed in the Manifest Envelope, rather than the Manifest.</t>

<t>The first token in any delegation chain MUST be autheticated by the recipient’s Trust Anchor. Each subsequent token MUST be authenticated using the previous token. This allows a recipient to discard each antecedent token after it has authenticated the subsequent token. The final token MUST enable authentication of the manifest. More than one delegation chain MAY be used if more than one signature is used. Note that no restriction is placed on the encoding order of these tokens, the order of elements is logical only.</t>

<t>This element is OPTIONAL.</t>

<t>Implements: <xref target="req-use-delegation">REQ.USE.DELEGATION</xref>, <xref target="req-sec-key-rotation">REQ.SEC.KEY.ROTATION</xref></t>

</section>
</section>
<section anchor="design-motivation" title="Security Considerations">

<t>The following sub-sections describe the threat model, user stories, security requirements, and usability requirements. This section also provides the motivations for each of the manifest information elements.</t>

<t>Note that it is worthwhile to recall that a firmware update is, by definition, remote code execution. Hence, if a device is configured to trust an entity to provide firmware, it trusts this entity to do the “right thing”. Many classes of attacks can be mitigated by verifying that a firmware update came from a trusted party and that no rollback is taking place. However, if the trusted entity has been compromised and distributes attacker-provided firmware to devices then the possibilities for deference are limited.</t>

<section anchor="threat-model" title="Threat Model">

<t>The following sub-sections aim to provide information about the threats that were considered, the security requirements that are derived from those threats and the fields that permit implementation of the security requirements. This model uses the S.T.R.I.D.E. <xref target="STRIDE"/> approach. Each threat is classified according to:</t>

<t><list style="symbols">
  <t>Spoofing identity</t>
  <t>Tampering with data</t>
  <t>Repudiation</t>
  <t>Information disclosure</t>
  <t>Denial of service</t>
  <t>Elevation of privilege</t>
</list></t>

<t>This threat model only covers elements related to the transport of firmware updates. It explicitly does not cover threats outside of the transport of firmware updates. For example, threats to an IoT device due to physical access are out of scope.</t>

</section>
<section anchor="threat-descriptions" title="Threat Descriptions">

<t>Many of the threats detailed in this section contain a “threat escalation” description. This explains how the described threat might fit together with other threats and produce a high severity threat. This is important because some of the described threats may seem low severity but could be used with others to construct a high severity compromise.</t>

<section anchor="threat-expired" title="THREAT.IMG.EXPIRED: Old Firmware">

<t>Classification: Elevation of Privilege</t>

<t>An attacker sends an old, but valid manifest with an old, but valid firmware image to a device. If there is a known vulnerability in the provided firmware image, this may allow an attacker to exploit the vulnerability and gain control of the device.</t>

<t>Threat Escalation: If the attacker is able to exploit the known vulnerability, then this threat can be escalated to ALL TYPES.</t>

<t>Mitigated by: <xref target="req-sec-sequence">REQ.SEC.SEQUENCE</xref></t>

</section>
<section anchor="threat-expired-offline" title="THREAT.IMG.EXPIRED.OFFLINE : Offline device + Old Firmware">

<t>Classification: Elevation of Privilege</t>

<t>An attacker targets a device that has been offline for a long time and runs an old firmware version. The attacker sends an old, but valid manifest to a device with an old, but valid firmware image. The attacker-provided firmware is newer than the installed one but older than the most recently available firmware. If there is a known vulnerability in the provided firmware image then this may allow an attacker to gain control of a device. Because the device has been offline for a long time, it is unaware of any new updates. As such it will treat the old manifest as the most current.</t>

<t>The exact mitigation for this threat depends on where the threat comes from. This requires careful consideration by the implementor. If the threat is from a network actor, including an on-path attacker, or an intruder into a management system, then a user confirmation can mitigate this attack, simply by displaying an expiration date and requesting confirmation. On the other hand, if the user is the attacker, then an online confirmation system (for example a trusted timestamp server) can be used as a mitigation system.</t>

<t>Threat Escalation: If the attacker is able to exploit the known vulnerability, then this threat can be escalated to ALL TYPES.</t>

<t>Mitigated by: <xref target="req-sec-exp">REQ.SEC.EXP</xref>, <xref target="req-use-mfst-pre-check">REQ.USE.MFST.PRE_CHECK</xref>,</t>

</section>
<section anchor="threat-incompatible" title="THREAT.IMG.INCOMPATIBLE: Mismatched Firmware">

<t>Classification: Denial of Service</t>

<t>An attacker sends a valid firmware image, for the wrong type of device, signed by an actor with firmware installation permission on both types of device. The firmware is verified by the device positively because it is signed by an actor with the appropriate permission. This could have wide-ranging consequences. For devices that are similar, it could cause minor breakage, or expose security vulnerabilities. For devices that are very different, it is likely to render devices inoperable.</t>

<t>Mitigated by: <xref target="req-sec-compatible">REQ.SEC.COMPATIBLE</xref></t>

<t>For example, suppose that two vendors, Vendor A and Vendor B, adopt the same trade name in different geographic regions, and they both make products with the same names, or product name matching is not used. This causes firmware from Vendor A to match devices from Vendor B.</t>

<t>If the vendors are the firmware authorities, then devices from Vendor A will reject images signed by Vendor B since they use different credentials. However, if both devices trust the same Author, then, devices from Vendor A could install firmware intended for devices from Vendor B.</t>

</section>
<section anchor="threat-img-format" title="THREAT.IMG.FORMAT: The target device misinterprets the type of payload">

<t>Classification: Denial of Service</t>

<t>If a device misinterprets the format of the firmware image, it may cause a device to install a firmware image incorrectly. An incorrectly installed firmware image would likely cause the device to stop functioning.</t>

<t>Threat Escalation: An attacker that can cause a device to misinterpret the received firmware image may gain elevation of privilege and potentially expand this to all types of threat.</t>

<t>Mitigated by: <xref target="req-sec-authentic-image-type">REQ.SEC.AUTH.IMG_TYPE</xref></t>

</section>
<section anchor="threat-img-location" title="THREAT.IMG.LOCATION: The target device installs the payload to the wrong location">

<t>Classification: Denial of Service</t>

<t>If a device installs a firmware image to the wrong location on the device, then it is likely to break. For example, a firmware image installed as an application could cause a device and/or an application to stop functioning.</t>

<t>Threat Escalation: An attacker that can cause a device to misinterpret the received code may gain elevation of privilege and potentially expand this to all types of threat.</t>

<t>Mitigated by: <xref target="req-sec-authentic-image-location">REQ.SEC.AUTH.IMG_LOC</xref></t>

</section>
<section anchor="threat-net-redirect" title="THREAT.NET.REDIRECT: Redirection to inauthentic payload hosting">

<t>Classification: Denial of Service</t>

<t>If a device is tricked into fetching a payload for an attacker controlled site, the attacker may send corrupted payloads to devices.</t>

<t>Mitigated by: <xref target="req-sec-authenticated-remote-payload">REQ.SEC.AUTH.REMOTE_LOC</xref></t>

</section>
<section anchor="threat-net-onpath" title="THREAT.NET.ONPATH: Traffic interception">

<t>Classification: Spoofing Identity, Tampering with Data</t>

<t>An attacker intercepts all traffic to and from a device. The attacker can monitor or modify any data sent to or received from the device. This can take the form of: manifests, payloads, status reports, and capability reports being modified or not delivered to the intended recipient. It can also take the form of analysis of data sent to or from the device, either in content, size, or frequency.</t>

<t>Mitigated by: <xref target="req-sec-authentic">REQ.SEC.AUTHENTIC</xref>, <xref target="req-sec-image-confidentiality">REQ.SEC.IMG.CONFIDENTIALITY</xref>, <xref target="req-sec-authenticated-remote-payload">REQ.SEC.AUTH.REMOTE_LOC</xref>, <xref target="req-sec-mfst-confidentiality">REQ.SEC.MFST.CONFIDENTIALITY</xref>, <xref target="req-sec-reporting">REQ.SEC.REPORTING</xref></t>

</section>
<section anchor="threat-image-replacement" title="THREAT.IMG.REPLACE: Payload Replacement">

<t>Classification: Elevation of Privilege</t>

<t>An attacker replaces a newly downloaded firmware after a device finishes verifying a manifest. This could cause the device to execute the attacker’s code. This attack likely requires physical access to the device. However, it is possible that this attack is carried out in combination with another threat that allows remote execution. This is a typical Time Of Check/Time Of Use (TICTOC) attack.</t>

<t>Threat Escalation: If the attacker is able to exploit a known vulnerability, or if the attacker can supply their own firmware, then this threat can be escalated to ALL TYPES.</t>

<t>Mitigated by: <xref target="req-sec-authentic-execution">REQ.SEC.AUTH.EXEC</xref></t>

</section>
<section anchor="threat-img-unauthenticated" title="THREAT.IMG.NON_AUTH: Unauthenticated Images">

<t>Classification: Elevation of Privilege / All Types</t>

<t>If an attacker can install their firmware on a device, for example by manipulating either payload or metadata, then they have complete control of the device.</t>

<t>Mitigated by: <xref target="req-sec-authentic">REQ.SEC.AUTHENTIC</xref></t>

</section>
<section anchor="threat-upd-wrong-precursor" title="THREAT.UPD.WRONG_PRECURSOR: Unexpected Precursor images">

<t>Classification: Denial of Service / All Types</t>

<t>Modifications of payloads and metadata allow an attacker to introduce a number of denial of service attacks. Below are some examples.</t>

<t>An attacker sends a valid, current manifest to a device that has an unexpected precursor image. If a payload format requires a precursor image (for example, delta updates) and that precursor image is not available on the target device, it could cause the update to break.</t>

<t>An attacker that can cause a device to install a payload against the wrong precursor image could gain elevation of privilege and potentially expand this to all types of threat. However, it is unlikely that a valid differential update applied to an incorrect precursor would result in a functional, but vulnerable firmware.</t>

<t>Mitigated by: <xref target="req-sec-authentic-precursor">REQ.SEC.AUTH.PRECURSOR</xref></t>

</section>
<section anchor="threat-upd-unapproved" title="THREAT.UPD.UNAPPROVED: Unapproved Firmware">

<t>Classification: Denial of Service, Elevation of Privilege</t>

<t>This threat can appear in several ways, however it is ultimately about ensuring that devices retain the behaviour required by their owner, or operator. The owner or operator of a device typically requires that the device maintain certain features, functions, capabilities, behaviours, or interoperability constraints (more generally, behaviour). If these requirements are broken, then a device will not fulfill its purpose. Therefore, if any party other than the device’s owner or the owner’s contracted Device Operator has the ability to modify device behaviour without approval, then this constitutes an elevation of privilege.</t>

<t>Similarly, a Network Operator may require that devices behave in a particular way in order to maintain the integrity of the network. If devices behaviour on a network can be modified without the approval of the Network Operator, then this constitutes an elevation of privilege with respect to the network.</t>

<t>For example, if the owner of a device has purchased that device because of features A, B, and C, and a firmware update is issued by the manufacturer, which removes feature A, then the device may not fulfill the owner’s requirements any more. In certain circumstances, this can cause significantly greater threats. Suppose that feature A is used to implement a safety-critical system, whether the manufacturer intended this behaviour or not. When unapproved firmware is installed, the system may become unsafe.</t>

<t>In a second example, the owner or operator of a system of two or more interoperating devices needs to approve firmware for their system in order to ensure interoperability with other devices in the system. If the firmware is not qualified, the system as a whole may not work. Therefore, if a device installs firmware without the approval of the device owner or operator, this is a threat to devices or the system as a whole.</t>

<t>Similarly, the operator of a network may need to approve firmware for devices attached to the network in order to ensure favourable operating conditions within the network. If the firmware is not qualified, it may degrade the performance of the network. Therefore, if a device installs firmware without the approval of the Network Operator, this is a threat to the network itself.</t>

<t>Threat Escalation: If the firmware expects configuration that is present in devices deployed in Network A, but not in devices deployed in Network B, then the device may experience degraded security, leading to threats of All Types.</t>

<t>Mitigated by: <xref target="req-sec-rights">REQ.SEC.RIGHTS</xref>, <xref target="req-sec-access-control">REQ.SEC.ACCESS_CONTROL</xref></t>

<section anchor="example-1-multiple-network-operators-with-a-single-device-operator" title="Example 1: Multiple Network Operators with a Single Device Operator">

<t>In this example, assume that Device Operators expect the rights to create firmware but that Network Operators expect the rights to qualify firmware as fit-for-purpose on their networks. Additionally, assume that Device Operators manage devices that can be deployed on any network, including Network A and B in our example.</t>

<t>An attacker may obtain a manifest for a device on Network A. Then, this attacker sends that manifest to a device on Network B. Because Network A and Network B are under control of different Operators, and the firmware for a device on Network A has not been qualified to be deployed on Network B, the target device on Network B is now in violation of the Operator B’s policy and may be disabled by this unqualified, but signed firmware.</t>

<t>This is a denial of service because it can render devices inoperable. This is an elevation of privilege because it allows the attacker to make installation decisions that should be made by the Operator.</t>

</section>
<section anchor="example-2-single-network-operator-with-multiple-device-operators" title="Example 2: Single Network Operator with Multiple Device Operators">

<t>Multiple devices that interoperate are used on the same network and communicate with each other. Some devices are manufactured and managed by Device Operator A and other devices by Device Operator B. A new firmware is released by Device Operator A that breaks compatibility with devices from Device Operator B. An attacker sends the new firmware to the devices managed by Device Operator A without approval of the Network Operator. This breaks the behaviour of the larger system causing denial of service and possibly other threats. Where the network is a distributed SCADA system, this could cause misbehaviour of the process that is under control.</t>

</section>
</section>
<section anchor="threat-img-disclosure" title="THREAT.IMG.DISCLOSURE: Reverse Engineering Of Firmware Image for Vulnerability Analysis">

<t>Classification: All Types</t>

<t>An attacker wants to mount an attack on an IoT device. To prepare the attack he or she retrieves the provided firmware image and performs reverse engineering of the firmware image to analyze it for specific vulnerabilities.</t>

<t>Mitigated by: <xref target="req-sec-image-confidentiality">REQ.SEC.IMG.CONFIDENTIALITY</xref></t>

</section>
<section anchor="threat-mfst-override" title="THREAT.MFST.OVERRIDE: Overriding Critical Manifest Elements">

<t>Classification: Elevation of Privilege</t>

<t>An authorized actor, but not the Author, uses an override mechanism (<xref target="user-story-override">USER_STORY.OVERRIDE</xref>) to change an information element in a manifest signed by the Author. For example, if the authorized actor overrides the digest and URI of the payload, the actor can replace the entire payload with a payload of their choice.</t>

<t>Threat Escalation: By overriding elements such as payload installation instructions or firmware digest, this threat can be escalated to all types.</t>

<t>Mitigated by: <xref target="req-sec-access-control">REQ.SEC.ACCESS_CONTROL</xref></t>

</section>
<section anchor="threat-mfst-exposure" title="THREAT.MFST.EXPOSURE: Confidential Manifest Element Exposure">

<t>Classification: Information Disclosure</t>

<t>A third party may be able to extract sensitive information from the manifest.</t>

<t>Mitigated by: <xref target="req-sec-mfst-confidentiality">REQ.SEC.MFST.CONFIDENTIALITY</xref></t>

</section>
<section anchor="threat-img-extra" title="THREAT.IMG.EXTRA: Extra data after image">

<t>Classification: All Types</t>

<t>If a third party modifies the image so that it contains extra code after a valid, authentic image, that third party can then use their own code in order to make better use of an existing vulnerability.</t>

<t>Mitigated by: <xref target="req-sec-img-complete-digest">REQ.SEC.IMG.COMPLETE_DIGEST</xref></t>

</section>
<section anchor="threat-key-exposure" title="THREAT.KEY.EXPOSURE: Exposure of signing keys">

<t>Classification: All Types</t>

<t>If a third party obtains a key or even indirect access to a key, for example in an hardware security module (HSM), then they can perform the same actions as the legitimate owner of the key. If the key is trusted for firmware update, then the third party can perform firmware updates as though they were the legitimate owner of the key.</t>

<t>For example, if manifest signing is performed on a server connected to the internet, an attacker may compromise the server and then be able to sign manifests, even if the keys for manifest signing are held in an HSM that is accessed by the server.</t>

<t>Mitigated by: <xref target="req-sec-key-protection">REQ.SEC.KEY.PROTECTION</xref>, <xref target="req-sec-key-rotation">REQ.SEC.KEY.ROTATION</xref></t>

</section>
<section anchor="threat-mfst-modification" title="THREAT.MFST.MODIFICATION: Modification of manifest or payload prior to signing">

<t>Classification: All Types</t>

<t>If an attacker can alter a manifest or payload before it is signed, they can perform all the same actions as the manifest author. This allows the attacker to deploy firmware updates to any devices that trust the manifest author. If an attacker can modify the code of a payload before the corresponding manifest is created, they can insert their own code. If an attacker can modify the manifest before it is signed, they can redirect the manifest to their own payload.</t>

<t>For example, the attacker deploys malware to the developer’s computer or signing service that watches manifest creation activities and inserts code into any binary that is referenced by a manifest.</t>

<t>For example, the attacker deploys malware to the developer’s computer or signing service that replaces the referenced binary (digest) and URI with the attacker’s binary (digest) and URI.</t>

<t>Mitigated by: <xref target="req-sec-mfst-check">REQ.SEC.MFST.CHECK</xref>, <xref target="req-sec-mfst-trusted">REQ.SEC.MFST.TRUSTED</xref></t>

</section>
<section anchor="threat-mfst-toctou" title="THREAT.MFST.TOCTOU: Modification of manifest between authentication and use">

<t>Classification: All Types</t>

<t>If an attacker can modify a manifest after it is authenticated (Time Of Check) but before it is used (Time Of Use), then the attacker can place any content whatsoever in the manifest.</t>

<t>Mitigated by: <xref target="req-sec-mfst-const">REQ.SEC.MFST.CONST</xref></t>

</section>
</section>
<section anchor="security-requirements" title="Security Requirements">

<t>The security requirements here are a set of policies that mitigate the threats described in <xref target="threat-model"/>.</t>

<section anchor="req-sec-sequence" title="REQ.SEC.SEQUENCE: Monotonic Sequence Numbers">

<t>Only an actor with firmware installation authority is permitted to decide when device firmware can be installed. To enforce this rule, manifests MUST contain monotonically increasing sequence numbers. Manifests may use UTC epoch timestamps to coordinate monotonically increasing sequence numbers across many actors in many locations. If UTC epoch timestamps are used, they must not be treated as times, they must be treated only as sequence numbers. Devices must reject manifests with sequence numbers smaller than any onboard sequence number, i.e. there is no sequence number roll over.</t>

<t>Note: This is not a firmware version field. It is a manifest sequence number. A firmware version may be rolled back by creating a new manifest for the old firmware version with a later sequence number.</t>

<t>Mitigates: <xref target="threat-expired">THREAT.IMG.EXPIRED</xref></t>

<t>Implemented by: <xref target="element-sequence-number">Monotonic Sequence Number</xref></t>

</section>
<section anchor="req-sec-compatible" title="REQ.SEC.COMPATIBLE: Vendor, Device-type Identifiers">

<t>Devices MUST only apply firmware that is intended for them. Devices must know that a given update applies to their vendor, model, hardware revision, and software revision. Human-readable identifiers are often error-prone in this regard, so unique identifiers should be used instead.</t>

<t>Mitigates: <xref target="threat-incompatible">THREAT.IMG.INCOMPATIBLE</xref></t>

<t>Implemented by: <xref target="element-vendor-id">Vendor ID Condition</xref>, <xref target="element-class-id">Class ID Condition</xref></t>

</section>
<section anchor="req-sec-exp" title="REQ.SEC.EXP: Expiration Time">

<t>A firmware manifest MAY expire after a given time and devices may have a secure clock (local or remote). If a secure clock is provided and the Firmware manifest has an expiration timestamp, the device must reject the manifest if current time is later than the expiration time.</t>

<t>Special consideration is required for end-of-life in case device will not be updated again, for example if a business stops issuing updates for a device. The last valid firmware should not have an expiration time.</t>

<t>If a device has a flawed time source (either local or remote), an old update can be deployed as new.</t>

<t>Mitigates: <xref target="threat-expired-offline">THREAT.IMG.EXPIRED.OFFLINE</xref></t>

<t>Implemented by: <xref target="manifest-element-expiration">Expiration Time</xref></t>

</section>
<section anchor="req-sec-authentic" title="REQ.SEC.AUTHENTIC: Cryptographic Authenticity">

<t>The authenticity of an update MUST be demonstrable. Typically, this means that updates must be digitally signed. Because the manifest contains information about how to install the update, the manifest’s authenticity must also be demonstrable. To reduce the overhead required for validation, the manifest contains the cryptographic digest of the firmware image, rather than a second digital signature. The authenticity of the manifest can be verified with a digital signature or Message Authentication Code. The authenticity of the firmware image is tied to the manifest by the use of a cryptographic digest of the firmware image.</t>

<t>Mitigates: <xref target="threat-img-unauthenticated">THREAT.IMG.NON_AUTH</xref>, <xref target="threat-net-onpath">THREAT.NET.ONPATH</xref></t>

<t>Implemented by: <xref target="manifest-element-signature">Signature</xref>, <xref target="manifest-element-payload-digest">Payload Digest</xref></t>

</section>
<section anchor="req-sec-authentic-image-type" title="REQ.SEC.AUTH.IMG_TYPE: Authenticated Payload Type">

<t>The type of payload MUST be authenticated. For example, the target must know whether the payload is XIP firmware, a loadable module, or configuration data.</t>

<t>Mitigates: <xref target="threat-img-format">THREAT.IMG.FORMAT</xref></t>

<t>Implemented by: <xref target="manifest-element-format">Payload Format</xref>, <xref target="manifest-element-signature">Signature</xref></t>

</section>
<section anchor="req-sec-authentic-image-location" title="Security Requirement REQ.SEC.AUTH.IMG_LOC: Authenticated Storage Location">

<t>The location on the target where the payload is to be stored MUST be authenticated.</t>

<t>Mitigates: <xref target="threat-img-location">THREAT.IMG.LOCATION</xref></t>

<t>Implemented by: <xref target="maniest-element-storage-location">Storage Location</xref></t>

</section>
<section anchor="req-sec-authenticated-remote-payload" title="REQ.SEC.AUTH.REMOTE_LOC: Authenticated Remote Payload">

<t>The location where a target should find a payload MUST be authenticated. Remote resources need to receive an equal amount of cryptographic protection as the manifest itself, when dereferencing URIs. The security considerations of Uniform Resource Identifiers (URIs) are applicable <xref target="RFC3986"/>.</t>

<t>Mitigates: <xref target="threat-net-redirect">THREAT.NET.REDIRECT</xref>, <xref target="threat-net-onpath">THREAT.NET.ONPATH</xref></t>

<t>Implemented by: <xref target="manifest-element-payload-indicator">Payload Indicator</xref></t>

</section>
<section anchor="req-sec-authentic-execution" title="REQ.SEC.AUTH.EXEC: Secure Execution">

<t>The target SHOULD verify firmware at time of boot. This requires authenticated payload size, and digest.</t>

<t>Mitigates: <xref target="threat-image-replacement">THREAT.IMG.REPLACE</xref></t>

<t>Implemented by: <xref target="manifest-element-payload-digest">Payload Digest</xref>, <xref target="manifest-element-size">Size</xref></t>

</section>
<section anchor="req-sec-authentic-precursor" title="REQ.SEC.AUTH.PRECURSOR: Authenticated precursor images">

<t>If an update uses a differential compression method, it MUST specify the digest of the precursor image and that digest MUST be authenticated.</t>

<t>Mitigates: <xref target="threat-upd-wrong-precursor">THREAT.UPD.WRONG_PRECURSOR</xref></t>

<t>Implemented by: <xref target="element-precursor-digest">Precursor Image Digest</xref></t>

</section>
<section anchor="req-sec-authentic-compatibility" title="REQ.SEC.AUTH.COMPATIBILITY: Authenticated Vendor and Class IDs">

<t>The identifiers that specify firmware compatibility MUST be authenticated to ensure that only compatible firmware is installed on a target device.</t>

<t>Mitigates: <xref target="threat-incompatible">THREAT.IMG.INCOMPATIBLE</xref></t>

<t>Implemented By: <xref target="element-vendor-id">Vendor ID Condition</xref>, <xref target="element-class-id">Class ID Condition</xref></t>

</section>
<section anchor="req-sec-rights" title="REQ.SEC.RIGHTS: Rights Require Authenticity">

<t>If a device grants different rights to different actors, exercising those rights MUST be accompanied by proof of those rights, in the form of proof of authenticity. Authenticity mechanisms, such as those required in <xref target="req-sec-authentic">REQ.SEC.AUTHENTIC</xref>, can be used to prove authenticity.</t>

<t>For example, if a device has a policy that requires that firmware have both an Authorship right and a Qualification right and if that device grants Authorship and Qualification rights to different parties, such as a Device Operator and a Network Operator, respectively, then the firmware cannot be installed without proof of rights from both the Device Operator and the Network Operator.</t>

<t>Mitigates: <xref target="threat-upd-unapproved">THREAT.UPD.UNAPPROVED</xref></t>

<t>Implemented by: <xref target="manifest-element-signature">Signature</xref></t>

</section>
<section anchor="req-sec-image-confidentiality" title="REQ.SEC.IMG.CONFIDENTIALITY: Payload Encryption">

<t>The manifest information model MUST enable encrypted payloads. Encryption helps to prevent third parties, including attackers, from reading the content of the firmware image. This can protect against confidential information disclosures and discovery of vulnerabilities through reverse engineering. Therefore the manifest must convey the information required to allow an intended recipient to decrypt an encrypted payload.</t>

<t>Mitigates: <xref target="threat-img-disclosure">THREAT.IMG.DISCLOSURE</xref>, <xref target="threat-net-onpath">THREAT.NET.ONPATH</xref></t>

<t>Implemented by: <xref target="manifest-element-encryption-wrapper">Encryption Wrapper</xref></t>

</section>
<section anchor="req-sec-access-control" title="REQ.SEC.ACCESS_CONTROL: Access Control">

<t>If a device grants different rights to different actors, then an exercise of those rights MUST be validated against a list of rights for the actor. This typically takes the form of an Access Control List (ACL). ACLs are applied to two scenarios:</t>

<t><list style="numbers">
  <t>An ACL decides which elements of the manifest may be overridden and by which actors.</t>
  <t>An ACL decides which component identifier/storage identifier pairs can be written by which actors.</t>
</list></t>

<t>Mitigates: <xref target="threat-mfst-override">THREAT.MFST.OVERRIDE</xref>, <xref target="threat-upd-unapproved">THREAT.UPD.UNAPPROVED</xref></t>

<t>Implemented by: Client-side code, not specified in manifest.</t>

</section>
<section anchor="req-sec-mfst-confidentiality" title="REQ.SEC.MFST.CONFIDENTIALITY: Encrypted Manifests">

<t>A manifest format MUST allow encryption of selected parts of the manifest or encryption of the entire manifest to prevent sensitive content of the firmware metadata to be leaked.</t>

<t>Mitigates: <xref target="threat-mfst-exposure">THREAT.MFST.EXPOSURE</xref>, <xref target="threat-net-onpath">THREAT.NET.ONPATH</xref></t>

<t>Implemented by: Manifest Encryption Wrapper / Transport Security</t>

</section>
<section anchor="req-sec-img-complete-digest" title="REQ.SEC.IMG.COMPLETE_DIGEST: Whole Image Digest">

<t>The digest SHOULD cover all available space in a fixed-size storage location. Variable-size storage locations MUST be restricted to exactly the size of deployed payload. This prevents any data from being distributed without being covered by the digest. For example, XIP microcontrollers typically have fixed-size storage. These devices should deploy a digest that covers the deployed firmware image, concatenated with the default erased value of any remaining space.</t>

<t>Mitigates: <xref target="threat-img-extra">THREAT.IMG.EXTRA</xref></t>

<t>Implemented by: <xref target="manifest-element-payload-digest">Payload Digests</xref></t>

</section>
<section anchor="req-sec-reporting" title="REQ.SEC.REPORTING: Secure Reporting">

<t>Status reports from the device to any remote system MUST be performed over an authenticated, confidential channel in order to prevent modification or spoofing of the reports.</t>

<t>Mitigates: <xref target="threat-net-onpath">THREAT.NET.ONPATH</xref></t>

</section>
<section anchor="req-sec-key-protection" title="REQ.SEC.KEY.PROTECTION: Protected storage of signing keys">

<t>Cryptographic keys for signing/authenticating manifests SHOULD be stored in a manner that is inaccessible to networked devices, for example in an HSM, or an air-gapped computer. This protects against an attacker obtaining the keys.</t>

<t>Keys SHOULD be stored in a way that limits the risk of a legitimate, but compromised, entity (such as a server or developer computer) issuing signing requests.</t>

<t>Mitigates: <xref target="threat-key-exposure">THREAT.KEY.EXPOSURE</xref></t>

</section>
<section anchor="req-sec-key-rotation" title="REQ.SEC.KEY.ROTATION: Protected storage of signing keys">

<t>Cryptographic keys for signing/authenticating manifests SHOULD be replaced from time to time. Because it is difficult and risky to replace a Trust Anchor, keys used for signing updates SHOULD be delegates of that Trust Anchor.</t>

<t>If key expiration is performed based on time, then a secure clock is needed. If the time source used by a recipient to check for expiration is flawed, an old signing key can be used as current, which compounds <xref target="threat-key-exposure">THREAT.KEY.EXPOSURE</xref>.</t>

<t>Mitigates: <xref target="threat-key-exposure">THREAT.KEY.EXPOSURE</xref></t>

</section>
<section anchor="req-sec-mfst-check" title="REQ.SEC.MFST.CHECK: Validate manifests prior to deployment">

<t>Manifests SHOULD be verified prior to deployment. This reduces problems that may arise with devices installing firmware images that damage devices unintentionally.</t>

<t>Mitigates: <xref target="threat-mfst-modification">THREAT.MFST.MODIFICATION</xref></t>

</section>
<section anchor="req-sec-mfst-trusted" title="REQ.SEC.MFST.TRUSTED: Construct manifests in a trusted environment">

<t>For high risk deployments, such as large numbers of devices or critical function devices, manifests SHOULD be constructed in an environment that is protected from interference, such as an air-gapped computer. Note that a networked computer connected to an HSM does not fulfill this requirement (see <xref target="threat-mfst-modification">THREAT.MFST.MODIFICATION</xref>).</t>

<t>Mitigates: <xref target="threat-mfst-modification">THREAT.MFST.MODIFICATION</xref></t>

</section>
<section anchor="req-sec-mfst-const" title="REQ.SEC.MFST.CONST: Manifest kept immutable between check and use">

<t>Both the manifest and any data extracted from it MUST be held immutable between its authenticity verification (time of check) and its use (time of use). To make this guarantee, the manifest MUST fit within an internal memory or a secure memory, such as encrypted memory. The recipient SHOULD defend the manifest from tampering by code or hardware resident in the recipient, for example other processes or debuggers.</t>

<t>If an application requires that the manifest is verified before storing it, then this means the manifest MUST fit in RAM.</t>

<t>Mitigates: <xref target="threat-mfst-toctou">THREAT.MFST.TOCTOU</xref></t>

</section>
</section>
<section anchor="user-stories" title="User Stories">

<t>User stories provide expected use cases. These are used to feed into usability requirements.</t>

<section anchor="user-story-install-instructions" title="USER_STORY.INSTALL.INSTRUCTIONS: Installation Instructions">

<t>As a Device Operator, I want to provide my devices with additional installation instructions so that I can keep process details out of my payload data.</t>

<t>Some installation instructions might be:</t>

<t><list style="symbols">
  <t>Use a table of hashes to ensure that each block of the payload is validated before writing.</t>
  <t>Do not report progress.</t>
  <t>Pre-cache the update, but do not install.</t>
  <t>Install the pre-cached update matching this manifest.</t>
  <t>Install this update immediately, overriding any long-running tasks.</t>
</list></t>

<t>Satisfied by: <xref target="req-use-mfst-pre-check">REQ.USE.MFST.PRE_CHECK</xref></t>

</section>
<section anchor="user-story-fail-early" title="USER_STORY.MFST.FAIL_EARLY: Fail Early">

<t>As a designer of a resource-constrained IoT device, I want bad updates to fail as early as possible to preserve battery life and limit consumed bandwidth.</t>

<t>Satisfied by: <xref target="req-use-mfst-pre-check">REQ.USE.MFST.PRE_CHECK</xref></t>

</section>
<section anchor="user-story-override" title="USER_STORY.OVERRIDE: Override Non-Critical Manifest Elements">

<t>As a Device Operator, I would like to be able to override the non-critical information in the manifest so that I can control my devices more precisely. The authority to override this information is provided via the installation of a limited trust anchor by another authority.</t>

<t>Some examples of potentially overridable information:</t>

<t><list style="symbols">
  <t><xref target="manifest-element-payload-indicator">URIs</xref>: this allows the Device Operator to direct devices to their own infrastructure in order to reduce network load.</t>
  <t>Conditions: this allows the Device Operator to pose additional constraints on the installation of the manifest.</t>
  <t><xref target="manifest-element-additional-install-info">Directives</xref>: this allows the Device Operator to add more instructions such as time of installation.</t>
  <t><xref target="manifest-element-processing-steps">Processing Steps</xref>: If an intermediary performs an action on behalf of a device, it may need to override the processing steps. It is still possible for a device to verify the final content and the result of any processing step that specifies a digest. Some processing steps should be non-overridable.</t>
</list></t>

<t>Satisfied by: <xref target="req-use-mfst-component">REQ.USE.MFST.COMPONENT</xref></t>

</section>
<section anchor="user-story-component" title="USER_STORY.COMPONENT: Component Update">

<t>As a Device Operator, I want to divide my firmware into components, so that I can reduce the size of updates, make different parties responsible for different components, and divide my firmware into frequently updated and infrequently updated components.</t>

<t>Satisfied by: <xref target="req-use-mfst-component">REQ.USE.MFST.COMPONENT</xref></t>

</section>
<section anchor="user-story-multi-auth" title="USER_STORY.MULTI_AUTH: Multiple Authorizations">

<t>As a Device Operator, I want to ensure the quality of a firmware update before installing it, so that I can ensure interoperability of all devices in my product family. I want to restrict the ability to make changes to my devices to require my express approval.</t>

<t>Satisfied by: <xref target="req-use-mfst-multi-auth">REQ.USE.MFST.MULTI_AUTH</xref>, <xref target="req-sec-access-control">REQ.SEC.ACCESS_CONTROL</xref></t>

</section>
<section anchor="user-story-img-format" title="USER_STORY.IMG.FORMAT: Multiple Payload Formats">

<t>As a Device Operator, I want to be able to send multiple payload formats to suit the needs of my update, so that I can optimise the bandwidth used by my devices.</t>

<t>Satisfied by: <xref target="req-use-img-format">REQ.USE.IMG.FORMAT</xref></t>

</section>
<section anchor="user-story-img-confidentiality" title="USER_STORY.IMG.CONFIDENTIALITY: Prevent Confidential Information Disclosures">

<t>As a firmware author, I want to prevent confidential information in the manifest from being disclosed when distributing manifests and firmware images. Confidential information may include information about the device these updates are being applied to as well as information in the firmware image itself.</t>

<t>Satisfied by: <xref target="req-sec-image-confidentiality">REQ.SEC.IMG.CONFIDENTIALITY</xref></t>

</section>
<section anchor="user-story-img-unknown-format" title="USER_STORY.IMG.UNKNOWN_FORMAT: Prevent Devices from Unpacking Unknown Formats">

<t>As a Device Operator, I want devices to determine whether they can process a payload prior to downloading it.</t>

<t>In some cases, it may be desirable for a third party to perform some processing on behalf of a target. For this to occur, the third party MUST indicate what processing occurred and how to verify it against the Trust Provisioning Authority’s intent.</t>

<t>This amounts to overriding <xref target="manifest-element-processing-steps">Processing Steps</xref> and <xref target="manifest-element-payload-indicator">Payload Indicator</xref>.</t>

<t>Satisfied by: <xref target="req-use-img-format">REQ.USE.IMG.FORMAT</xref>, <xref target="req-use-img-nested">REQ.USE.IMG.NESTED</xref>, <xref target="req-use-mfst-override">REQ.USE.MFST.OVERRIDE_REMOTE</xref></t>

</section>
<section anchor="user-story-img-current-version" title="USER_STORY.IMG.CURRENT_VERSION: Specify Version Numbers of Target Firmware">

<t>As a Device Operator, I want to be able to target devices for updates based on their current firmware version, so that I can control which versions are replaced with a single manifest.</t>

<t>Satisfied by: <xref target="req-use-img-versions">REQ.USE.IMG.VERSIONS</xref></t>

</section>
<section anchor="user-story-img-select" title="USER_STORY.IMG.SELECT: Enable Devices to Choose Between Images">

<t>As a developer, I want to be able to sign two or more versions of my firmware in a single manifest so that I can use a very simple bootloader that chooses between two or more images that are executed in-place.</t>

<t>Satisfied by: <xref target="req-use-img-select">REQ.USE.IMG.SELECT</xref></t>

</section>
<section anchor="user-story-exec-mfst" title="USER_STORY.EXEC.MFST: Secure Execution Using Manifests">

<t>As a signer for both secure execution/boot and firmware deployment, I would like to use the same signed document for both tasks so that my data size is smaller, I can share common code, and I can reduce signature verifications.</t>

<t>Satisfied by: <xref target="req-use-exec">REQ.USE.EXEC</xref></t>

</section>
<section anchor="user-story-exec-decompress" title="USER_STORY.EXEC.DECOMPRESS: Decompress on Load">

<t>As a developer of firmware for a run-from-RAM device, I would like to use compressed images and to indicate to the bootloader that I am using a compressed image in the manifest so that it can be used with secure execution/boot.</t>

<t>Satisfied by: <xref target="req-use-load">REQ.USE.LOAD</xref></t>

</section>
<section anchor="user-story-mfst-img" title="USER_STORY.MFST.IMG: Payload in Manifest">

<t>As an operator of devices on a constrained network, I would like the manifest to be able to include a small payload in the same packet so that I can reduce network traffic.</t>

<t>Small payloads may include, for example, wrapped content encryption keys, configuration information, public keys, authorization tokens, or X.509 certificates.</t>

<t>Satisfied by: <xref target="req-use-payload">REQ.USE.PAYLOAD</xref></t>

</section>
<section anchor="user-story-mfst-parse" title="USER_STORY.MFST.PARSE: Simple Parsing">

<t>As a developer for constrained devices, I want a low complexity library for processing updates so that I can fit more application code on my device.</t>

<t>Satisfied by: <xref target="req-use-parse">REQ.USE.PARSE</xref></t>

</section>
<section anchor="user-story-mfst-delegation" title="USER_STORY.MFST.DELEGATION: Delegated Authority in Manifest">

<t>As a Device Operator that rotates delegated authority more often than delivering firmware updates, I would like to delegate a new authority when I deliver a firmware update so that I can accomplish both tasks in a single transmission.</t>

<t>Satisfied by: <xref target="req-use-delegation">REQ.USE.DELEGATION</xref></t>

</section>
<section anchor="user-story-mfst-pre-check" title="USER_STORY.MFST.PRE_CHECK: Update Evaluation">

<t>As an operator of a constrained network, I would like devices on my network to be able to evaluate the suitability of an update prior to initiating any large download so that I can prevent unnecessary consumption of bandwidth.</t>

<t>Satisfied by: <xref target="req-use-mfst-pre-check">REQ.USE.MFST.PRE_CHECK</xref></t>

</section>
<section anchor="user-story-mfst-admin" title="USER_STORY.MFST.ADMINISTRATION: Administration of manifests">

<t>As a Device Operator, I want to understand what an update will do and to which devices it applies so that I can make informed choices about which updates to apply, when to apply them, and which devices should be updated.</t>

<t>Satisfied by <xref target="req-use-mfst-text">REQ.USE.MFST.TEXT</xref></t>

</section>
</section>
<section anchor="usability-requirements" title="Usability Requirements">

<t>The following usability requirements satisfy the user stories listed above.</t>

<section anchor="req-use-mfst-pre-check" title="REQ.USE.MFST.PRE_CHECK: Pre-Installation Checks">

<t>A manifest format MUST be able to carry all information required to process an update.</t>

<t>For example: Information about which precursor image is required for a differential update must be placed in the manifest.</t>

<t>Satisfies: [USER_STORY.MFST.PRE_CHECK(#user-story-mfst-pre-check), <xref target="user-story-install-instructions">USER_STORY.INSTALL.INSTRUCTIONS</xref></t>

<t>Implemented by: <xref target="manifest-element-additional-install-info">Additional installation instructions</xref></t>

</section>
<section anchor="req-use-mfst-text" title="REQ.USE.MFST.TEXT: Descriptive Manifest Information">

<t>It MUST be possible for a Device Operator to determine what a manifest will do and which devices will accept it prior to distribution.</t>

<t>Satisfies: <xref target="user-story-mfst-admin">USER_STORY.MFST.ADMINISTRATION</xref></t>

<t>Implemented by: <xref target="manifest-element-text">Manifest text information</xref></t>

</section>
<section anchor="req-use-mfst-override" title="REQ.USE.MFST.OVERRIDE_REMOTE: Override Remote Resource Location">

<t>A manifest format MUST be able to redirect payload fetches. This applies where two manifests are used in conjunction. For example, a Device Operator creates a manifest specifying a payload and signs it, and provides a URI for that payload. A Network Operator creates a second manifest, with a dependency on the first. They use this second manifest to override the URIs provided by the Device Operator, directing them into their own infrastructure instead. Some devices may provide this capability, while others may only look at canonical sources of firmware. For this to be possible, the device must fetch the payload, whereas a device that accepts payload pushes will ignore this feature.</t>

<t>Satisfies: <xref target="user-story-override">USER_STORY.OVERRIDE</xref></t>

<t>Implemented by: <xref target="manifest-element-aliases">Aliases</xref></t>

</section>
<section anchor="req-use-mfst-component" title="REQ.USE.MFST.COMPONENT: Component Updates">

<t>A manifest format MUST be able to express the requirement to install one or more payloads from one or more authorities so that a multi-payload update can be described. This allows multiple parties with different permissions to collaborate in creating a single update for the IoT device, across multiple components.</t>

<t>This requirement implies that it must be possible to construct a tree of manifests on a multi-image target.</t>

<t>In order to enable devices with a heterogeneous storage architecture, the manifest must enable specification of both storage system and the storage location within that storage system.</t>

<t>Satisfies: <xref target="user-story-override">USER_STORY.OVERRIDE</xref>, <xref target="user-story-component">USER_STORY.COMPONENT</xref></t>

<t>Implemented by: Dependencies, StorageIdentifier, ComponentIdentifier</t>

<section anchor="example-1-multiple-microcontrollers" title="Example 1: Multiple Microcontrollers">

<t>An IoT device with multiple microcontrollers in the same physical device will likely require multiple payloads with different component identifiers.</t>

</section>
<section anchor="example-2-code-and-configuration" title="Example 2: Code and Configuration">

<t>A firmware image can be divided into two payloads: code and configuration. These payloads may require authorizations from different actors in order to install (see <xref target="req-sec-rights">REQ.SEC.RIGHTS</xref> and <xref target="req-sec-access-control">REQ.SEC.ACCESS_CONTROL</xref>). This structure means that multiple manifests may be required, with a dependency structure between them.</t>

</section>
<section anchor="example-3-multiple-software-modules" title="Example 3: Multiple Software Modules">

<t>A firmware image can be divided into multiple functional blocks for separate testing and distribution. This means that code would need to be distributed in multiple payloads. For example, this might be desirable in order to ensure that common code between devices is identical in order to reduce distribution bandwidth.</t>

</section>
</section>
<section anchor="req-use-mfst-multi-auth" title="REQ.USE.MFST.MULTI_AUTH: Multiple authentications">

<t>A manifest format MUST be able to carry multiple signatures so that authorizations from multiple parties with different permissions can be required in order to authorize installation of a manifest.</t>

<t>Satisfies: <xref target="user-story-multi-auth">USER_STORY.MULTI_AUTH</xref></t>

<t>Implemented by: <xref target="manifest-element-signature">Signature</xref></t>

</section>
<section anchor="req-use-img-format" title="REQ.USE.IMG.FORMAT: Format Usability">

<t>The manifest format MUST accommodate any payload format that an Operator wishes to use. This enables the recipient to detect which format the Operator has chosen. Some examples of payload format are:</t>

<t><list style="symbols">
  <t>Binary</t>
  <t>Executable and Linkable Format (ELF)</t>
  <t>Differential</t>
  <t>Compressed</t>
  <t>Packed configuration</t>
  <t>Intel HEX</t>
  <t>Motorola S-Record</t>
</list></t>

<t>Satisfies: <xref target="user-story-img-format">USER_STORY.IMG.FORMAT</xref> <xref target="user-story-img-unknown-format">USER_STORY.IMG.UNKNOWN_FORMAT</xref></t>

<t>Implemented by: <xref target="manifest-element-format">Payload Format</xref></t>

</section>
<section anchor="req-use-img-nested" title="REQ.USE.IMG.NESTED: Nested Formats">

<t>The manifest format MUST accommodate nested formats, announcing to the target device all the nesting steps and any parameters used by those steps.</t>

<t>Satisfies: <xref target="user-story-img-confidentiality">USER_STORY.IMG.CONFIDENTIALITY</xref></t>

<t>Implemented by: <xref target="manifest-element-processing-steps">Processing Steps</xref></t>

</section>
<section anchor="req-use-img-versions" title="REQ.USE.IMG.VERSIONS: Target Version Matching">

<t>The manifest format MUST provide a method to specify multiple version numbers of firmware to which the manifest applies, either with a list or with range matching.</t>

<t>Satisfies: <xref target="user-story-img-current-version">USER_STORY.IMG.CURRENT_VERSION</xref></t>

<t>Implemented by: <xref target="element-required-version">Required Image Version List</xref></t>

</section>
<section anchor="req-use-img-select" title="REQ.USE.IMG.SELECT: Select Image by Destination">

<t>The manifest format MUST provide a mechanism to list multiple equivalent payloads by Execute-In-Place Installation Address, including the payload digest and, optionally, payload URIs.</t>

<t>Satisfies: <xref target="user-story-img-select">USER_STORY.IMG.SELECT</xref></t>

<t>Implemented by: <xref target="manifest-element-xip-address">XIP Address</xref></t>

</section>
<section anchor="req-use-exec" title="REQ.USE.EXEC: Executable Manifest">

<t>The manifest format MUST allow to describe an executable system with a manifest on both Execute-In-Place microcontrollers and on complex operating systems. In addition, the manifest format MUST be able to express metadata, such as a kernel command-line, used by any loader or bootloader.</t>

<t>Satisfies: <xref target="user-story-exec-mfst">USER_STORY.EXEC.MFST</xref></t>

<t>Implemented by: <xref target="manifest-element-exec-metadata">Run-time metadata</xref></t>

</section>
<section anchor="req-use-load" title="REQ.USE.LOAD: Load-Time Information">

<t>The manifest format MUST enable carrying additional metadata for load time processing of a payload, such as cryptographic information, load-address, and compression algorithm. Note that load comes before execution/boot.</t>

<t>Satisfies: <xref target="user-story-exec-decompress">USER_STORY.EXEC.DECOMPRESS</xref></t>

<t>Implemented by: <xref target="manifest-element-load-metadata">Load-time metadata</xref></t>

</section>
<section anchor="req-use-payload" title="REQ.USE.PAYLOAD: Payload in Manifest Envelope">

<t>The manifest format MUST allow placing a payload in the same structure as the manifest. This may place the payload in the same packet as the manifest.</t>

<t>Integrated payloads may include, for example, binaries as well as configuration information, and keying material.</t>

<t>When an integrated payload is provided, this increases the size of the manifest. Manifest size can cause several processing and storage concerns that require careful consideration. The payload can prevent the whole manifest from being contained in a single network packet, which can cause fragmentation and the loss of portions of the manifest in lossy networks. This causes the need for reassembly and retransmission logic. The manifest MUST be held immutable between verification and processing (see <xref target="req-sec-mfst-const">REQ.SEC.MFST.CONST</xref>), so a larger manifest will consume more memory with immutability guarantees, for example internal RAM or NVRAM, or external secure memory. If the manifest exceeds the available immutable memory, then it MUST be processed modularly, evaluating each of: delegation chains, the security container, and the actual manifest, which includes verifying the integrated payload. If the security model calls for downloading the manifest and validating it before storing to NVRAM in order to prevent wear to NVRAM and energy expenditure in NVRAM, then either increasing memory allocated to manifest storage or modular processing of the received manifest may be required. While the manifest has been organised to enable this type of processing, it creates additional complexity in the parser. If the manifest is stored in NVRAM prior to processing, the integrated payload may cause the manifest to exceed the available storage. Because the manifest is received prior to validation of applicability, authority, or correctness, integrated payloads cause the recipient to expend network bandwidth and energy that may not be required if the manifest is discarded and these costs vary with the size of the integrated payload.</t>

<t>See also: <xref target="req-sec-mfst-const">REQ.SEC.MFST.CONST</xref>.</t>

<t>Satisfies: <xref target="user-story-mfst-img">USER_STORY.MFST.IMG</xref></t>

<t>Implemented by: <xref target="manifest-element-payload">Payload</xref></t>

</section>
<section anchor="req-use-parse" title="REQ.USE.PARSE: Simple Parsing">

<t>The structure of the manifest MUST be simple to parse to reduce the attack vectors against manifest parsers.</t>

<t>Satisfies: <xref target="user-story-mfst-parse">USER_STORY.MFST.PARSE</xref></t>

<t>Implemented by: N/A</t>

</section>
<section anchor="req-use-delegation" title="REQ.USE.DELEGATION: Delegation of Authority in Manifest">

<t>A manifest format MUST enable the delivery of delegation information. This information delivers a new key with which the recipient can verify the manifest.</t>

<t>Satisfies: <xref target="user-story-mfst-delegation">USER_STORY.MFST.DELEGATION</xref></t>

<t>Implemented by: <xref target="manifest-element-key-claims">Delegation Chain</xref></t>

</section>
</section>
</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This document does not require any actions by IANA.</t>

</section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>We would like to thank our working group chairs, Dave Thaler, Russ Housley and David Waltermire, for their review comments and their support.</t>

<t>We would like to thank the participants of the 2018 Berlin SUIT Hackathon and the June 2018 virtual design team meetings for their discussion input.
In particular, we would like to thank Koen Zandberg, Emmanuel Baccelli, Carsten Bormann, David Brown, Markus Gueller, Frank Audun Kvamtro, Oyvind Ronningstad, Michael Richardson, Jan-Frederik Rieckers, Francisco Acosta, Anton Gerasimov, Matthias Waehlisch, Max Groening, Daniel Petry, Gaetan Harter, Ralph Hamm, Steve Patrick, Fabio Utzig, Paul Lambert, Benjamin Kaduk, Said Gharout, and Milen Stoychev.</t>

<t>We would like to thank those who contributed to the development of this information model. In particular, we would like to thank Milosch Meriac, Jean-Luc Giraud, Dan Ros, Amyas Philips, and Gary Thomson.</t>

<t>Finally, we would like to thank the following IESG members for their review feedback: Erik Kline, Murray Kucherawy, Barry Leiba, Alissa Cooper, Stephen Farrell and Benjamin Kaduk.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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="RFC4122" target='https://www.rfc-editor.org/info/rfc4122'>
<front>
<title>A Universally Unique IDentifier (UUID) URN Namespace</title>
<author initials='P.' surname='Leach' fullname='P. Leach'><organization /></author>
<author initials='M.' surname='Mealling' fullname='M. Mealling'><organization /></author>
<author initials='R.' surname='Salz' fullname='R. Salz'><organization /></author>
<date year='2005' month='July' />
<abstract><t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier).  A UUID is 128 bits long, and can guarantee uniqueness across space and time.  UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t><t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group).  Information from earlier versions of the DCE specification have been incorporated into this document.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4122'/>
<seriesInfo name='DOI' value='10.17487/RFC4122'/>
</reference>



<reference  anchor="RFC8747" target='https://www.rfc-editor.org/info/rfc8747'>
<front>
<title>Proof-of-Possession Key Semantics for CBOR Web Tokens (CWTs)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<author initials='L.' surname='Seitz' fullname='L. Seitz'><organization /></author>
<author initials='G.' surname='Selander' fullname='G. Selander'><organization /></author>
<author initials='S.' surname='Erdtman' fullname='S. Erdtman'><organization /></author>
<author initials='H.' surname='Tschofenig' fullname='H. Tschofenig'><organization /></author>
<date year='2020' month='March' />
<abstract><t>This specification describes how to declare in a CBOR Web Token (CWT) (which is defined by RFC 8392) that the presenter of the CWT possesses a particular proof-of-possession key. Being able to prove possession of a key is also sometimes described as being the holder-of-key. This specification provides equivalent functionality to &quot;Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)&quot; (RFC 7800) but using Concise Binary Object Representation (CBOR) and CWTs rather than JavaScript Object Notation (JSON) and JSON Web Tokens (JWTs).</t></abstract>
</front>
<seriesInfo name='RFC' value='8747'/>
<seriesInfo name='DOI' value='10.17487/RFC8747'/>
</reference>



<reference  anchor="RFC8392" target='https://www.rfc-editor.org/info/rfc8392'>
<front>
<title>CBOR Web Token (CWT)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<author initials='E.' surname='Wahlstroem' fullname='E. Wahlstroem'><organization /></author>
<author initials='S.' surname='Erdtman' fullname='S. Erdtman'><organization /></author>
<author initials='H.' surname='Tschofenig' fullname='H. Tschofenig'><organization /></author>
<date year='2018' month='May' />
<abstract><t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties.  The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection.  A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value.  CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t></abstract>
</front>
<seriesInfo name='RFC' value='8392'/>
<seriesInfo name='DOI' value='10.17487/RFC8392'/>
</reference>


<reference anchor="I-D.ietf-suit-architecture">
   <front>
      <title>A Firmware Update Architecture for Internet of Things</title>
      <author fullname="Brendan Moran">
	 <organization>Arm Limited</organization>
      </author>
      <author fullname="Hannes Tschofenig">
	 <organization>Arm Limited</organization>
      </author>
      <author fullname="David Brown">
	 <organization>Linaro</organization>
      </author>
      <author fullname="Milosch Meriac">
	 <organization>Consultant</organization>
      </author>
      <date month="January" day="27" 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.

 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="Internet-Draft" value="draft-ietf-suit-architecture-16" />
   <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-suit-architecture-16.txt" />
</reference>



<reference  anchor="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<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>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC3444" target='https://www.rfc-editor.org/info/rfc3444'>
<front>
<title>On the Difference between Information Models and Data Models</title>
<author initials='A.' surname='Pras' fullname='A. Pras'><organization /></author>
<author initials='J.' surname='Schoenwaelder' fullname='J. Schoenwaelder'><organization /></author>
<date year='2003' month='January' />
<abstract><t>There has been ongoing confusion about the differences between Information Models and Data Models for defining managed objects in network management.  This document explains the differences between these terms by analyzing how existing network management model specifications (from the IETF and other bodies such as the International Telecommunication Union (ITU) or the Distributed Management Task Force (DMTF)) fit into the universe of Information Models and Data Models. This memo documents the main results of the 8th workshop of the Network Management Research Group (NMRG) of the Internet Research Task Force (IRTF) hosted by the University of Texas at Austin.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='3444'/>
<seriesInfo name='DOI' value='10.17487/RFC3444'/>
</reference>


<reference anchor="STRIDE" target="https://msdn.microsoft.com/en-us/library/ee823878(v=cs.20).aspx">
  <front>
    <title>The STRIDE Threat Model</title>
    <author >
      <organization>Microsoft</organization>
    </author>
    <date year="2018" month="May"/>
  </front>
  <format type="HTML" target="https://msdn.microsoft.com/en-us/library/ee823878(v=cs.20).aspx"/>
</reference>




<reference  anchor="RFC3986" target='https://www.rfc-editor.org/info/rfc3986'>
<front>
<title>Uniform Resource Identifier (URI): Generic Syntax</title>
<author initials='T.' surname='Berners-Lee' fullname='T. Berners-Lee'><organization /></author>
<author initials='R.' surname='Fielding' fullname='R. Fielding'><organization /></author>
<author initials='L.' surname='Masinter' fullname='L. Masinter'><organization /></author>
<date year='2005' month='January' />
<abstract><t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='66'/>
<seriesInfo name='RFC' value='3986'/>
<seriesInfo name='DOI' value='10.17487/RFC3986'/>
</reference>




    </references>



  </back>

<!-- ##markdown-source:
H4sIAA25q2AAA+196XIjR5Lmfz5FbvUPFXsB6mjNtpprYzsoEqXiiNfw0DFt
Y7IEkACyCWRi8iALKtO77LPsk62fER6RCZBVUvfsjx3rMRWBRESkh4eHH5+7
D4fDgyZvVtlxMkou0iKfZ3WTnBXzslqnTV4WyUU5y1YJ/J28zav1U1plyf1m
ljZZneRFclbeJafZYz7N6oN0MqmyRxzIPbl7xINZOS3SNcw7q9J5M8yzZj6s
2xz+5R8drvHR4ZdfHUxhwkVZbY8T/PrgIN9Ux0lTtXXz1Rdf/OWLrw5gtvQ4
uc2mbZU324OnsnpYVGW7gc/uz+4OHrItfDQ7hoU0WVVkzfAUpz04qJu0mP2c
rsoClrKFt9jkxwdJUs2n2axutiv5NEmacmr+mRezrGj0g7qsmiqb1+7v7Tr4
s6nyqXt4Wq7X8Fv3bV6s8sJNA2RZp5tNXiz4k7RtlmUFSxrCl/R/eQE/fXME
ZKzSQj9kUr6psmKWFuFXZbWAXfiFCAqbU62T83ydN9lMH8jWab5yPz6iH/9L
Wq2PYKUH8cTvjpK7eros51mRL8LZ36VFAVzR/fqlK1jSAEeNG+BfFuv3R7BZ
fat4k1cPy3L1S7SGrHjofBXO/7ZK2wInqJJb4IxoCfD7o4n8/l/qvDmau8eP
ZtnBQcG8+Zghl9y8Pfnqyy//Iv/8+suvvpJ/fvPnr/+s//zTX+jTs+HpkWfy
tJougQLTpq1gJMfybtg/ff311/jP27ubs9PxMa2ySatFBmyULJtmUx9//vm6
nhVH63xalXU5b3C7Ps+KYVt/vsonVVptP8+yb7760zd//ub14z9P66Ovvjg8
SuvNex6MD/3dMpM54J9whBo5nfiIYz0l4nFyoZPRhygF4LN0m3z1xZff0Ef8
Hvqbd3cX57/Deg+Gw2GSTuAYpVPghe/bVZFV6SRf5U0ODPeUN0t3rpNyDm8C
x6dOXoNwOkxmLJ2AuR6zpErzOpslDbx1kcE/UKylSZWt8nSyyhIQBUmNIiRL
5irCWhJ2yTqbAnvm9Rp+DFTK6yRd1WWCm0k/xZGmZYFrhNM802mPknFRg0gq
Fvw7Xc28LaYkDHHKCpmv0JnLR+BMWGFewScVPp6sQIjCU//Z5hX8tm6nS/hd
z8pKWPb75DGkzwA/l2dhhfN80VYsiOusaZBSgyQFKmarFf43nc1wtUX25BaZ
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
7dxC2bVIlgM7VFn75sg8Dlwnrwn0t8iQQwjk7358qIGjOgvxNriRkwqBfC7W
40KTUtVv3q7m+G9KBGgr9LwSPSrKnmSYF9gfjI1SFSW1noXPak+7Rgn5mbSV
SkmOSXtjbWnMbZhRZZDXRGOebR1Znt9A1/uRGBAPitcfiDp5w2CqXVIASyD6
bkVpp79y0CYvYChaBPdTshXmngij7/NK3L6r/bOoTIkRidzRDgUD09vRZa/B
PQWyqY2lr+7iCY+pu7njt/hosminYUyCalSx1cVGHnlR8GSXzanAfQSmmS4p
x8gQz0VKEA8kxwALCr9h+/KE/9OHQqSikUGGaztPqT9UpeUIUB/GoubaSmDk
9R1/FrcBd1u+DE8I8DaeK6pHqQd3mlfTdg03UuE7Y/t7i0oEoPij4PqCSmE7
eI8UU9HwhVuirfToIr6YKJbOs2Y7nKIjn+rNSWT2aZnJWQtpYOqO4qoMJ5FB
fpRQbVwvr6OapeLHE4weR065OBlGr+F3uJ4jKb8Fd0lJHVwccmunlJShJB3N
JVg5cdZwzThmf5fIJosM69yylJYB7TmTOj4dGWkwVj4qZV7QRdUDRAUwx3+2
cJnjSQvIQTHhp2W58lzEBzgSih2vrKmYuvvcyo86ZBQuY5tOTECPAdVaIvEK
Q9lG+xNsi0oWehHpcdhLdFfiBnW1pXfn6AA9+zBPH4HvWD90WzzVYt61Te6x
MvCZjZDIyCxbUBSPfOucD4aHsSNUf5c96ZOl3b0IyEEpKXtNaTczK/MeIG3T
FGtXRTr34TtOombEoi5t5DtCPvPkm35h6HtpKW1nLjI8SFZZOnPlBgThOffm
1W4d9JlCIqSmnpyMb29/Prm6vLu5OrdqKvlUhmKSsoYaFLy80KTeeIO0219y
y3VVIvWCxBdDyl1IAy6Vtcjk6OladogjCLR8wkRyiwO3jZNWnDLdxfT+nnna
NJ/D9gg51RAeip4ldhVIO+Gr2hYKIW1l37IZzxNG8EWFcIxRFoKSovEtcMhx
Ft3Eb+iEt+7Ojyw3KhM/EbisLYbjj1xpmNX3IHAuMGcP0zJ7bWAzwhsPEQvX
6R7gIrxBWZKgJ6cjk29iEFZT71u3NHNrGIjmpJLLLPREDU9bFBm037OIe0Ly
wj29CoDrTgN981nNbdi3tgnZLKdOaaIKkS1qBCXyo8Tx42T/nEGQsfvCgFeQ
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
DFmpsORwl2DRw+GQ+pse/F/kz/nJiCEBAA==

-->

</rfc>

