<?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.3.24 -->

<!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-11" 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="April" day="06"/>

    <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 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>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.</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-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</t>
  <t>the destination</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. Each token itself is protected and does not require another layer of protection. Because the delegation chain is needed to verify the signature, it must be placed in the Manifest Envelope, rather than the Manifest.</t>

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

<t>Implements: <xref target="req-use-delegation">REQ.USE.DELEGATION</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">

<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></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>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-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>
<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-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="I-D.ietf-suit-architecture">
<front>
<title>A Firmware Update Architecture for Internet of Things</title>

<author initials='B' surname='Moran' fullname='Brendan Moran'>
    <organization />
</author>

<author initials='H' surname='Tschofenig' fullname='Hannes Tschofenig'>
    <organization />
</author>

<author initials='D' surname='Brown' fullname='David Brown'>
    <organization />
</author>

<author initials='M' surname='Meriac' fullname='Milosch Meriac'>
    <organization />
</author>

<date month='January' day='17' year='2021' />

<abstract><t>Vulnerabilities with Internet of Things (IoT) devices have raised the need for a solid and secure firmware update mechanism that is also suitable for constrained devices.  Incorporating such update mechanism to fix vulnerabilities, to update configuration settings as well as adding new functionality is recommended by security experts.  This document lists requirements and describes an architecture for a firmware update mechanism suitable for IoT devices.  The architecture is agnostic to the transport of the firmware images and associated meta-data.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-suit-architecture-15' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-suit-architecture-15.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:
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

-->

</rfc>

