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

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

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

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

  <front>
    <title abbrev="A Firmware Manifest Information Model">An 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="2020" month="October" day="28"/>

    <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>The information model describes all the information elements required to secure firmware updates of IoT devices from the threats described in <xref target="threat-model"/> and enables the user stories captured in <xref target="user-stories"/>. 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. The information model does not define the serialization, encoding, ordering, or structure of information elements, only their semantics.</t>

<t>Because the information model 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 could be considered optional to implement and optional to use, depending on which threats exist in a particular domain of application and which user stories are required. Elements marked as REQUIRED provide baseline security and usability properties that are expected to be required for most applications. Those elements are required to be implemented and used. Elements marked as RECOMMENDED provide important security or usability properties that are needed on most devices. Elements marked as OPTIONAL enable security or usability properties that are useful in some applications.</t>

<t>The definition of some of the information elements include examples that illustrate their semantics and how they are intended to be used.</t>

</section>
<section anchor="conventions-and-terminology" title="Conventions and 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 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>

</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="Manifest Element: Version ID of the manifest structure">

<t>An identifier that describes which iteration of the manifest format is contained in the structure.</t>

<t>This element is REQUIRED in order to allow devices to identify the version of the manifest data model that is in use.</t>

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

<t>A monotonically increasing sequence number. For convenience, the monotonic sequence number MAY be a UTC timestamp. This allows global synchronisation of sequence numbers without any additional management. This number MUST be possible to extract with a simple, minimal parser so that code choosing one out of several manifests can choose which is the latest without fully parsing a complex structure.</t>

<t>This element is REQUIRED and is necessary to prevent malicious actors from reverting a firmware update against the policies of the relevant authority.</t>

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

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

<t>Vendor IDs must be unique. This is to prevent similarly, or identically named entities from different geographic regions from colliding in their customer’s infrastructure. 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>Vendor ID is not intended to be a human-readable element. It is intended for binary match/mismatch comparison only.</t>

<t>The use of a Vendor ID is RECOMMENDED. It helps to distinguish between identically named products from different vendors.</t>

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

<section anchor="example-domain-name-based-uuids" title="Example: Domain Name-based UUIDs">

<t>Vendor A creates a UUID based on their domain name:</t>

<t>vendorId = UUID5(DNS, “vendor-a.com”)</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>
<section anchor="element-class-id" title="Manifest Element: Class ID">

<t>A device “Class” is a set of different device types that can accept the same firmware update without modification. 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 Identifier UUID SHOULD use the Vendor ID as the name space ID. Other options include version 1 and 4 UUIDs. Classes MAY be more 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>The use of Class ID is RECOMMENDED. It allows devices to determine applicability of a firmware in an unambiguous way.</t>

<t>If Class ID is not implemented, then each logical device class MUST use a unique trust anchor for authorization.</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="Manifest Element: Precursor Image Digest Condition">

<t>When a precursor image is required by the payload format (for example, differential updates), a precursor image digest condition MUST be present. The precursor image MAY be installed or stored as a candidate.</t>

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

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

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

<t>When a payload applies to multiple versions of a firmware, the required image version list specifies which 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 be applied.</t>

<t>Where an update can only be applied over specific predecessor versions, that version MUST be specified by the Required Image Version List.</t>

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

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

</section>
<section anchor="manifest-element-expiration" title="Manifest Element: 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. The last valid firmware should not have an expiration time.</t>

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

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

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

<t>The format of the payload MUST be indicated to devices in an unambiguous way. This element provides a mechanism to describe the payload format, within the signed metadata.</t>

<t>This element is REQUIRED and MUST be present to enable devices to decode payloads correctly.</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="Manifest Element: 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 algorithm(s) is used and any additional parameters required by the algorithm(s). The representation MAY group Processing Steps together in predefined combinations.</t>

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

<t>Processing steps are RECOMMENDED to implement.</t>

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

</section>
<section anchor="maniest-element-storage-location" title="Manifest Element: 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 and MUST be present to enable devices to store payloads to the correct location.</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 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="Manifest Element: 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 which part of the storage architecture is targeted by the payload.</t>

<t>This element is OPTIONAL and only necessary in devices with multiple storage subsystems.</t>

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

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

</section>
<section anchor="manifest-element-resource-indicator" title="Manifest Element: Resource Indicator">

<t>This element provides the information required for the device to acquire the resource. 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 and only needed when the target device does not intrinsically know where to find the payload.</t>

<t>N.B. Devices will typically require URIs.</t>

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

</section>
<section anchor="manifest-element-payload-digest" title="Manifest Element: 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). 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 to implement and fundamentally necessary to ensure the authenticity and integrity of the payload. Support for more than one digest is OPTIONAL to implement in a recipient device.</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="Manifest Element: Size">

<t>The size of the payload in bytes.</t>

<t>Variable-size storage locations MUST be set to exactly the size listed in this element.</t>

<t>This element is REQUIRED and 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>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 MUST contain all the information necessary to cryptographically verify the contents of the manifest against a root of trust. 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>This element MAY be provided either by the manifest envelope serialization or by another serialization of authentication objects, such as a COSE (<xref target="RFC8152"/>) or CMS (<xref target="RFC5652"/>) signature object. The Signature element MUST support multiple actors and multiple authentication methods. It is NOT REQUIRED for a serialization to authenticate multiple manifests with a single Signature element.</t>

<t>This element is REQUIRED in non-dependency manifests and represents the foundation of all security properties of the manifest. Manifests which are included as dependencies by another manifest SHOULD include a signature so that the recipient can distinguish between different actors with different permissions.</t>

<t>A manifest MUST NOT be considered authenticated by channel security even if it contains only channel information (such as URIs). If the authenticated remote or channel were compromised, the threat actor could induce recipients to execute queries over any accessible network. Where public key operations require too many resources, the recommended authentication mechanism is MAC with a per-device pre-shared key.</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="Manifest Element: Additional installation instructions">

<t>Instructions that 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="Manifest Element: 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 and enables some user stories.</t>

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

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

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

<t>This element is REQUIRED to use in 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="Manifest Element: 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. This MAY be included in a decryption step contained in <xref target="manifest-element-processing-steps">Processing Steps</xref>.</t>

<t>This element is REQUIRED to use 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="Manifest Element: XIP Address">

<t>In order to support 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 to implement.</t>

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

</section>
<section anchor="manifest-element-load-metadata" title="Manifest Element: 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>the destination address</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 to implement.</t>

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

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

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

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

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

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

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

<t>This element is OPTIONAL to implement.</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 <xref target="manifest-element-signature">Signature</xref> is NOT REQUIRED to cover the delegation chain. The delegation chain offers enhanced authorization functionality via authorization tokens. Each token itself is protected and does not require another layer of protection and 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 to implement.</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>

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

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

<t>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>
<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 does not know where to obtain the payload for an update, it may be redirected to an attacker’s server. This would allow an attacker to provide broken payloads to devices.</t>

<t>Mitigated by: <xref target="req-sec-authenticated-remote-resource">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-resource">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 threat.</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, 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>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, Device Operator, or Network 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 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.</t>

<t>Note: This is not a firmware version. 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 with fine granularity that a given update applies to their vendor, model, hardware revision, software revision. Human-readable identifiers are often error-prone in this regard, so unique identifiers SHOULD be used.</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. Devices MAY provide 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: if a firmware will not be updated again, for example if a business stops issuing updates to 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 authenticated. 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 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 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 (which may be independent of format) 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="maniest-element-storage-location">Storage Location</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-resource" title="REQ.SEC.AUTH.REMOTE_LOC: Authenticated Remote Resource Location">

<t>The location where a target should find a payload MUST be authenticated.</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-resource-indicator">Resource 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>It MUST be possible to encrypt part or all of the manifest. This may be accomplished with either transport encryption or with at-rest encryption.</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: External 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 SHOULD 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 parsed and examined prior to deployment to validate that their contents have not been modified during creation and signing.</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 validate 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-resource-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="user-story-override">USER_STORY.OVERRIDE</xref>, <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 from being disclosed during firmware updates. It is assumed that channel security or at-rest encryption is adequate to protect the manifest itself against information disclosure.</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-resource-indicator">Resource 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 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>It MUST be possible for a manifest author to place ALL information required to process an update in the manifest.</t>

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

<t>For example: Information about an installation-time confirmation system that must be used to allow the installation to proceed.</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>It MUST be possible 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>It MUST be possible 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 effectively means 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 Manifest Element: 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 (HeSA) 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>It MUST be possible to authenticate a manifest multiple times 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>It MUST be possible to describe an executable system with a manifest on both Execute-In-Place microcontrollers and on complex operating systems. This requires the manifest to specify the digest of each statically linked dependency. 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>It MUST be possible to specify additional metadata for load time processing of a payload, such as cryptographic information, load-address, and compression algorithm.</t>

<t>N.B. load comes before exec/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>It MUST be possible to place 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, wrapped encryption keys, configuration information, public keys, authorization tokens, or X.509 certificates.</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, without need for a general-purpose parser.</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>Any manifest format MUST enable the delivery of a key claim with, but not authenticated by, a manifest. This key claim 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>

