<?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 text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-suit-architecture-14" category="info">

  <front>
    <title abbrev="A Firmware Update Architecture for IoT">A Firmware Update Architecture for Internet of Things</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@arm.com</email>
      </address>
    </author>
    <author initials="D." surname="Brown" fullname="David Brown">
      <organization>Linaro</organization>
      <address>
        <email>david.brown@linaro.org</email>
      </address>
    </author>
    <author initials="M." surname="Meriac" fullname="Milosch Meriac">
      <organization>Consultant</organization>
      <address>
        <email>milosch@meriac.com</email>
      </address>
    </author>

    <date year="2020" month="October" day="21"/>

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

    <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
as well as adding new functionality.</t>

<t>In addition to the definition of terminology and an architecture
this document motivates the standardization of a manifest format
as a transport-agnostic means for describing and protecting firmware
updates.</t>



    </abstract>


  </front>

  <middle>


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

<t>Firmware updates can help to fix security vulnerabilities and are
considered to be an important building block in securing IoT devices.
Due to rising concerns about insecure IoT devices the Internet
Architecture Board (IAB) organized a ‘Workshop on Internet of Things
(IoT) Software Update (IOTSU)’, which took place at Trinity College
Dublin, Ireland on the 13th and 14th of June, 2016 to take a look at
the bigger picture. A report about this workshop can be found at
<xref target="RFC8240"/>. The workshop revealed a number of challenges for developers
and led to the formation of the IETF
Software Updates for Internet of Things (SUIT) working group.</t>

<t>Developing secure Internet of Things (IoT) devices is not an easy
task and supporting a firmware update solution requires skillful
engineers. Once devices are deployed, firmware updates play a
critical part in their lifecycle management, particularly when devices have a
long lifetime, or are deployed in remote or inaccessible areas where manual
intervention is cost prohibitive or otherwise difficult. Firmware updates<vspace />
for IoT devices are expected to work automatically, i.e. without user
involvement. Conversely, IoT devices are expected to account for user
preferences and consent when scheduling updates.
Automatic updates that do not require human intervention
are key to a scalable solution for fixing software vulnerabilities.</t>

<t>Firmware updates are not only done to fix
bugs, but they can also add new functionality, and re-configure
the device to work in new environments or to behave differently in
an already deployed context.</t>

<t>The firmware update process has to ensure that</t>

<t><list style="symbols">
  <t>The firmware image is authenticated and integrity protected.
Attempts to flash a maliciously modified firmware image or an image from
an unknown, untrusted source must be prevented. In examples this document
uses asymmetric cryptography because it is the preferred approach by
many IoT deployments. The use of symmetric credentials is also supported
and can be used by very constrained IoT devices.</t>
  <t>The firmware image can be confidentiality protected so that
attempts by an adversary to recover the plaintext binary can
be mitigated or at least made more difficult. Obtaining the firmware is often one of
the first steps to mount an attack since it gives the adversary
valuable insights into the software libraries used, configuration
settings and generic functionality. Even though reverse
engineering the binary can be a tedious process modern reverse
engineering frameworks have made this task a lot easier.</t>
</list></t>

<t>While the standardization work has been informed by and optimized for firmware
update use cases of Class 1 devices (according to the device class
definitions in RFC 7228 <xref target="RFC7228"/>) devices, there is nothing in
the architecture that restricts its use to only these constrained IoT devices.
Moreover, this architecture is not limited to managing firmware and software updates,
but can also be applied to managing the delivery of arbitrary data, such
as configuration information and keys. Unlike higher end devices, like
laptops and desktop PCs, many IoT devices do not have user interfaces
and support for unattended updates is, therefore, essential for the design
of a practical solution. Constrained IoT devices often use a
software engineering model where a developer is responsible for creating
and compiling all software running on the device into a single, monolithic
firmware image. On higher end devices application software is, on the other
hand, often downloaded separately and even obtained from developers different
to the developers of the lower level software. The details for how to obtain
those application layer software binaries then depends heavily on the platform,
programming language used and the sandbox in which the software is executed.</t>

<t>While the IETF standardization work has been focused on the
manifest format, a fully interoperable solution needs more than a standardized
manifest. For example, protocols for transferring firmware images
and manifests to the device need to be available as well as the status tracker
functionality. Devices also require a mechanism to discover the status
tracker(s) and/or firmware servers, for example using pre-configured hostnames
or <xref target="RFC6763"/> DNS-SD.
These building blocks have been developed by various organizations
under the umbrella of an IoT device management solution. The LwM2M protocol is one
IoT device management protocol.</t>

<t>There are, however, several areas that (partially) fall outside the scope of the IETF
and other standards organizations but need to be considered by firmware authors,
as well as device and network operators. Here are some of them, as highlighted during
the IOTSU workshop:</t>

<t><list style="symbols">
  <t>Installing firmware updates in a robust fashion so that the
update does not break the device functionality of the environment
this device operates in. This requires proper testing and offering
recovery strategies when a firmware update is unsuccessful.</t>
  <t>Making firmware updates available in a timely fashion considering the
complexity of the decision making process for updating devices,
potential re-certification requirements, the length of a supply chain
an update needs to go through before it reaches the end customer,
and the need for user consent to install updates.</t>
  <t>Ensuring an energy efficient design of a battery-powered IoT device because a
firmware update, particularly radio communication and writing the firmware image
to flash, is an energy-intensive task for a device.</t>
  <t>Creating incentives for device operators to use a firmware update mechanism and to
demand the integration of it from IoT device vendors.</t>
  <t>Ensuring that firmware updates addressing critical flaws can be
obtained even after a product is discontinued or a vendor goes out of
business.</t>
</list></t>

<t>This document starts with a terminology followed by the description of the architecture.
We then explain the bootloader and how it integrates with the firmware update mechanism.
Subsequently, we offer a categorization of IoT devices in terms of their hardware
capabilities relevant for firmware updates. Next, we talk about the manifest structure
and how to use it to secure firmware updates. We conclude with a more detailed example.</t>

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

<section anchor="terms" title="Terms">

<t>This document uses the following terms:</t>

<t><list style="symbols">
  <t>Firmware Image: The firmware image, or image, is a binary
that may contain the complete software of a device or a subset of
it. The firmware image may consist of multiple images, if
the device contains more than one microcontroller. Often
it is also a compressed archive that contains code,
configuration data, and even the entire file system. The
image may consist of a differential update for performance
reasons.  <vspace blankLines='1'/>
The terms,
firmware image, firmware, and image, are used in this
document and are interchangeable. We use the term application firmware
image to differentiate it from a firmware image that
contains the bootloader. An application firmware image, as the
name indicates, contains the application program often including
all the necessary code to run it (such as protocol stacks, and
embedded operating system).</t>
  <t>Manifest: The manifest contains meta-data about the firmware
image. The manifest is protected against modification and
provides information about the author.</t>
  <t>Microcontroller (MCU for microcontroller unit): An MCU is a
compact integrated circuit designed for use in embedded systems.
A typical microcontroller includes a processor, memory (RAM and
flash), input/output (I/O) ports and other features connected via
some bus on a single chip. The term ’system on chip (SoC)’ is
often used interchangeably with MCU, but MCU tends to imply more
limited peripheral functions.</t>
  <t>Rich Execution Environment (REE): An environment that is provided