</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="RFC5652" target='https://www.rfc-editor.org/info/rfc5652'>
<front>
<title>Cryptographic Message Syntax (CMS)</title>
<author initials='R.' surname='Housley' fullname='R. Housley'><organization /></author>
<date year='2009' month='September' />
<abstract><t>This document describes the Cryptographic Message Syntax (CMS).  This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='70'/>
<seriesInfo name='RFC' value='5652'/>
<seriesInfo name='DOI' value='10.17487/RFC5652'/>
</reference>



<reference  anchor="RFC8152" target='https://www.rfc-editor.org/info/rfc8152'>
<front>
<title>CBOR Object Signing and Encryption (COSE)</title>
<author initials='J.' surname='Schaad' fullname='J. Schaad'><organization /></author>
<date year='2017' month='July' />
<abstract><t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size.  There is a need for the ability to have basic security services defined for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol.  This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization.  This specification additionally describes how to represent cryptographic keys using CBOR.</t></abstract>
</front>
<seriesInfo name='RFC' value='8152'/>
<seriesInfo name='DOI' value='10.17487/RFC8152'/>
</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='October' day='21' year='2020' />

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

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


    </references>



  </back>

<!-- ##markdown-source:
H4sIAGI7mV8AA919aXPjRpbgd/0KrP3BpV5Stqu7dzzamIhhSSyXpnWNDh/d
MeGASFBECwTYACgVu8L/ZX/L/rJ9Z+bLBECpqtwzEzsRPS6BQB4vX777GI/H
e23eFtlhMimTk3JR1au0zasyOavmWZHA38nbvF49pXWW3K7naZs1SQ5vVjfJ
cfaYz7JmL727q7NHGMC/eZaW+SJr2u6Ie/NqVqYrmG9ep4t2nGftYtxscviX
f3W8wlfH33y3N4MJ76t6e5jgz3t7+bo+TNp607Svv/nmn795vQezpYfJdTbb
1Hm73Xuq6of7utqs4dntyc3eQ7aFR/NDWEib1WXWjo9x2r29pk3L+S9pUZWw
lC3sYp0f7iVJvZhl86bdFvI0SdpqZv6Zl/OsbPVBU9VtnS0a9/d2FfzZ1vnM
vTyrViv41v2al0VeumkALKt0vc7Le36SbtplVcOSxvAj/V9ewqdvDgCMdVrq
Qwblmzor52kZ/lTV93AKfyeAwuHUq+Q0X+VtNtcXslWaF+7jA/r4X9N6dQAr
3YsnfneQ3DSzZbXIyvw+nP1dWpaAFd2fX7qCJQ1w0LoB/vV+9f4ADqtvFW/y
+mFZFX+P1pCVD52fwvnf1ummxAnq5BowI1oCfH9wJ9//a5O3Bwv3+sE829sr
GTcfM8SSq7dHr7/99p/ln3/49vVr+ecf/9cf9Z/ffcv/PBkfH3gkT+vZEiAw
azc1jORQnoe9vrk6OZ4e0tLatL7PAHeSZduum8Ovv1418/Jglc/qqqkWLZ7R
11k53jRfF/ldndbbr7Psu9e//+6fvnv1+C+z5uD1N/sHabN+z4PxDb9ZZjIH
/BPuTStXEl9x+KaQO0zOdDJ6iFcfnqXb5PU3335Hj3jx+s27m7PT32C9e+Px
OEnv4O6kM0CAHzZFmdXpXV7kbQ5Y9pS3S3eZk2oBO4E70ySvgCLtJ3MmSYBR
j1lSp3mTzZMWdl1m8A+kZWlSZ0We3hVZAvc/aZBuZMlC6daGKFyyymaAk3mz
go8BSnmTpEVTJXiC9CmONKtKXCNc4blOe5BMywboUHnP3+lqFptyRhQQp6wR
40qduXoEdIQV5jU8qfH1pADKCW/9bZPX8G2zmS3hu56VVbDs98ljCJ8RPpd3
YYWL/H5TM/VtsrZFSI2SFKCYFQX+N53PcbVl9uQWmcJA24O9vYsSR1itgUCW
BGheSQdWCBycagbApg2uUkDxMhuv6wo23xDAVlmbjuH1FOncBsngCHAMXmU2
MVJ4NbM6v4Nd45m5ifJVep+9avZp9GoBNxKmXMPw6zrHFcC/8EbB2g8QGxo3
RzSgYTA83wrYSHKHA2QNvp6X9J6u6oBxcZXP5wVQgC8TxLu6mm9orr29m2hM
YlpmzhRgHM+bFRkxAT3gOZ5XPxY2CHTksw6N6mpFA7Z0eRs31RxX/uEDP2be
+euvBK2sRPDz9jeAYMCSqhqv0SxdIwmSL/Gnsfz0668IRQCImwYHCj7GNZYV
wqsF1sF7uMPDT7L3yxSACvQM0LghtLELTu8B9VEq8LsawUi1vreumiZHfAmm
C3AjWVZPOB9gHB5EFyEP4JSaNkvp4m9prXadbpy+dXVOAKCTN1WRutsLuPaY
zzO4DItFPssRa1YV7FewCs5ync3yxXb44Gk3M7r3KVCzOdKp8j5DENhd0yH0
oVcFy0Lgz7MF3DKaBz7L4doyoxvBoc8qvNZ4xeZZLf9CaWRDfAen6lsavFUW
W0eN4Bq0OVDmvb032QxONevsiVdEe2l2boZAF78gwB/RbvCu9IILLjquqaI3
mhkgdJ1XAJ1JQ7S82RRAPR7x4abpH2FWbYo54idSbFgBYn21ZlKHA+erNb/K
9MX8AlsYAZzXgDxIJWHQp2UORFDRJnuPOA44kibrtAZgbYq0hhMiAg87xLXn
M488/HXnKikpAPaha16l9QMsEyj01fTfb0+upscO8+7SJkPBkakG0Gq5n8wC
tvjeOqtbd3Fwhuw9YGXrLqqjPcjHVhXswayUMK+C0/ZHYNYoIziY4SKZPAwt
/+ji7Gx6fmx2AB+D3AzY5bcA69i9A2TgeG4lr9cz3O6UF5c3Jxfnk1Mhfh8x
CexisUE8BMF+lYVAYXJPly6nA0WOiG8J6epFvbycFZs5wj9FgMlUeVFsUHRo
s/iuESyJwPWRrruM4Uys6KgqH2EOXBt9dZPVq7ysiup+i0u1XBA+gpnh90aI
hlD9YckUeABtFz9KvroAQKWAr18BFhDzxbVUIIaxAkjTn2ctql6JvguLvGau
1uarQNaaFdXsgUeia42CCQJRMIwBh7QUv2uqTU3n/BYODz7Ee2meo9wAOwU5
AI4/BzqxytJSoIyHwnMpm19VQGmqEo60gFfhbOAWN0Qd+Zzwjqcor8KI1RMs
b7adFThJzBaAxLYzXhMsuGqzzqIyRfY5/6RLuN+kQP/azB3orKprgDn+hZKt
oh5IJPOspSOFV++qTTmHcZ9AS8lEYLRTkgw2Q2ELmaegKp3dFJCkAETHNzZN
xAGRXwurkDtQFNUTCwt3MGNBRA/ImJOIWPoGCTptCYmG2JsKCPMcNwfABtLb
sqgsu4zkLLfgy3RbVMC7+9aL35AMqUI5cB+QNIQqpUIUkjlL4E5mFqEQ3wdy
DUfdsiSVJl+EIuYXSD0imWrXHYHz83xx7RcO6k5WElso6f7Wq2xOgmrTwv8f
iSDdwOe4TjiCersGeI5I3AaW1jBR/RrQi86HyRrsL0fZFy89XAO/Nzc3IF76
wDM7oWXkF4QHwnI1srdw60hTvkyu7BU8r9rUy7kPQI/QkNIkX5zdXt98MeL/
JucX9G/lUvjv63eT01P3jz154/rdxe3psf+X/9IxCPwTnibBo70vziY/wy9I
Qb5Q0v4Fi+qWyOFWhDchyAGOxJuaveBA3xxd/t//8+0f4GD/h+jwcIz8x3ff
/tMf4A+8YzwbCUP8J5LjPWAHGbB3PFcQRUCABmWwYHWqAZpdJks4HAAkUOde
85eyqr29KWhI/k71XCO60OUMFHJeduqZmCGTCemznqWZnxgv3BQBK/cAuQPa
8DRK/ooS+yLHByr9WWLMuOG2JNs4TH4AVoBrPjlWHujm86Lmhy9l7vEjvz7O
57/u7U0ARdGQhtPWsfLHYhLcM9Fc49EZXAgjT1aEpLiJD4QJGoA6SQqFMxSM
RaoEdqsaFkqDvCwW4GXNnRUQFWLpV2kRDAqkYAhWZ8p6kmuALNzqLDnfrO5g
DR5AjfwyLukXhNIgy0r05YRfZmY0I5kgx+fMhNzn8fsJXCpS2ZLbmyNiJUCb
VmshlcIH7ovqDihFswVMrGGUxh1HNBpbZaoNStBbsimIDA0AA+KiCAkj6+xI
Ou6MvgeAz96TxYdZDCA8iZgj0L5LoFAFCtgkN1eqQIFYBRekalgyBzlsw1YK
ZJA8NZ0Bqrolv5kpZjGLQyYmLA2/BckPQIzTEPcgYlxk71+GUkgvcHsZWTxq
UliABD2Sfgiq2YzUE9heVYsejz/WLU8Vm1RUHWWVGL9mYwD+Dcw3e0TZmQ12
bKs5UXG8OUz+Aos6uJ4ewf/+/XZ6fjT9j1dfwnUG9Jo5FNsfvNLlHPAIbrS9
t/iMr637vXESzabMYUzPY83G4QhzUIiKLamffLEYkdFmi8aJlm16BBDH3ZL7
rLqv0zWcFez2niRcemNWFUVO0grfdqBTM1gFyEv1V6T71ak/LGBmbHBH9rlG
zMpZUGK9Doi+WG6B5us1/2Nye4t7IxTk+4/7/apRnQ7XTWeNPx6fX/ODZp3C
0CfHB8kFPK9FhfTSf7sFAexb/g7/+Qee5sDAk5Cnx6KSLDeAyGO49XPSZeRQ
DpITITryOipyd8DXAfOANM6WX6/yhv5BaAyycYMXFxiayFoIAZLsghUYxksz
LLNiTQBjwel+kzdLWFb7lGVlz3mu2TbWOU+GYjOEpzDn5eTm5M2pxVRadou0
YX/kX53c3rxz75+cntz8bD7BC0FLch8TW9wnmvxlMmUd7DA55rM8hzWPUZme
83G405gkSGXR+pPSLwm/VCnOGVw43NvjzZ3Mk3+hl//4CtAC5Bi5NSnavb/Y
D00oiDghtuqVwWtVtDkskzCflERCJbn8DaKbmV/0H1ol/PcVIS5g8zZZ5vdL
PJA7EQ72u6qH3ly7NIvnMOBDCXJNNEmd8TmTqpHc9OO24EKmNMDPTnvhqUug
lSPQNFpCfT9uLhZo5kVo6EV5yR8Kcn1WfUk8gycM7QRN4/dotQNA0hZIQQM1
5m+IuRnLC3VVMOqbvaLNkHepFiaQm+mGeQ5Feg0sFG+4zPdEliXgnDUq2U6N
ik/pIHkH6iQcSwRJ3DVsDhaDBjm6Tu32fztFBsgOOTpZAJQpleyG0iFpEI5o
gqwuRjWaakgmOSpS0HQDWj/DRyKhqTr1Bb33Bdv5RVf3d1tewrNX0yawW1RG
161H2ZjBKc8FEQokQDaxHLgFNU4+YDyxOmMzQ202JF2fxHxU5PsoprK397lc
JcUrjjKIEfrTSHAQy64DWkDODpJLRUk7hleWazS+s/EDwcnIxpyoAXr1O5Fb
9X6wRAaPl2k9f2JT32OOC4dn9aYkM4O47HRL8MtdVbWoc9Jl0IdXF2f26wYW
DDcO6CcyIpmI2I+ctNcAaJWiGCot8qwpZYHtRcxWoc40SVktzwjHLXLvCu5O
AvelJIst4G3JpM0bOZ0eMHQMbkRRg3HYAg7xM4eVoApaKHkxHUdw1wPQ0N3d
/xq5wU4fCw2iPBiVylmy1KIq+irdYm+HIHvJBg75Lr/foLj8lJJsG05Hu/XW
Z9JzQG9GDlFU93jFlSYx/tPx4LJTpSZMVJmAsk+YJWl2n0RSigaWWNvIf5Xo
knwLwoujvIJ/PWKLyGHJn9VjRX/9zDaB0O5D3NjJbfzBz4F/r2ammhK370zF
lA3u56KiYycC8zKR6HfJn+mEzHv6Ibx8qXugN39+wZs/o5jFCho64ZUd6ZKB
mLsxkUfx/oB3F8YWhtjgxiNg+L9e8s2fowN7fZjcroEeEH9RLN5xYj8dJKfw
AAQF9wpo08h4yUMPL2/YzOU+GPEYOL57ljy+PnBL+smHEnQVTbQ6o9WeWJO5
iYY6BKP2LP2zMOCnF5zrT/zm4+uXvAuLRDT4EWnC2kBglgFXjMIKBAYB673z
9LhguSMAwIj8fCqNxyOp+OmZL5AsGNSvPUKP3wN9AbYLkH5rgy8MlEWMhjGf
3KGDzOzX1L3hjQnbQMskLpCsGSsg5TPke6/UAA30tiJ/DVmUtk2brfZZICfO
46W82D2YBeOpQmzfIjHwTkGDYir7UWE0YCbJTaXeuZ+E5gCc5Ji82Ggn4YHY
FKsobd4UcMvIDV0TvP5kxO3BBOua/cmbex0o+9/8eRD0LJhHYJs5jk0wUy1F
bo4Xd//ht+el9PN3yRGB/Gj4dXMmeNP8zSOxIfOxFOQhdEtEYAVjHxjS2vvp
z8OfhrfoD4fJj+iVGRfpXVag06pXldejmrCxDs0Ucn8dX3sD+k1RNOq/o9c3
Jcq4+Dqa+NkA5FnJG6YR5LNjtYFCzoLIK3v4jSyIpngWASbPYYCAaNI5qIk5
2Mn4tmTQZHP6Sl960z/8XTz8m87wb8zwb5jveog95UXBR+oOlMQzpppNZq8F
CHee08GxuIPQWAFzmTxRQ75E1goS9NjU7WTCio3bYvEFsrJKH1Bh4CURpUMd
kkRlWpcbmA6KvT2JAaQDMu+pXdq4OBi32SCFYO+JbmbkiKIBmQPnywd6M6S8
X9YomDaoH6EcB3LhPf5+VJVsfDdK/VpfHc/ppV+FP+KV0EFIGAx0FXYFObem
+FxeIeglmmHU55BsgIF0B+aJKWaLV+ccABx5J27M6CvR1UTiQhMcx82oPxRY
zDwnL2jXMu+CQGyAz5AFkmTzS1Bkbq+uL6565XK3tiHT+ZUCjs9DnWOnGCHk
z0LBq94wcxYCaGI3rDc5zU9ebkKNaST+AJmXYabqL0XfcSxa7lxqbpw48FEv
lBcL74SdY1iP9QmZt1htwpc5VlmnmwXrDeRk55PHWIYc9dL3GnjRLuW6qvcP
napoXkOh26yGAEZChxO7UlZRzVscVuvWQ9EUKOVVzlrRSMipwksRUkHmLsCO
c/0ctLu9nh6cnH1/8MP06hq+uBakA0V1nK/uFT2aIWybvl/n4h29QQPNhy/V
3zVWVMvcK79G62yJybl4CRdMAuDQ+DbrO8ZxJITPHQno2iDq1i4kKQkmEEOO
/IhGWpJBJQBIYlaQHeRsZnaxMjiHV0OawKzB66CzzGcYhr2NZl2lWw7TvkOC
06yLdAtfvsoO7g+SxzxFjAH02CdEpBg84tJqQGty9Gfi8watmWIrJIHOxIyj
QRwo0b0L+xLyc41okxYuxJDHtPSUCGc5H1eLMQZ4HyZ5YP0gpimorjIzcc9R
Ykguf3SHtma0NAExXKPds9ngDdKYVRMLw3QV2A4gOqgWBrjmcvEey8QjDB3M
5xLV6U+XhpLC4EO4rCE/b5nF9KAyM59fWcwQTqQRw/Kx3l/QM1BYV2Mo26D6
TUsh9ggO4r0IYuyD6KOQG44Cw3R+j3EIGOiO0QHPOYsjBkgIzgpRYDgjN7fM
2miwWDHo8iVGBmTll5ufL6e9fIy4xBjN9WqcUkr09uLqbHIT0SHe6ODJcYQ/
It91mwEq9pzd2r0zbvAdci2gr4f2HQR4dIazhlOBReqDnQDwJupW+IdGn/lQ
KtTZZw/4X46n4mArvhnROuhQ3IEzLUyLe/SyL1eYgKBRaRTOHIY6wFJAN2iR
fMQylB2if14QdChprQuCtgLOinZu3C2yMY7fhO2h2VZDUyfxhzSk3gVahAsB
Flksuj/popW4Qn9gHGGDeEY0zkxBJ0lwtvG9L+V559Prm+lxhGlA0GB1Q5h2
DWIfst/TSjRxxjSLaA2/Mi7klX6u59UGYUsYst+SFcPBQm51mtznIL1H+oGz
LqeleCrY+4MBNHcFOsgZb9Zo8m5YDOIAZjUzqWawXm4bslfLyhNduTiTfhMS
wntzFASFtaWPOtUZn6UnpxdHO8iJDrPfMVffPFWds2uMcxFVnqpu2b7lNbxD
pNcX13LPrAmmx8S1y9I0QryvBWv1+Uzka7ETBSZ3F94QaGdiwJmwxMuqJa9Z
z85Hs7EK/8XF9Rf4n8nl5Rcdm/BbFH2vyd7WB4uUYpGAVxcZG+X6Z6+cp6y7
CHWZwcaWRq6rnPna3P0ghpSkKPIggVB/B28SneXPZynmQ+RoE0GSyjPIayiq
MW55CRon71o834I4skzOslVVb/t2v6DfV/T70MZJpR/YOT6uFgv0VMsNX4qz
Q4UepO1Aj0G0HHSNe7XcD9zD3ByCjP0CgO6clF66JvsQuRvJHYiRarroZnPH
54sqc89OSAA2iUbWfSgytaYLdIgYGUIB8avikWnUSELaeFt2FuESqiRaC7cu
ysY9k7ebFL6OlWCXyOhMrJ4QAmIppWIoqb7bARDyuPODNwfJJMx1iiw9zBWz
/uPDBfwlpkVA1J7jI/sDnOzs7fUNOfQuzqfnVm5aLRqDGcP2AtGDThj+VS+C
1fLWONe3Yrbm5NY4CSXQPAzbQ/Vg5s3nOoOIw0JMNe6cElU5oBJEZiZtmBh6
e3UC/5q4JD/4u6EH6zpHWYesoJ0f9YHIyvT8RRhDuT8U6yMkB80NGu6vCXFA
gWq4L6K5oabmWTxITfMIUwmfjh3+IU10ap/6F3CFO3nj1fTs4mY6xB6RH405
Q8Sd5HNaEBvy+kVpfsWb8QLQSSx0w8GwNdOcuYyGMUbmscoDXdtOCFvPJN2e
xHFvYElS7aQTnk3iiZpxI6WqgUXPWlqSU6k4JYNQxAXc8e03srVPnpi+z2Yb
gOtJOb4sKCSEORsj/2Q+R66/S4TqZP4tNuU8xb84Ssi6BZ1HKQIEeRLKNruv
u2A5SK6ZpUmWneUAIoMPqdQc1AUSWr7OfZDVLkQECnTSi4Kxlnc9PZ0exVoe
H8eg7J3/vdfA1MBz0cnxn7FGAXu42wJbQadxWpP5hD7piLs+3At5Nll6Ukoa
anVkRAqN8fen+Ww8NhHDPrRGlnmXS26TrpdNTACHg+RHCU/L25HjUJJGWUmc
FXt8JAQII+KyEu0/FIDOafxp24KQtJN6TH+a9ovVGSG3StTmTDSdyxzOfZlK
pkXPCcmPckz+ZYUZQV4oR2++enANgjBDuiXAGjRXQqIyXayqowfqBAKMrioW
LTACJww87S7NUtEmGJFkUAnH4LTeHbllmg0+CheFeJOTYt37eRMvh6wHvb9w
YCTIq5jYIHvvHhgiJOXUyTzdBDiDyeL4cGZRWakIW94yq4OHMlFFb2qoavTb
wsKVntz9NaOYAhcUkBxdXE+TVxTKiEVMfv11H8c8OruWh1jkBB96UPAgLK0P
IJnI917Ik2QIqhjhnoVrA5q/rJBLcdQa54bJDediHuHuULQxWOPH9ckgLruk
vC961vpM2lBZlWOnRW7NsFzYQzRxiTPBpE0Pdcxe11gyk3scXZYDhzoqjnNA
DsU2zjk/0Six5pwdVojxXeMhU3NMmjzDcp9yFxT5+gL8TfgHHxXBzj81Fg4y
QbkV2IhIk3MfiEW49BnV/TFwwchdNHHngTRT+DctZXJRLCik7ZMrOeDPNIuk
50psOA7xlKl1kH31TBc4o583KgUD8pIC2B2c2GTAUkfyt01G6ftcxgEtgS79
FkgmpUIDGyHpc725KzgoW4NtkOW5CJYKtdly6+TwRt16Ps64cytUksoxTPRI
cRoGHwuDA0QcNxxZBPN+luCAL16dfP/u5tq8Vef3y7axsgVpQ2e3pzcnv+Cw
sTpEN5EGH5IyJt6UmltJDv+oueJKr1DsTbBj+Y4KiZEWbr50eK/mBjYF6Hk+
ScCYGjjDO8nh5Qb3OrnEO9mmjGuV8xftVq+wHViRXj21+QqXG7rl1cZDVwe+
uUZCtB2hHeib1998sz/iFc03deyxaqKRmiVIQXMMfCETMqDsmisKUFCMZlPc
ZYuKpCMSWgR6vECaKxtzrFTVtONgt2xGDqesN5TuOqvzdbuvQd7DMNK7ypDC
W5URJevx8MkyZSx4Z4e5Ysh8TWh+eTX95ejd9OhPMZbjVmfLbPYwiORFnqLA
2IfH/BNnfbobzlzOUVZicPea+wsMhzQfJID4N/yXRGVf5uFuG6h9mGbShizk
OZONFhAieTeoT7MLQhc/TK+wzNgvrB/HcEKqWQPSDYHp2PK4HljZDRDA1LAQ
skJTjCB2yQDDqdln3OW7xHHVbjTv8RxaWYk1uWf0TBRyydi1LqqtKZOgaEvx
boEQRDaULJKOnNb+j7FITdk3hlflxxqT3XstUpl7a/zEb8EJ6Kdw7+L4cl/I
bAv8DAsiqqaQ+KGQS4mN3TyU8YdNXGIY4kviTRbVHakzUjEEI1WI+zLItRwK
eRRxpiCUV2i9izwSuStng65bGRKuMPn8L7HnTiyLO32h+y/Am4X1WjoUGA2w
dFTxjy7O38LdA8Y+idIM2FtDRJHwm6KNh9Dhp5NLNaP04cH7fI28F39mi7dL
qVdJHwcQ821k33VJdWjoSWQUlHw45y5gnlpPS6RhWVBgaGjg/pcPjAgA0bcm
XgJoJ1YgFE5VEHFwUR2cYm5TmTiBTfwMRDkX5OURXKa6NxUJBFg9LhoZBSdC
SXpRrNJmkPhmeG/MyFu8eJtCqM3UWMWjgCX+FjFHu21A/dhwioZHLmUjEQ59
SEHmSX0B0KLnq+AyWx9JpzofIAND09ZroBO3PI3hI/fWzcLub9GASjTNkema
FHgSs+WPOUkLXOek80SxDSNhgwRLs1T4DSMTONiApRP7G3vKOLvQP9+7UUvz
iDYkvvY57gv1omq9lQo27LciERMRAlWulBwbHZ8x+d/wHcxJfORMLefe5Wog
Chwx9xptRPmZJ3GjcFscz+p3wxGCMABuCoMKTNVLXP7nounpxcQGCCCQBh0p
m/J5xETZ1CJm96NBvET0odoUfaxHKIL5SDEx3e6U30meBtKxHa+rnOtrwnEj
yeQjF2vTA5Y5LSgRAg5gTHXfyGp5mpeb9652z2fB2lghEdYIquecFMPOCbE0
6otmTTvNdLYYqLNraYSWqWHpjYrl3FpuMeTPFYMCug6cBu4JyGsUJej8Oq3k
CVMQD3JW+YhiWlaoM7lICT2oTmp1Q6bAsLbqQMTXRx3D5eTnCOtlLc/agI9h
ynteyNESJZ+e44GFY3Z3vmrkhP7ibF99koqzGe13DG/kZ9UiZHM/9Qyn1hCZ
8KkWbc1KUGtmYtFwGZdh5VkO1Qx+b6uHDPOOqGwS/YGELisWEjvacmATooRz
Bqp9Rc1jGAxaS7KjFItlm6wtfhAvm2QRvefG1O2gQxKLC6ZGZcxVIuqcF6i2
KS2FvED2lc/FnGPg599P8AODPH4ziD8+j/Uo1Pc/fAk0D7Yz9lVMf5UwS+QS
dDE2dyg98vs95VM5oXwUaIej3oJVzSiqVRmUmeLb3ujhYCRvQJT9CjkDxCSV
7CymJQWsbMVr2HZQLHdv15bh0ogVh6tX2sz9O3QTeVCIXic2RrV8skWvFyBe
Q+XE/bmak6qo/i4rKVkxl0/I+GoyoYNAyt6plDHR/lkHQmv9wc3B1cHJwfHB
9CD58IGrg2PxYCm7obeOgYdkHH1eohnPZiCXsThA4tX1uqoWJMxIMQt8eAOS
OFNYth8DqcTHV9l6g1XxSB76XVAobZ43s6JCjyv+chx71vDhFIsg6ZbXALkc
sD2Te2TRUuzHXKLWFF8uNEaYDq9Oy4Z0FpuwIPHU5H3I3mMEWo5eSUdilAry
IQEi4HG7ise7h3xrTV4OdyqUAXxtZJCqONlXAwXZyEzootWuMJUpwO/jjG1n
HGiHsVc3766mkxuS/Kc/XSINP0wuirlv1uAuA4fYIw8/klOeSe38AN6XHt6T
Uvyc5Gkq55xTWsw5i5RjzsPikd3fQ70oDF9no34tVcapHE1Q8Xyr5Nb5ysLR
pOIKpwZgpbfULJg9vkWV8xUOx8VLh45LWzPGSHmIagTvaQMnI1BSF4ROgIt2
1c38RD3bkDIGrUFfjcTh8RlZJ6enCYZ2X8P8Z3mb34sr5SOqfvXhw8HF27en
J+fTBBBjsSAhUzDwf+7GlHHFr38ixrBXPkhFSTEfAUtjZiQ10FrYvoMZJ76Y
bL0pFdf8kUvWDAshL8dLWzz0RTgaTjDuwT0UHJ4srzdJbKjk4e0t5vYFKmuM
SccYtpqkj2lecKsBZ5n63LtgUGzwPsQY729iUCVKwiieOSi152zKlFZBOs6W
Shk4QjgRSTuXvNGWcJ9iOAtzRGnjgSS2W6lIQsEiyYovA0mTpDr5e8TG4oaN
KxoPqnesWkn5OeGOzlo5gwVjLegwoUesxybX1PkdPYeUSCZxA7JPMSgxjDFA
Y4nMZdCTSsHVYusN5RuXhJS+fmKikaItpwt23RtILwQMEpXOo4/YzrXFxUta
lKzCJPxwQh85sZ0HxY5+kFwwbrE0DUiLCRi8c1qK1FT0G+J1UmZeXmZRrhWH
dVnHDwYcY1SIFEymapTE8LN630V4N5r5aY5bIqT/29LjbhpU7DV9gTtp1KHc
J+e+9gx2auGqPVkfrQbMcyUtegi1l6+uVb7q4eq9dHDkYkufarr0W67NpXnZ
EudJUQriW48rjRi/no8nwLtKPhEuK+ZGjCvYNKyUmWxN9X9XTY5WMEoKZbrF
pGhoRYQmtqWIW4vGxZKfkQzH2MVgjF0M5JIoexWxziVfqGQvlcg4aomG4RVh
ufY6uYMzeiBY0mXAADMvv0fNXQYmoIJ/Li5DqW6RP2TcOQH7O2X+O5gWLX9c
KXwAa58rbET46Gsq7u1RrKMmYKHdWuodjPrz+0ERnFe2QhzIy3Op8JWXO2uB
utT6rfjNMBfAlTByp0mj4nhsr9HiBDSDqwQg9aRMCisdTWOylpGYuy1Q6gHm
7gctWUyuvlAcLfaQCrtxwxnfnpCYvpEmzAvrDKOq1APgUddXq6CcVQIFIpSp
lYCZYuTgaUzxQaDXBDGHQFQIywGL0yx4WaOBdam7PaqBFFQMGoJNTMI44ZC7
UoXxmXD1XBFvid8UyrJ2Bkglbi5J8WWk7cTLND3ThLmlMbHLOceYb691OCo8
0ljiQtKrKZvYX8/8bSTC6COuKinXtyN0carH2hnNNI6hw/wCQVsLM3bXboGg
kUcZWyLCZeHWSTzMenVvCfFoGe0KtJmv+aJyflzKAfYa8obLHSY/H5XH2kGs
04sjsob1oZZAPfQgihmAmVjhUwwNjpmswo/EMjdjBzv6p+U6s7a2Sdmh6MQ0
IitCD/IpgnGpJ1vIyPIht1LpORC9+p+HcJTg+1+CZh+V3iiYdj69OQDdGfTn
oxtM5+FeFwKxvHSDOCxbVixXO7zCbpS1fPfxeOXsUGGmiwQ/WPSOKm8IGaM+
QDy5NNDw5/dVI7K3cEUmSb0ao2tLVJNh3maaapOe3fD/xBSa4BwuzkFaeQf3
vU4xW04KF2br8B4jvKsSFa8eaDvb5YnYLkex5fKYLJcWy9000utNZidYuowW
K7q6L0lZg7uEAih5sufoW0DtmJyRms9LQV5KjjXOMPAz4kCtZkMi+0JXt4+A
GvmIEeo+sqH6zZhnyWLULF17WzznX3JXEq7MyzV3uNuYabXCBg1h+S5Algyl
VP0XTffxomC6tNg2OYvz0SajvY004l2MESTVYibIiF9mgXu7G7FeFNn6KfEy
cVHPT0BgM4QEbQ0tQUK3BldwNb28uLo5Of/eRufSScIpdlkjvH46OZp6T+4V
xxCSicEwPNx37X/6RPuejCD1K8l2/lRSqI2RLrjygCNr2F+LanWzv40bJESh
uJZ7haKRxvNatf+rhjiL5rrRU+Wlzt4T29gFy/WueRm6pyq4MbaQhySta7o5
m5YR2JVqUOtiJX5AsXX5zksSru7Sf3xl61SzE7nez8UiOULLwNf6163zF32y
KURsinuRIQTLcUUf4yWnYmXaLgbtJ0FZqt/EdPIxOVIBlp9fnFMU+mFyW4b5
ACesSwWi3SZ858W4nnydTIDqYwX8hllzGYLI5NoDjBzCVz47fITqHCL3elNw
FU4hfMq6kTdIhIqDayYBbFqaY9BD8UnEMQDm7eXxwY9XF+ff/+KqoyFMXS2R
y7BimwEsCBtjEmx95bSXiDghTAftUKNOAG9gxHduBIrddauN6suR6Ta1UhLq
fqZablyPLip+lxXAxLTqnRgl0DPbLapHtfidRb/qyWLuGIfaZVCNjeT9yHky
LGJ7fdSVdzEdZVjfiJfJk//GkndMNzel6jBE9MSo2FNG0BVyY7nU6c1m2SyT
cgdQDtD1cSTiuhFCZr0ou4nNx9QADC7J7fnk8vLq4gf0rQLNQUviY68xFu/F
xr3wkisxGmS1NxGJ9Q3KbM7+CNNdqWugnEHRwom3eAocvpD19qwG7Uz1iLsM
6E0OkkscRg9U7eKpxOOVTpDa/ZG4RqclJInAFX6AP1fy2LqZuin43cwdbKtB
S5tlNf1XymJjn0ZBAPinE2zJ0uZ2wMZAktvZCMqyr+vlDfLvK+4NkCHqUISm
+9glmTVZGMSBJ8z6j/PPOHeilHVbbIoF/puiODc12koJHjUlpZBtDqV/LL6x
TVQ+SK0pAMSYC4UdPqU/vpKeJikRuOgUiAQS45ZtovbNmoYsz5+sa+BFmIk3
yHNxgk7ebqiO7hB5wCJ4vuWGd3+5Y0ad09dtNphGi+D6/7ag1xNFUPrIX3fu
qn0ESfcu6e5kEQ5MuyOWqysSacRpOLp15wN4TItoWLeLjwaLdszEMPZWpUpd
bBCr7vxpckPMrcBzBKSZLVPuZ++A57wb8PZbuQZYfPYNa3dHI2m83NOzHasG
er8JsNHNIqX6LvVIgtBRGMUC2DIwjqsSiL+L2wC73fK/aqIbAriN94oa7ejF
neX1bLMCVlX6Vq6eoaG9m+giOcTvqWyyC7eR4grqcHBLtH1DTXWHpEkXWbsd
z9D0TiW3xJv6tMzkroUwMJUncVUGk0gdptxOygtSSh9WrRTDmwR+sbeTbS4z
yqMqcT0HUigImEyFmVY+HGiQSspQklDgQuAdOWu5zBWjv0tFkEWGpViZfMuA
9p5JrYsOjSREZspk6ir6DTpPeBAFAcjxtw1webxpATjIj/u0rAqPRXyBI6LY
MaOakpnD91Y+6oBRsIwVKtG/fJ1ITfGPVxjSNjqf4FiUStBGpMFWL9BdMQkU
4pbemKID9JzDIn0EvGPB0R2xK6Tc2GBqSwOfOQixAc6ze/K7kbWQg/nxMnaI
6m9yJn20tHsWATgoynenQutmZim/iQKztTun1sgzJac4G48DdlVUmfh2ZM+8
+aafGOIqamrAqbCdO2/uKCmyVMIllY4hbJzCMyycPpOATfLr0dH0+vqXo4vz
m6uLUyu/kkFjLEpi5LnFGn1nmpYVC2yuWsI1V0uIxAsiX1yQxfkggKmshCZH
bzdyQmzyp+VzSREqh++O8W4jFpHuYnq/Z5w27ZSwlH5OJWPHImf5zn2CV43N
vyZpZdeyOQYn9LqLCOEQg4LJtzq+DfZxmEWc+A3d8I3j+ZFKhxgk9nuT9Buk
N1YGWX29emd/cooyLbNXOTYjvPFhXeE63Qsk2obZ3kH7NwcmX/A+LPjdt26S
Z7h4C9wgR5VcHocHanjbIlee/Z1J3BOCF/h0EURDO3H4zVcNt1Pl6E5xgszz
BqmriEKkpBpCifgonnejQ3qrXLfujwk4QTQZDr7wtr1B4dGMZWp0WfcLRT8E
YTTzbJY3vuaBr3m4Qkov8p7TySJy8PpQL3t8/5gWOFoRXxMgXfpTcFOMbJIx
MvlemhKjoXFyJZW1XW1KLt5C83GMPwodIPGh6GTLMRmBbS4nileVTjJWhRiv
Q/Gl5zUqMUi9lgzvxJa7JHn3jkvbJANNE5US5Xh3Gw3RN13HxsUc0CwhsEU3
u3cZ63F6CfqUcRRsed2hli+fFHjbnIiIiMjSZafQFdd2QIO4V11FSv/RRVw6
ns5Z86Bu53C3YBvXR5PjiQlvjOz7q7zprEwLaih3DwjUQcccfHxyfXR6cX17
NUU/LQYJZ8kUw7cy9u5dLLyhhqv8I+n6IQitnaj3KjAd+0yFHkvOgCHzKZVa
MqtqQ5Xn1HVATMSE/1MJTxBc1hpFJO8tKTuwIc85QDHTxlZDYb90PizcNdx2
usHcQ7//3nAXtrzBpv9O5Ach4vs7RGFpg3LLp6aju+MLqkkcJhdcOIK6qakq
F2cpmiMKik18pA9LMtAozYWEVRUMEVQaKkWxYhjkKnOYyh2v/nJ7Pb365frm
4upntwPYPEbLUo3RrS+Dsc8J49g9jK2dnRymJBQJfCyYX00UDqI+m2gfbqmS
6MqFCBFFsHpIWMKPma7URCJWxvVG8Cmely8k6UoQqdtiIRLXbFkNZku82epi
yPGhp6eJl76O4FDtl8o4VXgjo2fdTs5KvcMS/DGSdICo058uhcwcGaTuYCh2
7yCiEWFqJo97MNWmRx2b9ChkP3k9F7uh1m52jj0yDCJb4XDYALOcz91UoRuA
yKf4qHtyTW6uJti5BFOpOQ+dPL9MbQKySgvfTVHJdRPsnc15UiSEyz1LuTNb
TowzubmVgDiexaPkA3Zc5hD7dt0UM7bHat13dXzSYKGl8gHZaYvDa6N1jLbn
GmthoPlztPPs8nR6M/3l+OT76fVNQDvvx+oAlIKwIcj/NP3Z4KPDOKm+i+vA
XGYPd0wQ3oGAu0DPKksjZVaQCFEdt5KDi4xHPeXW1EFDE2J6767PrHsTAS0c
y8uJqaZj8hEDpc7ZkeENpvgc652pcQCXkzcusWBhCYbpJyj+uOikdQFx8h4v
oNrcL3mxTyrh7FpR19Ib0HKJRfb1FCo2DGIIFuJu6YK01Phdgzw1CjzOFJrq
6tox3HgA0cxKSxtwVhsmpKX3ZMGcYdtZI4JhmRVzf2xOBuNT9kxJ4scG0Rvx
8/Lq4mZ6ZBKXEbMREX2Sdg+VPbs4Pnl7oiGeZ6aFOELcVhRQFkJFqXXXQQge
F6czQzyP+pGTPy2YivTNqxXHTOrBqIvhWna1D8t9ApTw+Lhes9UFWXPuIixJ
cttQL/Ox350pejYpXiN8nahdUDhXdsk/1ujqQOskxpCZYqts57HbB4qR1W1E
R5+b3Q25G7Qa2Bh+w9dHZvOFwKNcXANTBihqXEWkiFFGP3vfVutNy0ZmxS5V
jDgXXHpbulVwv96q5EItvswXw6NRdiKHJs259ZbVGRleZpLDYnn3P3YbLpSL
zG9mFby+V8KCnCTps2p8FNbAu8/JHSY1yksbnBYVvXpzdWs6y7iXhf73kJKb
i6Obi9sdRERroUYlOLmKQSy/tRWIypuPpiAa/GluIgtGTFeD+KVXQfTXPikl
wVUg88orExW2b1hcMC3L8ohjWo/tCQ66qThUIKqi/KxoGAgnKhCKTNLbRB1F
D7WMj62vUEuK95ZL4K4XNXeTo0QNMujlStZMAqSvn6A1K4htffgQVH74VcwF
cfo04gRoe1UJ8uC1JHgl5xss8owrj1OrYdEXWGjgJXlumgO0FZa/wlYk2uMK
lcgnnxfkhxBlxvkWpdMxHP1M0j3rDd58X/wwqO290t1QcEVeIhXiVk66uZI3
ZyshYhUtRPPbm6MkW1dYB0JzM9l4X1H9Byq1/NLxAT511TRc9FYKC+cl/+kq
whMb6J1VTYhC7G2p4ZZZDLHOfCUJVltXXF5/poIQadOzcW0GQV9I8lVUObqz
G6oapMEaVGmsvKvSeh6/iQ0nQKY5dEZfignrSV0/0YLiTvaKBkomna9cPH9F
6R53aCXCOmLaGZ7bxwcOBXJi9uTOqyZfkLe9uwklA1h/pltIAGhAWCDANk9R
0jF4seBrV39IfhnzxPvhJbWpr5xgphFIlBFkur7YuxpkwQZnzShB8aze6Coc
N0htA6itIjzh7Au+7WWW3NdpieErFG7DQW7cRSyIa2u8LPIo65ciOkvAnSeu
WPqYc+W1plq0waOD5N0GDhOoZjoned40n+LiIMA/QOGs64qKE5SZa51QZ/cw
AY6ZbMocYBx8G/btHD5tm3zsj9zmGfedu6QCnhz7LsXmxKX5dD5Hrq6dsXvf
pAo0+GKIFICCfX1RTeY1lYp1B+zLlQOVk+aiahLgI6MumP604TXfzkR6mc6A
ZD0kr5BwFZytgQHc+xJaGryUR31O8Qa+7SxGolajXpxE/EbW2WxpVCDkgg6n
sbHaXrWQyBkJJ+v2+fz/s3vpblLlap50aJYWNenD4Qi/+kqn+YVECOrirg+T
o6Co3MS2lPnQDTwViShuweM7ICuLmwP2USAjuxd9kUku+pGl6hRUYGvpMpDI
c257E4ibYdUPr8GoMa1bCkuakdkuc8bQ4ob4qgl3QxtwvXvDXWD+OlXiJ5YF
bGoJZC/ETMKOlMtW9q/U2LoHknttcTYXkyVw8QXfJI2rpxmSn5MFNVeZQBhq
ZygkF2dY5/Y+8xggVfwkXaV/pjjNE8UdbxzyqgtrzGqA3Ln94duiqRSGzHdT
JpBkd7Lx/Bc+767vSr2wDiFMEbbI6i2wHHTI6rl/Lqn40MIcMxlkbFTT+u6g
STiW6xinpL/iqEkRxUwXSqoAxn103U2NrllHd5dIB7qfmt/ZaqCiKXyMBUN9
4k1K1WRJJABxgtSBoVKVA8ftmgB30uv7ji7s3Nx3IPLt6FM77305oD12D/X0
4ig+056msc+l+MrZxsnYchy+fpA5Ao5aofaL84HzHQS3ZqqHAO/rPOhuyyeD
cSBnMQbaFaegufaEu4DXl9sYQ1CbvwsIhXNTPz5vQvwIsNm065DEqNHvs6hR
ty1jH1p32zL2ARlT1w4ZfTPpVzeEhS6ZTYkLQ0sEcik96mPcRLarFq4eua1d
FZqMFMacP5uWc9+zYAArJUnUImWUD7qLGLyYOiNRgDX1k/2/Z30QNVloIdau
u4loO/J3flU7nMhP7MYP85BsTW/uQ0VRs9zLSmrSd6WKOKvKZYXJax+B6D25
d/5EetLres/ELYfjWtzZ+I4E8sIOlqm63gm6fWPAi1JH2QaitPUDPwiNEiy3
uicHqwlgvdUrCKjqhV7QnxGLt3DBT9VE+yPz2cEWxBP+hurum/8EdZdDgg+T
Kw6FFd44pEtwwOyvYQUJtFWgedRFc/qw2rj3F/bRzmoMLKQ8MYyqlZfdmcwI
HKUU4wJVF/uxLIKXR2pX1poA7i0r5x6Em3AhNY0pnl41pqcLtt94WXJrUElO
ileEQnaPpzZIw0k1glS8IjZJzWEa6aRUagmm4+icZpmvGQqSkvPvHGMqXNL/
Qj5Yn+AjZ2QGwZd6Po6OjRKpsqCtXxwsyOuIAwNHmqxE5dOM88BaokXV99dJ
ww7dgcqaKMiES7ktO0GjzgzSCU4cJIg+zzKkhT4T5zNUjPCC9cSu+bIJplfO
h93xbELqegtUc4ViukFc5L6n08uBnWuZFWx5X2McX2nDU+iwTZFJcfVgViSe
Qa2pB0vXqXNAFfR1RcQL75KH7c6CffgwyEYEjIaKI5PKGgULoleGgid6IhFN
okmoy5IeBNM/ZlKAs6/PNUd3cYWabnUS2/EHzUUxoIfJvw8fDcV0v+vPkji7
bZd6rUqdtksxqw6i1oBNc9TNkUTtfxiIYvscltBKiU9hDVlM7h1vEPtMNje9
YLVllxIK8UnQ2IKDPhkYi8k0AedAwhru8BQHfDU5OsVu1EenbAk3aeSYMdfM
4J7VeYWNzL+l2Gt4U9xu2nDTBSLGhh3R7CVmcZ5JAwHXmoigcrD3emBc13/L
iD1faxsX/wjwMa9dH/anGp2DZXeWPmQNgmU9+oUt10afT0+PipwJ55zDQUZk
iJXoYObHxnFskbQvkNA1HkP12XnbPuyMLkSs9cK0r8ZS6b0mkkhFdYsiPkjT
ocXJLQXWnBFbnZTg8BXcTUsy9eympAPan3YciYbhRUei0XafQz2m7zEUDMhx
T/O2r7EclmxBbSh9LC4IMTxMfqScTKsvBCyuE3YoDE4UHNFYuTY+1aBwdS+a
dTqTNO9F/j6b93cDP0he2i0cD6DONTCu0zScqsZKKpHru0knL8yz8fW2WEyh
wlc2NUGlGv6F9mRKzbIWHdru0B4X9QWzdIwEw+7mie81PsNDjCQSz+VMt9Jd
6ZHVJZMpFduyYXJUjcpUNyGvL1KslQHMGMVfIMobV5O7zjC9nvz1eEq7vCc3
V5OQD1JI7fMWgf6OeLsMtq62lTOiXGllK6va6DNAxOugxFlcVkwD4aTKkiS2
eKenCb/ksMlQ0RyFApDvSewjf1UsWwXxRJg5IcXlhBTJAoctXDuJgIVRGEYJ
Aqprh6MXpxvx2x9piXFLnV5HnPfBn39tg6BMeJ/1G4sZVLMVSq1TQ7q36ZEM
sJKEoGyuaD8YGCw1KfN6fI+Ube6i1dx9pj00XrowEVYcnKyiL/WZ3Nv7E26t
f9VYdoKWXOSrXMrC1nnzwE4UH+PLCSFBI+mM6gb6xtQugpczvznYzi1+37k+
9Xik9voAWtiAbo8YNmx7v4/ZYvTcIdBUlsDMobmgWN+WtMN1McgM8OKs56SB
wTbiycYjo8ZefUNi5ySdXEu55LXqIA2TRJcM6opySEM5HyxZzhVOOzitDQ2O
uK29kn2AkthBSt3gHBMDK8IMDSPPyse8rso+gMkrv7IRYZmjmoO4Yzq/eo2c
8utcIFHl65agz0azm7Skjb8kfddupmvONDTbLtInwStt4IaCGEYugZzGTjBw
0zB6SSNa/NV1caNBkLqEhrsKpb48SB7UBYGrkmWfdoL7/xgsoEjGQ5+x85Ct
sQD3atOSCKPhoHQxTBRoN/ARUOCNmj2CpnVO5pDsHHcaXp7lCPvOpNTc0VrG
2MUsXOaVegQ4NJZtSS0FhPrf4I99cqmvuDonHMf9JkWdL4s89LyYRd5qgQlR
qknYXAEDrSnTw8W48COPRl6/5l/Yne21ccFdkEkyMQL58DTi2q72KjXEnJO7
3ARHNcSH1Z7oxg15CCejSrYoX6x5dre5v89IhZJYXFPruFt0ysaw+2YDbKKg
XmeYudHaskAaZtEHS1ju1eRsB+pyQHKEtBxXzKG0t9hs45qbrAHiuWxC7oR9
a1qwuWAlV/8OUWGGTcZV3nT52HBnFxnRDuo63NuejW+LSWo8gasyOT2l/17d
kvxxjZlqJtT1xKbrfbC5j2I6HNuEPozP6jFUjpITSpq11YZXPp2B9TFXz2FH
vqDmg52Qdv2QZWuXSTzHamdFo221VlvnNhN/OSWfDw+9IvvtXUZt0G4bdnhS
zZYFmo2XHNhk3RSU2X5HkWFh1iVhmnJMwTQ0AxDn+11yXEl/Q9LrYP336KXC
Xy6xXQiWlQnCblBKmVdS0oSWf0Dt1nyAzlq/m6s/zPVHkGZBqsvb7zDWXIpJ
rUBkzqmi3MhmdHJEb3k/rjclC2Bp84B4dA0AbKRrR9y+/AXNUDqISB++nZyc
/jKdXJ3+fJi8hbNMplitJ0S6BTwfZ/hcUY2bH2q5LefWdfXgYI0+Idsh4l06
t/FqOCzRPJoxbQKDBFWeqdEfkGJCIIAEgEnUmQRMYt2bFUXtlvOnfN4u/wEQ
6mRQZ8DPy/HOHOqeROVdF9Q1LZCACE00c6nRiGolTOpEG2vEjdvBhldVS4+Y
W0+Fr9B7CaJ3sfXBUhxYH86bh5FqNhATm42yQdncbJb08XSQNFKiVFrOltis
Zeuq97rJlDgI02k4KcGXyZSFcKCuXwZRir/cXp306sU9AQaHvBOT+xW7U8hI
S2lPLtXLZjzB5KD5E83iAl9eb5UIO63RwPbw33l3ZPOiyanYjqHEtqpiVfbC
OUwyAYAccxX9x6wXLH5ww0AW1ctgAx9rvTTLFNSnKCKSXSGt6JJZBBKw6zZb
95sx3DtwY+Cd/UPJYyORicgj3HxXhIGzRCS+CKtbFAtb78+V59JaYsEd8nMl
NJemDDQtitiO9ATVd8L2tYtcToe8QOqEk0qqYhCKZrHu+VyCJdj8Rbgfr8lU
ncErb65Al7i9vExC3DgLTZcX59Pzm5gSOlN7lxK6b1DRU4P8LTOygOa5MV4g
lcxzFUpsR5zKm/ybUUTRTEirGiuFoYxYNu94chNOrPSHa7r9mGnY/da/HCmc
j1ZSF6RNiYc9P/gxn2FHn3IIZ7enNydSoduVDZrYns8RA8J+3jn58V9wGk7K
yri2lERLd4pgat4cX3gV5MNzGiqGiAPCbTOFEFdb12Nqka5y5El+SWqqZheX
qcaKR82FP7gkzNaSbq2WuqK6cjW1fpWyPs8cigdwfCoekp9cPC7QAUwfJ3eS
YVhoLPjbhk3PHaVNWEc9caVThEW7CVrNRtr5cd1LluJVCg5PtVoDtdckeSd3
sSqEBdndKQyDOQiWVQgH0bI9kOqGE4i9OCgX0l/roweMXafYJOgylEqVGqs+
8XyDnvzQEYJTe1tcb2Nk5LoNC7DsnhCruEvfRDbUcZbRZ3NAb6lvrpEGocbN
Pd7VqNsfcNB/Qp9Xeyg6tdvzP51f/Hj+i+K5HpomBhHMbst1OntAMN2W3E9y
EPs3/MILb4GhB6CkYrZomdlo8K2GanBr6G7NA+25wQSOi842yLTJFGDbAaEy
JOXSSXiwFTHwkKReQRNx/EiG4aA69otpbfhqBtggke1mULKLiISbUfpxMO6M
EpmYSUliiUgxeRtUtL8hGf0ShXqM18SPJyqefyUpfK2W7Uup7lZj5Cp8/9PE
PFrap8cMfzp5GYWvnk9N3ru+WmaN5GYEvEGFrF84BjxmEE7a6qdgt1dXcJ1+
gTGuyd90LRGbP0j66Lk3Z99wdKWpgR/TL85TG0vq6cfxgyB2k/1UqpLfpb7G
ILoaJB0uTnWNuYJqmRxoIS9xGImEPrtknoZrJJoohx3nKLC6jo5HJ+gH9PX0
lPqKTTku7NhTgaNlhXrWG7EKu44mEXCBdnJbMbFziPtpiLtiORhbU9ptn/mo
ESS724/gyN0oKPyLOg9nFKRObX+0awVtoXGW7aCYNe/HNTeVjj4opo7pEHYD
m+EWgZph0QU0BujTpeiJ0r8lUmADUgyAcVF0XRS+YkVCLKRoR7GKu7D+rxEE
3BXMVSxzPqGu/URT7qgkjBR7m1ezDTlN3CRkT3PAX2nvMNQncpeZPpJTaZYS
T72qSonaweUE6ojPTbOuhR1SkGnOg7DG7Q5A+XiKisIVSJnY4kKD6/GSnnI/
zxi6c/dSB4cpoSqsMltvgJ8CHx5fTc6sta4DVR0UEYoxjfTfyrMhyaOLcfYE
GEfCJTDTziiD9qu8DUKOpYZAD24Mw/j0YmIpO65pwAQK+O8jVGFFzqoX6lJI
5eFWCFjLoJa5c0GWtEtvBXWljUOgRuV1DEXhUFRKlUZENOX8PGajyJTF5COy
RUlTPYSPHYfjt2SSwOszSjhAcm7lTfT7j6JMOCNQjpL15q6QmIeRK5qoDTAf
spIbh/x08Mdv/pn6F/Dt2KUhXE5+jo5Olj5wepeTq+splt9dsQ5VNxznEh8d
Od67d2LBmX7uwJy/WOg95gY+Sc+o9yiYF/ldjVapRVVbqUuZaHgo6Lwi8hw2
EZ1TFWanL+0CBmwuAAVsYgAQx0DCv5fqXsdAubnqjBPonsHsOX8xLE9I5H7V
0jbnbgJvPaaNcg0FSgeW3od9OlCXyOiAUnTDj0pVXU50sB57RAhxH5doib1l
vxSgqF3KByHvoWnA74E0hIzqZDhU49gU48U0E7CDk+p66CUqL6EkhvCstv7y
ByQl4yUIawR131pjXDKXU3zyMge9rnWuKAq3UG0ogrYqxhuMYsCk7Hornpm1
mqp/Y/8MCBi6fFsViYMpFxVasuk69jpjgXziAlyGt3f6Ylg1IvMdyPEm+La7
OtJjx4G3lmpKaYBYd9kDQbfMgKMqcqQvUoEp7PM3FK7vtFZ3eN26Uya8MiyD
ygUHWFjv6bkWFAiIcvuisgki20dzj7QNBAd7DqQGYjECKozzzDp9O0B6OiZ3
A/EjfU/CEVmWk7oM6pznvIaOA0VBSCmEipNNaFMPT/3V8NVFRfEZ735ol+9z
4feFgU5e4Jv/GGdPD1ZHOq1xcz6TztxRe4cjy11NQWd7zKiyn9ZklMI+kiP+
VJlALRdnwf1s/yoxXZ0G3jGn4qKJYTUo1rdZDHXd/SQ4riELNtX7ZgcnforV
+BbK9lwg9KRb4N/PJtUv/E3QGhZS0mC2VX8eoC8H1GdbUVpQ8wg/73iw0Onp
XbASTt3R+qWfNgdurtiDscOZCZcH9xU0CUARUSNGpLvU2vU1BcqhIUL8JiWO
FlX1kHDtaK5mljDiNFbpCI1bBk+CEj10iQlJbHjHiDEkbaJ2lWhpx0bSzn63
oagRqqwDR8spUTChdLsbvvDPONH6LmiRoymw9w7yT313bocnrcNDrDNtKHFD
PBzsivQhgqaaDBayUjOBUwPI+mp/UYkrN0Jsyp4DlcCVAbg2LlIfMCyvapwN
7IHjfg7eMYfG2EZabaCzDwjbXVULGzPF10Rek0k108nGlWhNPJ0x8L7dxFGT
GaxA8jNtUZ/c8w0LWBcbSiGsWWbrW4qix8CRsv9sviUzselFRTJYGHIFvA+9
Ytgpsdo0Lt48rWfLHK35mzqOKaTlyVjaTMCFArDdRAbRFlzim46TQHzXK/RK
B9988sUI2Z91a/Z5hTv3qBNDg8qLkEvKzZTKHb423cjfG/9wR3umsyivhPoU
eCziU3Eo1MlCCRRv7XYtn756l11P9pnYhJ2xOy63zjXoy2trevrKHFHNdawT
YLXwoCSbdKKVW5kzf2DCD/xUF3Ao5dupX4wZSqMaAwuBbiMNvctENeKMxiAk
RokOhyg/14hLHAEf6U7dF4Lj+Zi5zv4k3WXVMo8i2vbxZT+UM64u6VIEx/F7
g1bXWl7wjEoGNS88Ebc833WXwxklZwTblpCuljWigs19blXuWpubDdOpskqo
gS/cnsnlY6GbPUbHTvGk3EdjGo9WT2c9mdQZRB3EnFe/EZTmaLVOuJTdTqAe
dnhlb8BDWFO4wzODmIcBpmnzk6yU6KBExQM9G+y5BB/D5QQPbOEFBxPXaKQn
lq7HTxJrKTZgoTfw4zfJ6w9da4fiozWq+IceZ1ucwS+Nwrlm3YwQiEt7ltso
LkGgXtomWhoLvGk01Z4Zoko+Qbo6OcVZxXUjRv19Z5hwXYrgG8QghkuB20wh
h2+oCDf8g10ddDnwbp7m5QP9ITB5NT19u4/xxkbzpZBAtXxjxDHabyMqTEHC
bVYk76Y/wb/PKlhoVaTJ9fgK1IJ6PogCgcuzN2Bkv/N+6Jrvfhe62j+rhFkX
idjpegiKFJlcvL+/64R9KQrx2xrVgqpcWQF5dT0j4xZ4GsJdCpHl4DtNM0EK
vEIZrXGhLZyez3GDO0+iGzmxO/ikv/rQJ7jUu3BW/+mhepTV13ymYeofeh2r
u4DuC7lybSfygYor21FELYlsUrRsTza+l2GCDxsBRppDrsWUc+4Lwb2gqc2T
htg/cwqhu73nFEIXen9FM6HWnNKtwMNyCabKkNJ0M1J8DuqSviZvqgxHTegQ
+WKrSuCDftE5aOcsAC0BzJ0DLu0xLTgYUmQ7mJcJGNowx5dkagyMmZP5HOmU
rYlikyx846sRhYNpK1D9HW0Uu8/GeZp7He99J4HJ4bKsvqvwPl+jzQt/hq8D
8HMlOUOxjQPEOl+HJQXVcaVeh44jepbgqe9hUrI61gFxR6ugroql+pVMi2Ie
uYlr08Uew/5SapQcA4fZSt58AcyJfFoq51IfcTUQRlqmxa+gGxYbGODCp+go
t6WRHrCfDhl2YZT5GKv/jhzN5DwW8gST5139wsPo4eIKQuxwUQO913QjRmFd
X39tYRxBXoiuKDobD8mbPqbS19YG/SFwHw9jiZ6GCeLX2Uiqp6tBq7RxWqYZ
jAfqLMglD3ytlPGf6v2Uvp/Oop4W92i+WaLScn7w5oAnxb7pjYbsIhhir3nf
Efigg56D8AEGfcdBcHz2PGgnA+ch/t9+j/y0ZL+tORmB4PDhSMOOXk+6V/ui
xkFy/6h4uWvet8MXH3+OdqAWO1nbmlT/fXzvP0oJoryzSJvmo53GuSuFUCGN
uw+h5U6IfqawMCqA3WC1KrgOBu/J6i62J6y4ATRENFk1OsxAUlhsorrqnKuk
q7TOR1wJ9ZuPcmG1/AjVstY6BWJUVE8pH99Iaw25dS9geYiqPou+peqsjeQp
1a1GeYWxtyW9szUts6Us2EbhRzr6gmrep6APrO4KbquMTUm9YxqGuc9nvOcw
H3Y40TnIaxZvhgI9NMc8131mn2L8Um1l6xZAhi7JvGOrsaQ0EyOUFbFG6PKj
O/UpJBkaI47g+fkP8A9C1Exr8gSp0a4pnVtE9n5GkeqUE+Cq5HhwaEo1pRab
9HDNZ55zkWdMOhypb5w6aVLP5MVh4r38GJadl1yyy4dmK0bVvnk3dlNGou89
P4RPctclBXqrwlT31rldukm4xh2ycTYM2XDkTnK8FnKnUOU4zRpIIAG5t+LK
U5bW/g2qSgEbu6fMiQyz2CTlTY6JYCpCumlWI1iADgBXW9S73rSgSq2Aj7ig
KPBZ/pgZ71dktMOeyOh4CvaOijzVv6jqexSCtaopyy5SCy2TipkyI0VuO5+d
zbpzIT5C3ynYpu4iYN6YyicMOBc8YefpP2puONjtDkCi1owMeAFiu1pHvT0F
SEYU0LlF+Lr+JGRw6JH671xkjRQ5r9FdWIrI32VZfs7AxsLo4cioTwYxKMTm
WMzH47KX3v7VBShmJqS16fFBMYdovH1Mlb7E3KfnGoFck2XUEeEjem09EwQA
Sst/dP3/oLLssIvsqNnUEXf6w9eCiC/t7eWklZjvKI2TwGFERPxu5EpxOa6T
Juh4ApY8Xm9qyjwVNH8mEkIC0Xqj6noAcf71JNxnT3Sa4OdQhFo36AqjpMpt
v8biLn2moWKSvobNTGdFmrO25vtRh8WQ7/BmxNKf/1SGbCQ6DX8glPS2DH87
UIgwWaMvMOKG0Xs9UA7izjo4Z8B5hPyqD/mw3hFthSxFSXIyOZ9QyR4nXzXi
MXXx0q4MjfMFcecxEnxAv8Mh0GifTGZoLSyy+b3GYv2YRdF9GA/4kGAreiQX
iOH3dbVZE3/FkpjHWM3oZplS4PXVBqSsd9WmKTIWjeDXfJ78SC1DV3ktsjMH
NWBzp4wCNFdSm24uvzSbNcppB4PLERqPVWHWqalc+fqbb78DaluDOptc357c
JO9ASEwBSb0g+G+bUt57zGti/VwRIWmzdAXsMENe3JhlIn3bsGSXl+sNrOqk
lMmRI8JF7V/jnyrgbn+Gae+ApI6SKSraGxAM3qBLrCjyUXIENxBDLt/gZSjL
kUDrTQ0CwwjuU/2waZLv4RuC7dsaR51s5psy+dNjumrrapRcbB+xr8BVRfUm
mhb10TNA7BQmusL/1vMGFY5/S8vxWyDggNwP8EMmhXJxzBmWrgVMAJKdjpJJ
2cJGv8eKefmqesRltMCOgVv/mGbLAt5d4rP3yfc17I+Y5TGWwC6SS5CC4Sp+
n4JyWALg65YwIi3WS/hrtUJ/MEguQCgxMfQBJgfGViW37d9zGOQyBa3hNEWz
I8hgb7Lyr1hhK/lTOt/Aq9cpwOV72A0QRBbdzkCiKNHDvJ0ts8eDJNmBK0gq
QcvgdBdxrIUdQVeuOHBUOYFkOTK9vODEYU0VwCc5AyinMwB6BlA/3cyS7/M6
3cwJUnBUAPfJagsQvQSxKF+LQeB7ZJY3y2rVUGzreDymrnZ7/w9R9vy9rxIB
AA==

-->

</rfc>