and governed by a typical OS (e.g., Linux, Windows, Android, iOS),
potentially in conjunction with other supporting operating systems
and hypervisors; it is outside of the TEE.  This environment and
applications running on it are considered un-trusted.</t>
  <t>Software: Similar to firmware, but typically dynamically loaded by an
Operating System. Used interchangeably with firmware in this document.</t>
  <t>System on Chip (SoC): An SoC is an integrated circuit that
contains all components of a computer, such as CPU, memory,
input/output ports, secondary storage, a bus to connect the
components, and other hardware blocks of logic.</t>
  <t>Trust Anchor: A trust anchor, as defined in <xref target="RFC6024"/>, represents
an authoritative entity via a public key and associated data.  The
public key is used to verify digital signatures, and the associated
data is used to constrain the types of information for which the
trust anchor is authoritative.”</t>
  <t>Trust Anchor Store: A trust anchor store, as defined in <xref target="RFC6024"/>,
is a set of one or more trust anchors stored in a device.  A device
may have more than one trust anchor store, each of which may be used
by one or more applications. A trust anchor store must resist
modification against unauthorized insertion, deletion, and modification.</t>
  <t>Trusted Applications (TAs): An application component that runs in
a TEE.</t>
  <t>Trusted Execution Environments (TEEs): An execution environment
that runs alongside of, but is isolated from, an REE. For more
information about TEEs see <xref target="I-D.ietf-teep-architecture"/>.</t>
</list></t>

</section>
<section anchor="stakeholders" title="Stakeholders">

<t>The following stakeholders are used in this document:</t>

<t><list style="symbols">
  <t>Author: The author is the entity that creates the firmware image.
There may be multiple authors involved in producing firmware running
on an IoT device. <xref target="device"/> talks about those IoT device deployment cases.</t>
  <t>Device Operator: The device operator is responsible for the day-to-day operation
of a fleet of IoT devices. Customers of IoT devices, as the owners of
IoT devices - such as enterprise customers or end users, interact
with their IoT devices indirectly through the device operator via
web or smart phone apps.</t>
  <t>Network Operator: The network operator is responsible for the operation of a
network to which IoT devices connect.</t>
  <t>Trust Provisioning Authority (TPA): The TPA distributes
trust anchors and authorization policies to devices and various stakeholders.
The TPA may also delegate rights to stakeholders. Typically, the
Original Equipment Manufacturer (OEM) or Original Design Manufacturer
(ODM) will act as a TPA, however complex supply chains may require
a different design. In some cases, the TPA may decide to remain in
full control over the firmware update process of their products.</t>
  <t>User: The end-user of a device. The user may interact with devices
via web or smart phone apps, as well as through direct user interfaces.</t>
</list></t>

</section>
<section anchor="functions" title="Functions">

<t><list style="symbols">
  <t>(IoT) Device: A device refers to the entire IoT product, which
consists of one or many MCUs, sensors and/or actuators. Many IoT
devices sold today contain multiple MCUs and therefore a single
device may need to obtain more than one firmware image and
manifest to successfully perform an update.</t>
  <t>Status Tracker: The status tracker has a client and a server component
and performs three tasks:
1) It communicates the availability of a new firmware version. This
   information will flow from the server to the client. <vspace />
2) It conveys information about software and hardware characteristics of
   the device. The information flow is from the client to the server. <vspace />
3) It can remotely trigger the firmware update process. The
   information flow is from the server to the client.  <vspace blankLines='1'/>
For example, a device operator may want to read the installed firmware
version number running on the device and information
about available flash memory. Once an update has been triggered, the device
operator may want to obtain information about the state of the firmware
update. If errors occurred, the device operator may want to
troubleshoot problems by first obtaining diagnostic information (typically
using a device management protocol).  <vspace blankLines='1'/>
We make no
assumptions about where the server-side component is deployed. The
deployment of status trackers is flexible and may be found at<vspace />
cloud-based servers, on-premise servers, or may be embedded in edge
computing devices. A status tracker server component may even be
deployed on an IoT device. For example, if the IoT device contains
multiple MCUs, then the main MCU may act as a status tracker towards the
other MCUs. Such deployment is useful when updates have to be
synchronized across MCUs.  <vspace blankLines='1'/>
The status tracker may be operated by any suitable stakeholder;
typically the Author, Device Operator, or Network Operator.</t>
  <t>Firmware Consumer: The firmware consumer is the recipient of the
firmware image and the manifest. It is responsible for parsing
and verifying the received manifest and for storing the obtained
firmware image. The firmware consumer plays the role of the
update component on the IoT device typically running in the
application firmware. It interacts with the firmware server and
with the status tracker client (locally).</t>
  <t>Firmware Server: The firmware server stores firmware images and
manifests and distributes them to IoT devices. Some deployments
may require a store-and-forward concept, which requires storing
the firmware images/manifests on more than one entity before<vspace />
they reach the device. There is typically some interaction between the
firmware server and the status tracker and these two entities are often
physically separated on different devices for scalability reasons.</t>
  <t>Bootloader: A bootloader is a piece of software that is
executed once a microcontroller has been reset. It is
responsible for deciding what code to execute.</t>
</list></t>

</section>
</section>
<section anchor="architecture" title="Architecture">

<t>More devices today than ever before are connected to the Internet,
which drives the need for firmware updates to be provided over the
Internet rather than through traditional interfaces, such as USB or
RS-232. Sending updates over the Internet requires the device to fetch
the new firmware image as well as the manifest.</t>

<t>Hence, the following components are necessary on a device for a firmware
update solution:</t>

<t><list style="symbols">
  <t>the Internet protocol stack for firmware downloads. Because firmware images are often multiple kilobytes, sometimes
exceeding one hundred kilobytes, in size for low end IoT devices and even
several megabytes large for IoT devices running full-fledged operating systems
like Linux, the protocol mechanism for retrieving these images needs
to offer features like congestion control, flow control, fragmentation
and reassembly, and mechanisms to resume interrupted or corrupted transfers.</t>
  <t>the capability to write the received firmware image to
persistent storage (most likely flash memory).</t>
  <t>a manifest parser with code to verify a digital
signature or a message authentication code.</t>
  <t>the ability to unpack, to decompress and/or to decrypt the
received firmware image.</t>
  <t>a status tracker.</t>
</list></t>

<t>The features listed above are most likely offered by code in the application firmware
image running
on the device rather than by the bootloader itself. Note that
cryptographic algorithms will likely run in a trusted execution
environment, on a separate MCU, in a hardware security module, or in a secure element
rather than in the same context with the application code.</t>

<t><xref target="arch-figure"/> shows the architecture where a
firmware image is created by an author, and made available to a firmware
server. For security reasons, the author will not have the permissions to
upload firmware images to the firmware server and to initiate an update him- or herself.
Instead, authors will make firmware images available to the device operators. Note that
there may be a longer supply chain involved to pass software updates from the author all
the way to the party that can then finally make a decision to deploy it with IoT devices.</t>

<t>As a first step in the firmware update process, the status tracker client needs to be
made aware of the availability of a new firmware update by the status tracker server.
This can be accomplished via polling (client-initiated), push notifications (server-initiated),
or more complex mechanisms (such as a hybrid approach):</t>

<t><list style="symbols">
  <t>Client-initiated updates take the form of a status tracker client proactively
checking (polling) for updates.</t>
  <t>With Server-initiated updates the server-side component of the status tracker
learns about a new firmware version and determines which devices qualify for a
firmware update. Once the relevant devices have been selected, the
status tracker informs these devices and the firmware consumers obtain those
images and manifests. Server-initiated updates are important because they allow a quick
response time. Note that the client-side status tracker needs to be reachable by the server-side
component. This may require devices to keep reachability information on the
server-side up-to-date and state at NATs and stateful packet filtering
firewalls alive.</t>
  <t>Using a hybrid approach the server-side of the status tracker
pushes notifications of availability of an update to the client side and requests
the firmware consumer to pull the manifest and the firmware image from the
firmware server.</t>
</list></t>

<t>Once the device operator triggers update via the status tracker, it will keep
track of the update process on the device. This allows the device operator to know what
devices have received an update and which of them are still pending an update.</t>

<t>Firmware images can be conveyed to devices in a variety of ways,
including USB, UART, WiFi, BLE, low-power WAN technologies, mesh networks and many more.
At the application layer
a variety of protocols are also available: MQTT, CoAP, and HTTP are the
most popular application layer protocols used by IoT devices. This architecture
does not make assumptions about how the firmware images are distributed to the
devices and therefore aims to support all these technologies.</t>

<t>In some cases it may be desirable to distribute firmware images using a multicast
or broadcast protocol. This architecture does not make recommendations for any
such protocol. However, given that broadcast may be desirable for some networks,
updates must cause the least disruption possible both in metadata
and firmware transmission. For an update to be broadcast friendly, it cannot rely on link
layer, network layer, or transport layer security. A solution has
to rely on security protection applied to the manifest and firmware image
instead. In addition,
the same manifest must be deliverable to many devices, both those
to which it applies and those to which it does not, without a
chance that the wrong device will accept the update. Considerations
that apply to network broadcasts apply equally to the use of
third-party content distribution networks for payload distribution.</t>

<figure title="Architecture." anchor="arch-figure"><artwork><![CDATA[
                                                      +----------+
                                                      |          |
                                                      |  Author  |
                                                      |          |
                                                      +----------+
                       Firmware + Manifest                 |
              +----------------------------------+         | Firmware +
              |                                  |         | Manifest
              |                               ---+-------  |
              |                           ----   |       --|-
              |                         //+----------+     | \\
             -+--                      // |          |     |   \
        ----/ |  ----                |/   | Firmware |<-+  |    \
      //      |      \\              |    | Server   |  |  |     \
     /        |        \             /    |          |  +  +      \
    /         |         \           /     +----------+   \ /       |
   / +--------+--------+ \         /                      |        |
  /  |        v        |  \       /                       v        |
 |   | +------------+  |   |     |          +----------------+      |
 |   | |  Firmware  |  |                    |     Device     |      |
 |   | |  Consumer  |  |   |     |          |     Management |      |
|    | +------------+  |    |    |          |                |      |
|    | +------------+  |    |    |          |    +--------+  |      |
|    | |  Status    |<-+--------------------+->  |        |  |      |
|    | |  Tracker   |  |    |    |          |    | Status |  |      |
|    | |  Client    |  |    |    |          |    | Tracker|  |     |
 |   | +------------+  |   |     |          |    | Server |  |     |
 |   |    Device       |   |      |         |    +--------+  |     |
 |   +-----------------+   |       \        |                |    /
  \                       /         \       +----------------+   /
   \       Network       /           \                          /
    \     Operator      /             \     Device Operator    /
      \\             //                \ \                   //
        ----     ----                     ----           ----
            -----                             -----------
]]></artwork></figure>

<t>Firmware images and manifests may be conveyed as a bundle or detached. The
manifest must support both approaches.</t>

<t>For distribution as a bundle, the firmware image is embedded into the manifest.
This is a useful approach for deployments where devices are not connected
to the Internet and cannot contact a dedicated firmware server for the firmware
download. It is also applicable when the firmware update happens via a
USB sticks or short range radio technologies (such as Bluetooth Smart).</t>

<t>Alternatively, the manifest is distributed detached from the firmware image.
Using this approach, the firmware consumer is presented with the manifest first
and then needs to obtain one or more firmware images as dictated in the
manifest.</t>

<t>The pre-authorisation step involves verifying whether the entity
signing the manifest is indeed authorized to perform an update.
The firmware consumer must also determine whether it should fetch and
process a firmware image, which is referenced in a manifest.</t>

<t>A dependency resolution phase is needed when more than one
component can be updated or when a differential update is used.
The necessary dependencies must be available prior to installation.</t>

<t>The download step is the process of acquiring a local copy of the
firmware image.  When the download is client-initiated, this means
that the firmware consumer chooses when a download occurs and initiates
the download process.  When a download is server-initiated,
this means that the status tracker tells
the device when to download or that it initiates the transfer
directly to the firmware consumer. For example, a download from an
HTTP/1.1-based firmware server is client-initiated. Pushing a manifest
and firmware image to the Package resource of the LwM2M
Firmware Update object <xref target="LwM2M"/> is server-initiated update.</t>

<t>If the firmware consumer has downloaded a new firmware image and is ready to
install it, to initiate the installation, it may
- either need to wait for a trigger from the status tracker,
- or trigger the update automatically,
- or go through a more complex decision making process to determine
the appropriate timing for an update. Sometimes the final decision may
require confirmation of the user of the device for safety reasons.</t>

<t>Installation is the act of processing the payload into a format that
the IoT device can recognize and the bootloader is responsible for
then booting from the newly installed firmware image.
This process is different when a bootloader is not involved. For example,
when an application is updated in a full-featured operating system, the
updater may halt and restart the application in isolation. Devices must
not fail when a disruption occurs during the update process.
For example, a power failure or network disruption during the update
process must not cause the device to fail.</t>

</section>
<section anchor="invocation" title="Invoking the Firmware">

<t><xref target="architecture"/> describes the steps for getting the firmware image and the manifest
from the author to the firmware consumer on the IoT device. Once the firmware consumer
has retrieved and successfully processed the manifest and the firmware image it needs
to invoke the new firmware image. This is managed in many different ways, depending
on the type of device, but it typically involves halting the current version of the
firmware, handing control over to a firmware with a higher privilege/trust level
(the firmware verifier)
verifying the new firmware’s authenticity &amp; integrity, and then invoking it.</t>

<t>In an execute-in-place microcontroller, this is often done by rebooting into a
bootloader (simultaneously halting the application &amp; handing over to the higher
privilege level) then executing a secure boot process (verifying and invoking
the new image).</t>

<t>In a rich OS, this may be done by halting one or more processes, then invoking
new applications. In some OSs, this implicitly involves the kernel verifying
the code signatures on the new applications.</t>

<t>The invocation process is security sensitive. An attacker will typically try to
retrieve a firmware image from the device for reverse engineering or will try to get
the firmware verifier to execute an attacker-modified firmware image. The
firmware verifier will therefore have to perform security checks on the
firmware image before it can be invoked. These security checks by the
firmware verifier happen in addition to the security checks that took place
when the firmware image and the manifest were downloaded by the firmware consumer.</t>

<t>The overlap between the firmware consumer and the firmware verifier
functionality comes in two forms, namely</t>

<t><list style="symbols">
  <t>A firmware verifier must verify the firmware image it boots as
part of the secure boot process. Doing so requires meta-data to be
stored alongside the firmware image so that the firmware verifier can
cryptographically verify the firmware image before booting it to
ensure it has not been tampered with or replaced. This meta-data
used by the firmware verifier may well be the same manifest obtained with the
firmware image during the update process.</t>
  <t>An IoT device needs a recovery strategy in case the firmware
update / invocation process fails. The recovery
strategy may include storing two or more application firmware images
on the device or offering the ability to invoke a recovery image to
perform the firmware update process again using firmware updates over
serial, USB or even wireless connectivity like Bluetooth Smart.
In the latter case the firmware consumer functionality is contained in the
recovery image and requires the necessary functionality for
executing the firmware update process, including manifest parsing.</t>
</list></t>

<t>While this document assumes that the firmware verifier itself is
distinct from the role of the firmware consumer and therefore does not
manage the firmware update process, this is not a requirement and these
roles may be combined in practice.</t>

<t>Using a bootloader as the firmware verifier requires some special
considerations, particularly when the bootloader
implements the robustness requirements identified by the IOTSU workshop <xref target="RFC8240"/>.</t>

<section anchor="bootloader" title="The Bootloader">

<t>In most cases the MCU must restart in order to hand over control to the bootloader.
Once the MCU has initiated a restart, the bootloader determines whether a newly available
firmware image should be executed. If the bootloader concludes that the newly available
firmware image is invalid, a recovery strategy is necessary. There are only two
approaches for recovering from an invalid firmware: either the bootloader must be able
to select a different, valid firmware, or it must be able to obtain a new, valid firmware.
Both of these approaches have implications for the architecture of the update system.</t>

<t>Assuming the first approach, there are (at least) three firmware images available
on the device:</t>

<t><list style="symbols">
  <t>First, the bootloader is also firmware. If a bootloader is updatable then its
firmware image is treated like any other application firmware image.</t>
  <t>Second, the firmware image that has to be replaced is still available on the
device as a backup in case the freshly downloaded firmware image does not
boot or operate correctly.</t>
  <t>Third, there is the newly downloaded firmware image.</t>
</list></t>

<t>Therefore, the firmware consumer must know where to store the new firmware.
In some cases, this may be implicit, for example replacing the least-recently-used
firmware image. In other cases, the storage location of the new firmware must be
explicit, for example when a device has one or more application firmware images
and a recovery image with limited functionality, sufficient only to perform an update.</t>

<t>Since many low end IoT devices do not use position-independent code,
either the bootloader needs to copy the newly downloaded application firmware image
into the location of the old application firmware image and vice versa or
multiple versions of the firmware need to be prepared for different locations.</t>

<t>In general, it is assumed that the bootloader itself, or a minimal part of it,
will not be updated since a failed update of the bootloader poses a
reliability risk.</t>

<t>For a bootloader to offer a secure boot functionality it needs to
implement the following functionality:</t>

<t><list style="symbols">
  <t>The bootloader needs to fetch the manifest (or manifest-alike headers)
from nonvolatile storage and parse its
contents for subsequent cryptographic verification.</t>
  <t>Cryptographic libraries with hash functions, digital signatures
(for asymmetric crypto), message authentication codes (for symmetric
crypto) need to be accessible.</t>
  <t>The device needs to have a trust anchor store to verify the
digital signature. (Alternatively, access to a key store for use
with the message authentication code.)</t>
  <t>Ability to expose boot process-related data to the application
firmware (such as to the status tracker).  This allows
to share information about the current firmware version, and the
status of the firmware update process and whether errors have occurred.</t>
  <t>Produce boot measurements as part of an attestation solution. See
<xref target="I-D.ietf-rats-architecture"/> for more information. (optional)</t>
  <t>Ability to decrypt firmware images, in case confidentiality protection
was applied. This requires a solution for key management. (optional)</t>
</list></t>

</section>
</section>
<section anchor="device" title="Types of IoT Devices">

<t>There are billions of MCUs used in devices today produced by a large
number of silicon manufacturers. While MCUs can vary significantly
in their characteristics, there are a number of similiaries allowing
us to categorize in groups.</t>

<t>The firmware update architecture, and the manifest format in particular,
needs to offer enough flexibility to cover these common deployment cases.</t>

<section anchor="single-mcu" title="Single MCU">

<t>The simplest, and currently most common, architecture consists of
a single MCU along with its own peripherals.  These SoCs generally
contain some amount of flash memory for code and fixed data, as
well as RAM for working storage.  A notable characteristic of these
SoCs is that the primary code is generally execute in place (XIP).
Due to the non-relocatable nature of the code, the firmware image
needs to be placed in a specific location in flash since the code
cannot be executed from an arbitrary location in flash. Hence, when
the firmware image is updated it is necessary to swap the old and
the new image.</t>

</section>
<section anchor="single-cpu-with-secure-normal-mode-partitioning" title="Single CPU with Secure - Normal Mode Partitioning">

<t>Another configuration consists of a similar architecture to the
previous, with a single CPU.  However, this CPU supports a security
partitioning scheme that allows memory (in addition to other things)
to be divided into secure and normal mode.  There will generally be
two images, one for secure mode, and one for normal mode.  In this
configuration, firmware upgrades will generally be done by the CPU
in secure mode, which is able to write to both areas of the flash
device. In addition, there are requirements to be able to update
either image independently, as well as to update them together
atomically, as specified in the associated manifests.</t>

</section>
<section anchor="symmetric-multiple-cpus" title="Symmetric Multiple CPUs">

<t>In more complex SoCs with symmetric multi-processing support, advanced
operating systems, such as Linux, are often used. These SoCs frequently
use an external storage medium, such as raw NAND flash or eMMC. Due to
the higher quantity of resources, these devices are often capable of
storing multiple copies of their firmware images and selecting the most
appropriate one to boot. Many SoCs also support bootloaders that are
capable of updating the firmware image, however this is typically a last
resort because it requires the device to be held in the bootloader while
the new firmware is downloaded and installed, which results in down-time
for the device. Firmware updates in this class of device are typically
not done in-place.</t>

</section>
<section anchor="dual-cpu-shared-memory" title="Dual CPU, shared memory">

<t>This configuration has two or more heterogeneous CPUs in a single SoC that
share memory (flash and RAM).  Generally, there will be a mechanism to prevent
one CPU from unintentionally accessing memory currently allocated to the other.
Upgrades in this case will typically be done by one of the CPUs, and is
similar to the single CPU with secure mode.</t>

</section>
<section anchor="dual-cpu-other-bus" title="Dual CPU, other bus">

<t>This configuration has two or more heterogeneous CPUs, each having their own memory.
There will be a communication channel between them, but it will be
used as a peripheral, not via shared memory.  In this case, each CPU
will have to be responsible for its own firmware upgrade.  It is
likely that one of the CPUs will be considered the primary CPU, and will
direct the other CPU to do the upgrade.  This configuration is
commonly used to offload specific work to other CPUs.  Firmware
dependencies are similar to the other solutions above, sometimes
allowing only one image to be upgraded, other times requiring several
to be upgraded atomically.  Because the updates are happening on
multiple CPUs, upgrading the two images atomically is challenging.</t>

</section>
</section>
<section anchor="manifests" title="Manifests">

<t>In order for a firmware consumer to apply an update, it has to make several decisions
using manifest-provided information and data available on the device itself. For more
detailed information and a longer list of information elements in the manifest consult the
information model specification <xref target="I-D.ietf-suit-information-model"/>, which offers justifications
for each element, and the manifest, see <xref target="I-D.ietf-suit-manifest"/>, for details about how this
information is included in the manifest.</t>

<t><xref target="manifest-info"/> provides examples of decisions to be made.</t>

<texttable title="Firmware Update Decisions." anchor="manifest-info">
      <ttcol align='right'>Decision</ttcol>
      <ttcol align='left'>Information Elements</ttcol>
      <c>Should I trust the author of the firmware?</c>
      <c>Trust anchors and authorization policies on the device</c>
      <c>Has the firmware been corrupted?</c>
      <c>Digital signature and MAC covering the firmware image</c>
      <c>Does the firmware update apply to this device?</c>
      <c>Conditions with Vendor ID, Class ID and Device ID</c>
      <c>Is the update older than the active firmware?</c>
      <c>Sequence number in the manifest (1)</c>
      <c>When should the device apply the update?</c>
      <c>Wait directive</c>
      <c>How should the device apply the update?</c>
      <c>Manifest commands</c>
      <c>What kind of firmware binary is it?</c>
      <c>Unpack algorithms to interpret a format.</c>
      <c>Where should the update be obtained?</c>
      <c>Dependencies on other manifests and firmware image URI in Manifest</c>
      <c>Where should the firmware be stored?</c>
      <c>Storage Location and Component Identifier</c>
</texttable>

<t>(1): A device presented with an old, but valid manifest and firmware
must not be tricked into installing such firmware since a
vulnerability in the old firmware image may allow an attacker to
gain control of the device.</t>

<t>Keeping the code size and complexity of a manifest parsers small is important
for constrained IoT devices. Since the manifest parsing code may
also be used by the bootloader it is part of the trusted computing base.</t>

<t>A manifest may not only be used to protect firmware images but also
configuration data such as network credentials or personalization data
related to firmware or software.
Personalization data demonstrates the need for confidentiality to be
maintained between two or more stakeholders that both deliver images to
the same device. Personalization data is used with
Trusted Execution Environments (TEEs), which
benefit from a protocol for managing the lifecycle of trusted
applications (TAs) running inside a TEE. TEEs may obtain TAs
from different authors and those TAs may require personalization data,
such as payment information, to be securely conveyed to the TEE. The
TA’s author does not want to expose the TA’s code to any other stakeholder
or third party.
The user does not want to expose the payment information to any other
stakeholder or third party.</t>

</section>
<section anchor="securing" title="Securing Firmware Updates">

<t>Using firmware updates to fix vulnerabilities in devices is important but securing this
update mechanism is equally important since security problems are
exacerbated by the update mechanism: update is essentially authorized
remote code execution, so any security problems in the update process
expose that remote code execution system. Failure
to secure the firmware update process will help attackers to take control over devices.</t>

<t>End-to-end security mechanisms are used to protect the firmware
image and the manifest. The following assumptions are made to allow
the firmware consumer to verify the received firmware image and
manifest before updating software:</t>

<t><list style="symbols">
  <t>Authentication ensures that the device can cryptographically identify
the author(s) creating firmware images and manifests. Authenticated
identities may be used as input to the authorization process. Not all
entities creating and signing manifests have the same
permissions. A device needs to determine whether the requested action
is indeed covered by the permission of the party that signed the manifest.
Informing the device about the permissions of the different parties
also happens in an out-of-band fashion and is also a duty of the
Trust Provisioning Authority.</t>
  <t>Integrity protection ensures that no third party can modify the manifest
or the firmware image. To accept an update, a device needs to verify the signature covering
the manifest. There may be one or multiple manifests that need to be
validated, potentially signed by different parties. The device needs
to be in possession of the trust anchors to verify those signatures.
Installing trust anchors to devices via the Trust Provisioning Authority
happens in an out-of-band fashion prior to the firmware update process.</t>
  <t>For confidentiality protection of the firmware image, it must be done in such a
way that the intended firmware consumer(s), other authorized parties,
and no one else can decrypt it. The information
that is encrypted individually for each device/recipient must maintain
friendliness to Content Distribution Networks, bulk storage, and
broadcast protocols. For confidentiality protection of firmware images the author needs
to be in possession of the certificate/public key or a pre-shared key
of a device. The use of confidentiality protection of firmware images
is optional.</t>
</list></t>

<t>A manifest specification must support different cryptographic algorithms
and algorithm extensibility. Moreover, since RSA- and ECC-based signature
schemes may become vulnerable to quantum-accelerated key extraction in the
future, unchangeable bootloader code in ROM is recommended to use post-quantum
secure signature schemes such as hash-based signatures <xref target="RFC8778"/>. A
bootloader author must carefully consider the service lifetime of their
product and the time horizon for quantum-accelerated key extraction.
The worst-case estimate, at time of writing, for the time horizon to key
extraction with quantum acceleration is approximately 2030, based on
current research <xref target="quantum-factorization"/>.</t>

<t>When a device obtains a monolithic firmware image from a single author
without any additional approval steps then the authorization flow is
relatively simple. There are, however, other cases where more complex
policy decisions need to be made before updating a device.</t>

<t>In this architecture the authorization policy is separated from
the underlying communication architecture. This is accomplished
by separating the entities from their permissions. For example,
an author may not have the authority to install a firmware image
on a device in critical infrastructure without the authorization
of a device operator. In this case, the device may be programmed
to reject firmware updates unless they are signed both by the
firmware author and by the device operator.</t>

<t>Alternatively, a device may trust precisely one entity, which
does all permission management and coordination. This entity
allows the device to offload complex permissions
calculations for the device.</t>

</section>
<section anchor="example" title="Example">

<t><xref target="firmware-update"/> illustrates an example message flow
for distributing a firmware image to a device. The firmware
and manifest are stored on the same firmware server and
distributed in a detached manner.</t>

<figure title="First Example Flow for a Firmware Update." anchor="firmware-update"><artwork><![CDATA[
+--------+    +-----------------+    +-----------------------------+
|        |    | Firmware Server |    |         IoT Device          |
| Author |    | Status Tracker  |    | +------------+ +----------+ |
+--------+    | Server          |    | |  Firmware  | |Bootloader| |
  |           +-----------------+    | |  Consumer  | |          | |
  |                   |              | +------------+ +----------+ |
  |                   |              |      |                |     |
  |                   |              |  +-----------------------+  |
  | Create Firmware   |              |  | Status Tracker Client |  |
  |--------------+    |              |  +-----------------------+  |
  |              |    |               `''''''''''''''''''''''''''''
  |<-------------+    |                     |        |       |
  |                   |                     |        |       |
  | Upload Firmware   |                     |        |       |
  |------------------>|                     |        |       |
  |                   |                     |        |       |
  | Create Manifest   |                     |        |       |
  |---------------+   |                     |        |       |
  |               |   |                     |        |       |
  |<--------------+   |                     |        |       |
  |                   |                     |        |       |
  | Sign Manifest     |                     |        |       |
  |-------------+     |                     |        |       |
  |             |     |                     |        |       |
  |<------------+     |                     |        |       |
  |                   |                     |        |       |
  | Upload Manifest   |                     |        |       |
  |------------------>|  Notification of    |        |       |
  |                   |  new firmware image |        |       |
  |                   |----------------------------->|       |
  |                   |                     |        |       |
  |                   |                     |Initiate|       |
  |                   |                     | Update |       |
  |                   |                     |<-------|       |
  |                   |                     |        |       |
  |                   |   Query Manifest    |        |       |
  |                   |<--------------------|        .       |
  |                   |                     |        .       |
  |                   |   Send Manifest     |        .       |
  |                   |-------------------->|        .       |
  |                   |                     | Validate       |
  |                   |                     | Manifest       |
  |                   |                     |--------+       |
  |                   |                     |        |       |
  |                   |                     |<-------+       |
  |                   |                     |        .       |
  |                   |  Request Firmware   |        .       |
  |                   |<--------------------|        .       |
  |                   |                     |        .       |
  |                   | Send Firmware       |        .       |
  |                   |-------------------->|        .       |
  |                   |                     | Verify .       |
  |                   |                     | Firmware       |
  |                   |                     |--------+       |
  |                   |                     |        |       |
  |                   |                     |<-------+       |
  |                   |                     |        .       |
  |                   |                     | Store  .       |
  |                   |                     | Firmware       |
  |                   |                     |--------+       |
  |                   |                     |        |       |
  |                   |                     |<-------+       |
  |                   |                     |        .       |
  |                   |                     |        .       |
  |                   |                     |        .       |
  |                   |                     |        |       |
  |                   |                     | Update |       |
  |                   |                     |Complete|       |
  |                   |                     |------->|       |
  |                   |                              |       |
  |                   |  Firmware Update Completed   |       |
  |                   |<-----------------------------|       |
  |                   |                              |       |
  |                   |  Reboot                      |       |
  |                   |----------------------------->|       |
  |                   |                     |        |       |
  |                   |                     |        |       |
                      |                     |        |Reboot |
  |                   |                     |        |------>|
  |                   |                     |        |       |
  |                   |                     |        .       |
  |                   |                 +---+----------------+--+
  |                   |                S|   |                |  |
  |                   |                E|   | Verify         |  |
  |                   |                C|   | Firmware       |  |
  |                   |                U|   | +--------------|  |
  |                   |                R|   | |              |  |
  |                   |                E|   | +------------->|  |
  |                   |                 |   |                |  |
  |                   |                B|   | Activate new   |  |
  |                   |                O|   | Firmware       |  |
  |                   |                O|   | +--------------|  |
  |                   |                T|   | |              |  |
  |                   |                 |   | +------------->|  |
  |                   |                P|   |                |  |
  |                   |                R|   | Boot new       |  |
  |                   |                O|   | Firmware       |  |
  |                   |                C|   | +--------------|  |
  |                   |                E|   | |              |  |
  |                   |                S|   | +------------->|  |
  |                   |                S|   |                |  |
  |                   |                 +---+----------------+--+
  |                   |                     |        .       |
  |                   |                     |        |       |
  |                   |                     .        |       |
  |                   |  Device running new firmware |       |
  |                   |<-----------------------------|       |
  |                   |                     .        |       |
  |                   |                              |       |
]]></artwork></figure>

<t><xref target="firmware-update2"/> shows an exchange that starts with the
status tracker querying the device for its current firmware version.
Later, a new firmware version becomes available and since this
device is running an older version the status tracker server interacts
with the device to initiate an update.</t>

<t>The manifest and the firmware are stored on different servers in this
example. When the device processes the manifest it learns where to
download the new firmware version. The firmware consumer downloads
the firmware image with the newer version X.Y.Z after successful validation
of the manifest. Subsequently, a reboot is initiated and the secure
boot process starts. Finally, the device reports the successful boot
of the new firmware version.</t>

<figure title="Second Example Flow for a Firmware Update." anchor="firmware-update2"><artwork><![CDATA[
 +---------+   +-----------------+    +-----------------------------+
 | Status  |   | Firmware Server |    | +------------+ +----------+ |
 | Tracker |   | Status Tracker  |    | |  Firmware  | |Bootloader| |
 | Server  |   | Server          |    | |  Consumer  | |          | |
 +---------+   +-----------------+    | |  +Status   | +----------+ |
      |                |              | |  Tracker   |        |     |
      |                |              | |  Client    |        |     |
      |                |              | +------------+        |     |
      |                |              |      |  IoT Device    |     |
      |                |               `''''''''''''''''''''''''''''
      |                |                     |                |
      |        Query Firmware Version        |                |
      |------------------------------------->|                |
      |        Firmware Version A.B.C        |                |
      |<-------------------------------------|                |
      |                |                     |                |
      |         <<some time later>>          |                |
      |                |                     |                |
    _,...._         _,...._                  |                |
  ,'       `.     ,'       `.                |                |
 |   New     |   |   New     |               |                |
 \ Manifest  /   \ Firmware  /               |                |
  `.._   _,,'     `.._   _,,'                |                |
      `''             `''                    |                |
      |            Push manifest             |                |
      |----------------+-------------------->|                |
      |                |                     |                |
      |                '                     |                '
      |                |                     | Validate       |
      |                |                     | Manifest       |
      |                |                     |---------+      |
      |                |                     |         |      |
      |                |                     |<--------+      |
      |                | Request firmware    |                |
      |                | X.Y.Z               |                |
      |                |<--------------------|                |
      |                |                     |                |
      |                | Firmware X.Y.Z      |                |
      |                |-------------------->|                |
      |                |                     |                |
      |                |                     | Verify         |
      |                |                     | Firmware       |
      |                |                     |--------------+ |
      |                |                     |              | |
      |                |                     |<-------------+ |
      |                |                     |                |
      |                |                     | Store          |
      |                |                     | Firmware       |
      |                |                     |-------------+  |
      |                |                     |             |  |
      |                |                     |<------------+  |
      |                |                     |                |
      |                |                     |                |
      |                |                     | Trigger Reboot |
      |                |                     |--------------->|
      |                |                     |                |
      |                |                     |                |
      |                |                     | __..-------..._'
      |                |                    ,-'               `-.
      |                |                   |      Secure Boot    |
      |                |                   `-.                 _/
      |                |                     |`--..._____,,.,-'
      |                |                     |                |
      | Device running firmware X.Y.Z        |                |
      |<-------------------------------------|                |
      |                |                     |                |
      |                |                     |                |
]]></artwork></figure>

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

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

</section>
<section anchor="security-considerations" title="Security Considerations">

<t>This document describes terminology, requirements and an architecture for
firmware updates of IoT devices. The content of the document is thereby
focused on improving security of IoT devices via firmware update mechanisms
and informs the standardization of a manifest format.</t>

<t>An in-depth examination of the security considerations of the
architecture is presented in <xref target="I-D.ietf-suit-information-model"/>.</t>

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

<t>We would like to thank the following persons for their feedback:</t>

<t><list style="symbols">
  <t>Geraint Luff</t>
  <t>Amyas Phillips</t>
  <t>Dan Ros</t>
  <t>Thomas Eichinger</t>
  <t>Michael Richardson</t>
  <t>Emmanuel Baccelli</t>
  <t>Ned Smith</t>
  <t>Jim Schaad</t>
  <t>Carsten Bormann</t>
  <t>Cullen Jennings</t>
  <t>Olaf Bergmann</t>
  <t>Suhas Nandakumar</t>
  <t>Phillip Hallam-Baker</t>
  <t>Marti Bolivar</t>
  <t>Andrzej Puzdrowski</t>
  <t>Markus Gueller</t>
  <t>Henk Birkholz</t>
  <t>Jintao Zhu</t>
  <t>Takeshi Takahashi</t>
  <t>Jacob Beningo</t>
  <t>Kathleen Moriarty</t>
  <t>Bob Briscoe</t>
  <t>Roman Danyliw</t>
  <t>Brian Carpenter</t>
  <t>Theresa Enghardt</t>
  <t>Rich Salz</t>
  <t>Mohit Sethi</t>
</list></t>

<t>We would also like to thank the WG chairs, Russ Housley, David Waltermire,
Dave Thaler for their support and their reviews.</t>

</section>


  </middle>

  <back>


    <references title='Informative References'>





<reference  anchor="RFC8240" target='https://www.rfc-editor.org/info/rfc8240'>
<front>
<title>Report from the Internet of Things Software Update (IoTSU) Workshop 2016</title>
<author initials='H.' surname='Tschofenig' fullname='H. Tschofenig'><organization /></author>
<author initials='S.' surname='Farrell' fullname='S. Farrell'><organization /></author>
<date year='2017' month='September' />
<abstract><t>This document provides a summary of the Internet of Things Software Update (IoTSU) Workshop that took place at Trinity College Dublin, Ireland on the 13th and 14th of June, 2016.  The main goal of the workshop was to foster a discussion on requirements, challenges, and solutions for bringing software and firmware updates to IoT devices. This report summarizes the discussions and lists recommendations to the standards community.</t><t>Note that this document is a report on the proceedings of the workshop.  The views and positions documented in this report are those of the workshop participants and do not necessarily reflect IAB views and positions.</t></abstract>
</front>
<seriesInfo name='RFC' value='8240'/>
<seriesInfo name='DOI' value='10.17487/RFC8240'/>
</reference>



<reference  anchor="RFC6024" target='https://www.rfc-editor.org/info/rfc6024'>
<front>
<title>Trust Anchor Management Requirements</title>
<author initials='R.' surname='Reddy' fullname='R. Reddy'><organization /></author>
<author initials='C.' surname='Wallace' fullname='C. Wallace'><organization /></author>
<date year='2010' month='October' />
<abstract><t>A trust anchor represents an authoritative entity via a public key and associated data.  The public key is used to verify digital signatures, and the associated data is used to constrain the types of information for which the trust anchor is authoritative.  A relying party uses trust anchors to determine if a digitally signed object is valid by verifying a digital signature using the trust anchor's public key, and by enforcing the constraints expressed in the associated data for the trust anchor.  This document describes some of the problems associated with the lack of a standard trust anchor management mechanism and defines requirements for data formats and push-based protocols designed to address these problems.  This  document is not an Internet Standards Track specification; it is published for informational purposes.</t></abstract>
</front>
<seriesInfo name='RFC' value='6024'/>
<seriesInfo name='DOI' value='10.17487/RFC6024'/>
</reference>



<reference  anchor="RFC6763" target='https://www.rfc-editor.org/info/rfc6763'>
<front>
<title>DNS-Based Service Discovery</title>
<author initials='S.' surname='Cheshire' fullname='S. Cheshire'><organization /></author>
<author initials='M.' surname='Krochmal' fullname='M. Krochmal'><organization /></author>
<date year='2013' month='February' />
<abstract><t>This document specifies how DNS resource records are named and structured to facilitate service discovery.  Given a type of service that a client is looking for, and a domain in which the client is looking for that service, this mechanism allows clients to discover a list of named instances of that desired service, using standard DNS queries. This mechanism is referred to as DNS-based Service Discovery, or DNS-SD.</t></abstract>
</front>
<seriesInfo name='RFC' value='6763'/>
<seriesInfo name='DOI' value='10.17487/RFC6763'/>
</reference>



<reference  anchor="RFC7228" target='https://www.rfc-editor.org/info/rfc7228'>
<front>
<title>Terminology for Constrained-Node Networks</title>
<author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></author>
<author initials='M.' surname='Ersue' fullname='M. Ersue'><organization /></author>
<author initials='A.' surname='Keranen' fullname='A. Keranen'><organization /></author>
<date year='2014' month='May' />
<abstract><t>The Internet Protocol Suite is increasingly used on small devices with severe constraints on power, memory, and processing resources, creating constrained-node networks.  This document provides a number of basic terms that have been useful in the standardization work for constrained-node networks.</t></abstract>
</front>
<seriesInfo name='RFC' value='7228'/>
<seriesInfo name='DOI' value='10.17487/RFC7228'/>
</reference>



<reference  anchor="RFC8778" target='https://www.rfc-editor.org/info/rfc8778'>
<front>
<title>Use of the HSS/LMS Hash-Based Signature Algorithm with CBOR Object Signing and Encryption (COSE)</title>
<author initials='R.' surname='Housley' fullname='R. Housley'><organization /></author>
<date year='2020' month='April' />
<abstract><t>This document specifies the conventions for using the Hierarchical Signature System (HSS) / Leighton-Micali Signature (LMS) hash-based signature algorithm with the CBOR Object Signing and Encryption (COSE) syntax. The HSS/LMS algorithm is one form of hash-based digital signature; it is described in RFC 8554.</t></abstract>
</front>
<seriesInfo name='RFC' value='8778'/>
<seriesInfo name='DOI' value='10.17487/RFC8778'/>
</reference>



<reference anchor="I-D.ietf-suit-information-model">
<front>
<title>An Information Model for Firmware Updates in IoT Devices</title>

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

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

<author initials='H' surname='Birkholz' fullname='Henk Birkholz'>
    <organization />
</author>

<date month='June' day='2' year='2020' />

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

<seriesInfo name='Internet-Draft' value='draft-ietf-suit-information-model-07' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-suit-information-model-07.txt' />
</reference>



<reference anchor="I-D.ietf-teep-architecture">
<front>
<title>Trusted Execution Environment Provisioning (TEEP) Architecture</title>

<author initials='M' surname='Pei' fullname='Mingliang Pei'>
    <organization />
</author>

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

<author initials='D' surname='Thaler' fullname='Dave Thaler'>
    <organization />
</author>

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

<date month='July' day='13' year='2020' />

<abstract><t>A Trusted Execution Environment (TEE) is an environment that enforces that any code within that environment cannot be tampered with, and that any data used by such code cannot be read or tampered with by any code outside that environment.  This architecture document motivates the design and standardization of a protocol for managing the lifecycle of trusted applications running inside such a TEE.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-teep-architecture-12' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-teep-architecture-12.txt' />
</reference>



<reference anchor="I-D.ietf-suit-manifest">
<front>
<title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>

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

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

<author initials='H' surname='Birkholz' fullname='Henk Birkholz'>
    <organization />
</author>

<author initials='K' surname='Zandberg' fullname='Koen Zandberg'>
    <organization />
</author>

<date month='July' day='13' year='2020' />

<abstract><t>This specification describes the format of a manifest.  A manifest is a bundle of metadata about the firmware for an IoT device, where to find the firmware, the devices to which it applies, and cryptographic information protecting the manifest.  Firmware updates and secure boot both tend to use sequences of common operations, so the manifest encodes those sequences of operations, rather than declaring the metadata.  The manifest also serves as a building block for secure boot.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-suit-manifest-09' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-suit-manifest-09.txt' />
</reference>



<reference anchor="I-D.ietf-rats-architecture">
<front>
<title>Remote Attestation Procedures Architecture</title>

<author initials='H' surname='Birkholz' fullname='Henk Birkholz'>
    <organization />
</author>

<author initials='D' surname='Thaler' fullname='Dave Thaler'>
    <organization />
</author>

<author initials='M' surname='Richardson' fullname='Michael Richardson'>
    <organization />
</author>

<author initials='N' surname='Smith' fullname='Ned Smith'>
    <organization />
</author>

<author initials='W' surname='Pan' fullname='Wei Pan'>
    <organization />
</author>

<date month='September' day='1' year='2020' />

<abstract><t>In network protocol exchanges, it is often the case that one entity (a Relying Party) requires evidence about a remote peer to assess the peer's trustworthiness, and a way to appraise such evidence.  The evidence is typically a set of claims about its software and hardware platform.  This document describes an architecture for such remote attestation procedures (RATS).</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-rats-architecture-06' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-rats-architecture-06.txt' />
</reference>


<reference anchor="quantum-factorization" target="https://www.nature.com/articles/s41598-018-36058-z">
  <front>
    <title>Quantum Annealing for Prime Factorization</title>
    <author initials="S." surname="Jiang" fullname="Shuxian Jiang">
      <organization>Department of Computer Science, Purdue University</organization>
    </author>
    <author initials="K.A." surname="Britt" fullname="Keith A. Britt">
      <organization>Quantum Computing Institute, Oak Ridge National Laboratory</organization>
    </author>
    <author initials="A.J." surname="McCaskey" fullname="Alexander J. McCaskey">
      <organization>Quantum Computing Institute, Oak Ridge National Laboratory</organization>
    </author>
    <author initials="T.S." surname="Humble" fullname="Travis S. Humble">
      <organization>Quantum Computing Institute, Oak Ridge National Laboratory</organization>
    </author>
    <author initials="S." surname="Kais" fullname="Sabre Kais">
      <organization>Department of Chemistry, Physics and Birck Nanotechnology Center, Purdue University</organization>
    </author>
    <date year="2018" month="December" day="05"/>
  </front>
</reference>
<reference anchor="LwM2M" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_0_2-20180209-A/OMA-TS-LightweightM2M-V1_0_2-20180209-A.pdf">
  <front>
    <title>Lightweight Machine to Machine Technical Specification, Version 1.0.2</title>
    <author initials="." surname="OMA" fullname="Open Mobile Alliance">
      <organization></organization>
    </author>
    <date year="2018" month="February" day="09"/>
  </front>
  <format type="PDF" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_0_2-20180209-A/OMA-TS-LightweightM2M-V1_0_2-20180209-A.pdf"/>
</reference>


    </references>



  </back>

<!-- ##markdown-source:
H4sIAD4wkF8AA+19e3PbVpbn//gUqE7VRGqTlOPu6Ycn2zOy7HTcHT/Gktuz
U6lKQyQoogUCDABKZmJP7dfYr7efZM/vPO4DAGXJTnd2q0aVikkC93Xuued9
zp1Op0lXdGX+MD1Ovyqa9XXW5OnrzSLr8vS4ma+KLp93W/ptWTfp06rLmyrv
0nqZnq2K6qJNsvPzJr+6Xev6LFnU8ypb02iLJlt20yLvltN2W3TTLHh7+sWv
kzl1cVE3u4dpUS3rJCk2zcO0a7Zt9+D+/d/ff5DQSNnD9DSfb5ui2yXXdXN5
0dTbDf32+ulZcpnv6KfFQzfn6WOMmCRtl1WL77KyrmgWu7xNNsXDJE2b5Txf
tN2u1F/TtKvnwceiWuRVZz+0ddM1+bJ133fr6GvXFHP38rxer6mte1pUZVH5
YfK33bQs2m5KnZzXJb02rX95j54QrNbZZkNglnezbbeqG5rslB7yX1HR249m
6bO6ySr7UeD7qMmrRVbFj+rmIquKH7KuqCvasmadflOsCeoLeyFfZ0XpGs+4
8b9lzXpGa0j6A389S8/a+ape5lVxEY/+dVZVeTvy+LYzWHEHs851sHcWj2c0
3fq6t/zH2VWxiB/EQ39TVFlT90ZdoNXsHK3+reQXZtRqMOQzgnjeFNk8HvNZ
UdY0396zeNiTumq3JaFg1xt6LY3/bc2NZaXA/GZNLa9yoOirr05+9+DX9/Xj
b+4/+LV9/O1vfqUff/vgwe/s3d/+lj8+nT6e+XPm+qyr6bpe5GX0Spfnm+go
DjtY02qWedtFT5qsawftgjl8v6UVb9fTZTbv6sagwSDosuYip7Oy6rpN+/Do
6Pr6elZl6ANAOMqarpiXeXvU/vqLf/7976b3v/jd9Fe/uf/Pv5v+IM2FeP27
DJAeE9pktHUXTHFeNsU6T78KB+VGoE8P0wfo64sH0/v/zD+648V/bsdly09n
6Z+KrHJ43NvWx/mGJopTDtJ4Uq83W6I66em8yKt5PklfbpvFlihjRVvZtKBX
1o+gzulq+5a6j8bozeDPs2NgetF1e+ZgIJDRAYKnVUvgoZlM0hfZZfqqWFzk
6XN+PSvTb7JzOt4Emf5k/pwX3SrtjdabzfHsT3QI5idZS4T27z2h4zJ/S0Sb
ADoctDevsxnt1Nfb9XmZ/71nddYQtWjT/nhDxPlzVrQ/Od7c2M8qXxNDaXbU
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
OyyL/JrvvptO+Yqc5P8C1J3Cr7HiAAA=

-->

</rfc>

