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

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

<?rfc rfcedstyle="yes"?>
<?rfc toc="yes"?>
<?rfc tocindent="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>
<?rfc toc_levels="4"?>

<rfc ipr="pre5378Trust200902" docName="draft-ietf-suit-firmware-encryption-05" category="std">
  <front>
    <title abbrev="Firmware Encryption">Firmware Encryption with SUIT Manifests</title>

    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization>Arm Limited</organization>
      <address>
        <email>hannes.tschofenig@arm.com</email>
      </address>
    </author>
    <author initials="R." surname="Housley" fullname="Russ Housley">
      <organization abbrev="Vigil Security">Vigil Security, LLC</organization>
      <address>
        <email>housley@vigilsec.com</email>
      </address>
    </author>
    <author initials="B." surname="Moran" fullname="Brendan Moran">
      <organization>Arm Limited</organization>
      <address>
        <email>Brendan.Moran@arm.com</email>
      </address>
    </author>

    <date year="2022" month="July" day="08"/>

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

    <abstract>


<t>This document specifies a firmware update mechanism where the
firmware image is encrypted.  Firmware encryption uses the IETF 
SUIT manifest with key establishment provided by hybrid
public-key encryption (HPKE) and AES Key Wrap (AES-KW). HPKE
uses public key cryptography while AES-KW uses a pre-shared 
key-encryption key. Encryption of the firmware image is 
accomplished with convential symmetric key cryptography.</t>



    </abstract>



  </front>

  <middle>


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

<t>Vulnerabilities with Internet of Things (IoT) devices have raised the
need for a reliable and secure firmware update mechanism that is also
suitable for constrained devices. To protect firmware images the SUIT manifest
format was developed <xref target="I-D.ietf-suit-manifest"/>. The SUIT manifest provides a 
bundle of metadata about the firmware for an IoT device, where to find 
the firmware image, and the devices to which it applies.</t>

<t>The SUIT information model <xref target="RFC9124"/> details the
information that has to be offered by the SUIT manifest format. In addition to
offering protection against modification, which is provided by a digital
signature or a message authentication code, the firmware image may also 
be afforded confidentiality using encryption.</t>

<t>Encryption prevents third parties, including attackers, from gaining access to
the firmware binary. Hackers typically need intimate knowledge of the target 
firmware to mount their attacks. For example, return-oriented programming (ROP)
requires access to the binary and encryption makes it much more difficult to write 
exploits.</t>

<t>The SUIT manifest provides the data needed for authorized recipients 
of the firmware image to decrypt it. The firmware image is encrypted using a 
symmetric key. This symmetric cryptographic key is established for encryption 
and decryption, and that key can be applied to a SUIT manifest, firmware images, 
or personalization data, depending on the encryption choices of the firmware author.</t>

<t>A symmetric key can be established using a variety of mechanisms; this document 
defines two approaches for use with the IETF SUIT manifest, namely:</t>

<t><list style="symbols">
  <t>hybrid public-key encryption (HPKE), and</t>
  <t>AES Key Wrap (AES-KW) using a pre-shared key-encryption key (KEK).</t>
</list></t>

<t>These choices reduce the number of possible key establishment options and thereby 
help increase interoperability between different SUIT manifest parser implementations.</t>

<t>The document also contains a number of examples.</t>

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

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”,
“SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>

<t>This document assumes familiarity with the IETF SUIT manifest <xref target="I-D.ietf-suit-manifest"/>, 
the SUIT information model <xref target="RFC9124"/> and the SUIT architecture <xref target="RFC9019"/>.</t>

<t>The terms sender and recipient are defined in <xref target="RFC9180"/> and have 
the following meaning:</t>

<t><list style="symbols">
  <t>Sender: Role of entity which sends an encrypted message.</t>
  <t>Recipient: Role of entity which receives an encrypted message.</t>
</list></t>

<t>Additionally, the following abbreviations are used in this document:</t>

<t><list style="symbols">
  <t>Key Wrap (KW), defined in RFC 3394 <xref target="RFC3394"/> for use with AES.</t>
  <t>Key-encryption key (KEK), a term defined in RFC 4949 <xref target="RFC4949"/>.</t>
  <t>Content-encryption key (CEK), a term defined in RFC 2630 <xref target="RFC2630"/>.</t>
  <t>Hybrid Public Key Encryption (HPKE), defined in <xref target="RFC9180"/>.</t>
</list></t>

<t>The main use case of this document is to encrypt firmware. However, SUIT manifests
may require other payloads than firmware images to experience confidentiality
protection using encryption. While the term firmware is used throughout
the document, plaintext other than firmware images may get encrypted using
the described mechanism. Hence, the terms firmware (image) and plaintext are 
used interchangably.</t>

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

<t><xref target="RFC9019"/> describes the architecture for distributing firmware images 
and manifests from the author to the firmware consumer. It does, however,
not detail the use of encrypted firmware images.</t>

<t>This document enhances the SUIT architecutre to include firmware encryption.
<xref target="arch-fig"/> shows the distribution system, which represents the firmware server 
and the device management infrastructure. The distribution system is aware 
of the individual devices to which a firmware update has to be delivered.</t>

<figure title="Firmware Encryption Architecture." anchor="arch-fig"><artwork><![CDATA[
                                           +----------+
                                           |          |
                                           |  Author  |
                                           |          |
 +----------+                              +----------+
 |  Device  |---+                               | 
 |(Firmware |   |                               | Firmware +
 | Consumer)|   |                               | Manifest
 +----------+   |                               |
                |                               |
                |                        +--------------+
                |                        |              |
 +----------+   |  Firmware + Manifest   | Distribution |
 |  Device  |---+------------------------|    System    |
 |(Firmware |   |                        |              |
 | Consumer)|   |                        |              |
 +----------+   |                        +--------------+
                |
                |
 +----------+   |
 |  Device  +---+
 |(Firmware |
 | Consumer)|
 +----------+
]]></artwork></figure>

<t>Firmware encryption requires the sender to know the firmware consumers and the 
respective credentials used by the key distribution mechanism. For AES-KW the 
KEK needs to be known and, in case of HPKE, the sender needs to be in possession 
of the public key of the recipient.</t>

<t>The firmware author may have knowledge about all devices that need 
to receive an encrypted firmware image but in most cases this will not be 
likely. The distribution system certainly has the knowledge about the 
recipients to perform firmware encryption.</t>

<t>To offer confidentiality protection for firmware images two deployment variants need to be 
supported:</t>

<t><list style="symbols">
  <t>The firmware author acts as the sender and the recipient is the firmware consumer
(or the firmware consumers).</t>
  <t>The firmware author encrypts the firmware image with the distribution system as 
the initial recipient. Then, the distribution system decrypts and re-encrypts the 
firmware image towards the firmware consumer(s). Delegating the task of re-encrypting 
the firmware image to the distribution system offers flexiblity when the number 
of devices that need to receive encrypted  firmware images changes dynamically 
or when updates to KEKs or recipient public keys are necessary. As a downside, 
the author needs to trust the distribution system with performing the re-encryption 
of the firmware image.</t>
</list></t>

<t>Irrespectively of the two variants, the key distribution data (in form of the 
COSE_Encrypt structure) is included in the SUIT envelope rather than in the SUIT 
manifest since the manifest will be digitally signed (or MACed) by the firmware author.</t>

<t>Since the SUIT envelope is not protected cryptographically an adversary could modify
the COSE_Encrypt structure. For example, if the attacker alters the key distribution
data then a recipient will decrypt the firmware image with an incorrect key. This
will lead to expending energy and flash cycles until the failure is detected. To
mitigate this attack, the optional suit-cek-verification parameter is added to the
manifest. Since the manifest is protected by a digital signature (or a MAC), an
adversary cannot successfully modify this value. This parameter allows the recipient
to verify whether the CEK has successfully been derived.</t>

<t>Details about the changes to the envelope and the manifest can be found in the next 
section.</t>

</section>
<section anchor="suit-envelope-and-suit-manifest" title="SUIT Envelope and SUIT Manifest">

<t>This specification introduces two extensions to the SUIT envelope and the manifest 
structure, as motivated in <xref target="arch"/>.</t>

<t>The SUIT envelope is enhanced with a key exchange payload, which is carried inside
the suit-protection-wrappers parameter, see <xref target="envelope-fig"/>. One or multiple 
SUIT_Encryption_Info payload(s) are carried within the suit-protection-wrappers 
parameter. The content of the SUIT_Encryption_Info payload is explained in 
<xref target="AES-KW"/> (for AES-KW) and in <xref target="HPKE"/> (for HPKE). When the encryption capability 
is used, the suit-protection-wrappers parameter MUST be included in the envelope.</t>

<figure title="SUIT Envelope CDDL." anchor="envelope-fig"><artwork><![CDATA[
SUIT_Envelope_Tagged = #6.107(SUIT_Envelope)
SUIT_Envelope = {
  suit-authentication-wrapper => bstr .cbor SUIT_Authentication,
  suit-manifest => bstr .cbor SUIT_Manifest,
  SUIT_Severable_Manifest_Members,
  suit-protection-wrappers => bstr .cbor {
      *(int/str) => [+ SUIT_Encryption_Info]
  }
  * SUIT_Integrated_Payload,
  * SUIT_Integrated_Dependency,
  * $$SUIT_Envelope_Extensions,
  * (int => bstr)
}
]]></artwork></figure>

<t>The manifest is extended with a CEK verification parameter (called 
suit-cek-verification), see <xref target="manifest-fig"/>. This parameter is optional 
and is utilized in environments where battery exhaustion attacks are a 
concern. Details about the CEK verification can be found in 
<xref target="cek-verification"/>.</t>

<figure title="SUIT Manifest CDDL." anchor="manifest-fig"><artwork><![CDATA[
SUIT_Manifest = {
    suit-manifest-version         => 1,
    suit-manifest-sequence-number => uint,
    suit-common                   => bstr .cbor SUIT_Common,
    ? suit-reference-uri          => tstr,
    ? suit-cek-verification       => bstr,
    SUIT_Severable_Members_Choice,
    SUIT_Unseverable_Members,
    * $$SUIT_Manifest_Extensions,
}
]]></artwork></figure>

</section>
<section anchor="AES-KW" title="AES Key Wrap">

<t>The AES Key Wrap (AES-KW) algorithm is described in RFC 3394 <xref target="RFC3394"/>, and
it can be used to encrypt a randomly generated content-encryption key (CEK)
with a pre-shared key-encryption key (KEK). The COSE conventions for using
AES-KW are specified in Section 12.2.1 of <xref target="RFC8152"/>.  The encrypted CEK is
carried in the COSE_recipient structure alongside the information needed for 
AES-KW. The COSE_recipient structure, which is a substructure of the 
COSE_Encrypt structure, contains the CEK encrypted by the KEK.</t>

<t>When the firmware image is encrypted for use by multiple recipients, there 
are three options. We use the following notation KEK(R1,S) is the KEK shared between 
recipient R1 and the sender S. Likewise, CEK(R1,S) is shared between R1 and S. 
If a single CEK or a single KEK is shared with all authorized recipients R by a given sender S 
in a certain context then we use CEK(<spanx style="emph">,S) or KEK(</spanx>,S), respectively. The notation 
ENC(plaintext, key) refers to the encryption of plaintext with a given key.</t>

<t><list style="symbols">
  <t>If all authorized recipients have access to the KEK, a single 
COSE_recipient structure contains the encrypted CEK. This means KEK(*,S) ENC(CEK,KEK), and 
ENC(firmware,CEK).</t>
  <t>If recipients have different KEKs, then multiple COSE_recipient structures 
are included but only a single CEK is used. Each COSE_recipient structure 
contains the CEK encrypted with the KEKs appropriate for the recipient. In short, 
KEK_1(R1, S),…, KEK_n(Rn, S), ENC(CEK, KEK_i) for i=1 to n, and ENC(firmware,CEK). 
The benefit of this approach is that the firmware image is encrypted only once with 
a CEK while there is no sharing of the KEK accross recipients. Hence, authorized recipients 
still use their individual KEKs to decrypt the CEK and to subsequently obtain the 
plaintext firmware.</t>
  <t>The third option is to use different CEKs encrypted with KEKs of the 
authorized recipients. Assume there are KEK_1(R1, S),…, KEK_n(Rn, S), and 
for i=1 to n the following computations need to be made: ENC(CEK_i, KEK_i) and 
ENC(firmware,CEK_i). This approach is appropriate when no benefits can be gained
from encrypting and transmitting firmware images only once. For example, 
firmware images may contain information unique to a device instance.</t>
</list></t>

<t>Note that the AES-KW algorithm, as defined in Section 2.2.3.1 of <xref target="RFC3394"/>, 
does not have public parameters that vary on a per-invocation basis. Hence, 
the protected structure in the COSE_recipient is a byte string of zero length.</t>

<t>The COSE_Encrypt conveys information for encrypting the firmware image, 
which includes information like the algorithm and the IV, even though the 
firmware image is not embedded in the COSE_Encrypt.ciphertext itself since 
it conveyed as detached content.</t>

<t>The CDDL for the COSE_Encrypt_Tagged structure is shown in <xref target="cddl-aeskw"/>.</t>

<figure title="CDDL for AES Key Wrap Encryption" anchor="cddl-aeskw"><artwork><![CDATA[
COSE_Encrypt_Tagged = #6.96(COSE_Encrypt)
 
SUIT_Encryption_Info = COSE_Encrypt_Tagged

COSE_Encrypt = [
  protected   : bstr .cbor outer_header_map_protected,
  unprotected : outer_header_map_unprotected,
  ciphertext  : null,                  ; because of detached ciphertext
  recipients  : [ + COSE_recipient ]
]

outer_header_map_protected =
{
    1 => int,         ; algorithm identifier
  * label =values     ; extension point
}

outer_header_map_unprotected = 
{
    5 => bstr,        ; IV
  * label =values     ; extension point
}

COSE_recipient = [
  protected   : bstr .size 0,
  unprotected : recipient_header_map,
  ciphertext  : bstr        ; CEK encrypted with KEK
]

recipient_header_map = 
{
    1 => int,         ; algorithm identifier
    4 => bstr,        ; key identifier
  * label =values     ; extension point
}
]]></artwork></figure>

<t>The COSE specification requires a consistent byte stream for the
authenticated data structure to be created, which is shown in
<xref target="cddl-enc-aeskw"/>.</t>

<figure title="CDDL for Enc_structure Data Structure" anchor="cddl-enc-aeskw"><artwork><![CDATA[
       Enc_structure = [
         context : "Encrypt",
         protected : empty_or_serialized_map,
         external_aad : bstr
       ]
]]></artwork></figure>

<t>As shown in <xref target="cddl-aeskw"/>, there are two protected fields: one 
protected field in the COSE_Encrypt structure and a second one in
the COSE_recipient structure. The ‘protected’ field in the Enc_structure, 
see <xref target="cddl-enc-aeskw"/>, refers to the content of the protected 
field from the COSE_Encrypt structure.</t>

<t>The value of the external_aad MUST be set to null.</t>

<t>The following example illustrates the use of the AES-KW algorithm with AES-128.</t>

<t>We use the following parameters in this example:</t>

<t><list style="symbols">
  <t>IV: 0x26, 0x68, 0x23, 0x06, 0xd4, 0xfb, 0x28, 0xca, 0x01, 0xb4, 0x3b, 0x80</t>
  <t>KEK: “aaaaaaaaaaaaaaaa”</t>
  <t>KID: “kid-1”</t>
  <t>Plaintext Firmware: “This is a real firmware image.”</t>
  <t>Firmware (hex): 546869732069732061207265616C206669726D7761726520696D6167652E</t>
</list></t>

<t>The COSE_Encrypt structure, in hex format, is (with a line break inserted):</t>

<figure><artwork><![CDATA[
D8608443A10101A1054C26682306D4FB28CA01B43B80F68340A2012204456B69642D
315818AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D
]]></artwork></figure>

<t>The resulting COSE_Encrypt structure in a dignostic format is shown in <xref target="aeskw-example"/>.</t>

<figure title="COSE_Encrypt Example for AES Key Wrap" anchor="aeskw-example"><artwork><![CDATA[
96(
    [
        / protected field with alg=AES-GCM-128 /
        h'A10101', 
        {
           / unprotected field with iv /
           5: h'26682306D4FB28CA01B43B80'
        }, 
        / null because of detached ciphertext /
        null, 
        [ / recipients array /
           h'', / protected field /
           {    / unprotected field /
              1: -3,            / alg=A128KW /
              4: h'6B69642D31'  / key id /
           }, 
           / CEK encrypted with KEK /
           h'AF09622B4F40F17930129D18D0CEA46F159C49E7F68B644D'
        ]
    ]
)
]]></artwork></figure>

<t>The CEK, in hex format, was “4C805F1587D624ED5E0DBB7A7F7FA7EB” and 
the encrypted firmware (with a line feed added) was:</t>

<figure><artwork><![CDATA[
A8B6E61EF17FBAD1F1BF3235B3C64C06098EA512223260
F9425105F67F0FB6C92248AE289A025258F06C2AD70415
]]></artwork></figure>

</section>
<section anchor="HPKE" title="Hybrid Public-Key Encryption (HPKE)">

<t>Hybrid public-key encryption (HPKE) <xref target="RFC9180"/> is a scheme that 
provides public key encryption of arbitrary-sized plaintexts given a 
recipient’s public key.</t>

<t>For use with firmware encryption the scheme works as follows: HPKE, 
which internally utilizes a non-interactive ephemeral-static
Diffie-Hellman exchange to derive a shared secret, is used to 
encrypt a CEK. This CEK is subsequently used to encrypt the firmware image. 
Hence, the plaintext passed to HPKE is the randomly generated CEK. 
The output of the HPKE SealBase function is therefore 
the encrypted CEK along with HPKE encapsulated key (i.e. the ephemeral ECDH 
public key).</t>

<t>Only the holder of recipient’s private key can decapsulate the CEK to decrypt the 
firmware. Key generation in HPKE is influced by additional parameters, such as 
identity information.</t>

<t>This approach allows all recipients to use the same CEK to encrypt the 
firmware image, in case there are multiple recipients, to fulfill a requirement for 
the efficient distribution of firmware images using a multicast or broadcast protocol.</t>

<t><xref target="I-D.ietf-cose-hpke"/> defines the use of HPKE with COSE.</t>

<t>An example of the COSE_Encrypt structure using the HPKE scheme is 
shown in <xref target="hpke-example"/>. It uses the following algorithm 
combination:</t>

<t><list style="symbols">
  <t>AES-GCM-128 for encryption of the (detached) firmware image.</t>
  <t>AES-GCM-128 for encryption of the CEK as well as ECDH
with NIST P-256 and HKDF-SHA256 as a Key Encapsulation Mechanism (KEM).</t>
</list></t>

<figure title="COSE_Encrypt Example for HPKE" anchor="hpke-example"><artwork><![CDATA[
96_0([
    / protected header with alg=AES-GCM-128 /
    h'a10101',
    / unprotected header with nonce /
    {5: h'938b528516193cc7123ff037809f4c2a'},
    / detached ciphertext /
    null,
    / recipient structure /
    [
        / protected field with alg for HPKE /
        h'a1013863',
        / unprotected header /
        {
            / ephemeral public key with x / y coodinate /
            -1: h'a401022001215820a596f2ca8d159c04942308ca90
                  cfbfca65b108ca127df8fe191a063d00d7c5172258
                  20aef47a45d6d6c572e7bd1b9f3e69b50ad3875c68
                  f6da0caaa90c675df4162c39',
             /  kid for recipient static ECDH public key /
             4: h'6b69642d32',
        },
        / encrypted CEK /
        h'9aba6fa44e9b2cef9d646614dcda670dbdb31a3b9d37c7a
          65b099a8152533062',
    ],
])
]]></artwork></figure>

<t>[Editor’s Note: The examples need to be in-sync with the
content in COSE-HPKE.]</t>

</section>
<section anchor="cek-verification" title="CEK Verification">

<t>The suit-cek-verification parameter contains a byte string resulting from the 
encryption of 8 bytes of 0xA5 using the CEK with a nonce of all zeros and empty 
additional data using the cipher algorithm and mode also used to encrypt the
plaintext.</t>

<t>As explained in <xref target="arch"/>, the suit-cek-verification parameter is optional to
implement and optional to use. When used, it reduces the risk of an battery
exhaustion attack against the IoT device.</t>

</section>
<section anchor="ciphers-without-integrity-protection" title="Ciphers without Integrity Protection">

<t>The ability to restart an interrupted firmware update is often a requirement
for low-end IoT devices. To fulfill this requirement it is necessary to chunk
a larger firmware image into blocks and to encrypt each block individually
using a cipher that does not increase the size of the resulting ciphertext 
(i.e. by not adding an authentication tag after each encrypted block).</t>

<t>When the encrypted firmware image has been transferred to the device, it will
typically be stored in a staging area. Then, the bootloader starts decrypting 
the downloaded image block-by-block and swaps it with the currently valid 
image. Note that the currently valid image is available in cleartext and hence
it has to be re-encrypted before copying it to the staging area.</t>

<t>This approach of swapping the newly downloaded image with the previously valid 
image is often referred as A/B approach.  A/B refers to the two storage areas,
sometimes called slots, involved. Two slots are used to allow the update to be
reversed in case the newly obtained firmware image fails to boot. This approach
adds robustness to the firmware update procedure.</t>

<t>When an update gets aborted while the bootloader is decrypting the newly obtained
image and swapping the blocks, the bootloader can restart where it left off. This
technique again offers robustness.</t>

<t>To accomplish this functionality, ciphers without integrity protection are used
to encrypt the firmware image. Integrity protection for the firmware image is,
however, important and therefore the image digest defined in 
<xref target="I-D.ietf-suit-manifest"/> MUST be used.</t>

<t>This document registers several cipher algorithms for use with firmware encryption
that do not offer integrity protection. These ciphers are registered within
the COSE algorithm registry but are dedicated for this specific applications only. 
Hence, all algorithms listed in <xref target="iana-algo"/> are not recommended for general
use.</t>

<figure title="Algorithms for the COSE Algorithm Registry" anchor="iana-algo"><artwork><![CDATA[
   +===========+=====+===========+==============+=========+============+
   | Name      |Value|Description| Capabilities |Reference|Recommended |
   +===========+=====+===========+==============+=========+============+
   |AES-128-CBC|  35 | AES 128   | []           | [This   |No          |
   |           |     | CBC Mode  |              |Document]|            |
   |           |     |           |              |         |            |
   +-----------+-----+-----------+--------------+---------+------------+
   |AES-256-CBC|  36 | AES 256   | []           | [This   |No          |
   |           |     | CBC Mode  |              |Document]|            |
   |           |     |           |              |         |            |
   +-----------+-----+-----------+--------------+---------+------------+
   |AES-128-CTR|  37 | AES 128   | []           | [This   |No          |
   |           |     | Counter   |              |Document]|            |
   |           |     | Mode (CTR)|              |         |            |
   +-----------+-----+-----------+--------------+---------+------------+
   |AES-256-CTR|  38 | AES 256   | []           | [This   |No          |
   |           |     | Counter   |              |Document]|            |
   |           |     | Mode (CTR)|              |         |            |
   +-----------+-----+-----------+--------------+---------+------------+
]]></artwork></figure>

</section>
<section anchor="complete-examples" title="Complete Examples">

<t>[[Editor’s Note: Add examples for a complete manifest here (including a digital signature), 
multiple recipients, encryption of manifests (in comparison to firmware images).]]</t>

</section>
<section anchor="sec-cons" title="Security Considerations">

<t>The algorithms described in this document assume that the party performing the firmware encryption</t>

<t><list style="symbols">
  <t>shares a key-encryption key (KEK) with the firmware consumer (for use with the AES-Key Wrap scheme), or</t>
  <t>is in possession of the public key of the firmware consumer (for use with HPKE).</t>
</list></t>

<t>Both cases require some upfront communication interaction, which is not part of the SUIT manifest. 
This interaction is likely provided by an IoT device management solution, as described in <xref target="RFC9019"/>.</t>

<t>For AES-Key Wrap to provide high security it is important that the KEK is of high entropy, and that implementations protect the KEK from disclosure. Compromise of the KEK may result in the disclosure of all key data protected with that KEK.</t>

<t>Since the CEK is randomly generated, it must be ensured that the guidelines for random number generations are followed, see <xref target="RFC8937"/>.</t>

<t>In some cases third party companies analyse binaries for known security vulnerabilities. With encrypted firmware images this type of analysis is prevented. Consequently, these third party companies either need to be given access to the plaintext binary before encryption or they need to become authorized recipients of the encrypted firmware images. In either case, it is necessary to explicitly consider those third parties in the software supply chain when such a binary analysis is desired.</t>

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

<t>This document asks IANA to register new values into the COSE algorithm
registry. The values are listed in <xref target="iana-algo"/>.</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 fullname='S. Bradner' initials='S.' surname='Bradner'><organization/></author>
<date month='March' year='1997'/>
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference anchor='RFC3394' target='https://www.rfc-editor.org/info/rfc3394'>
<front>
<title>Advanced Encryption Standard (AES) Key Wrap Algorithm</title>
<author fullname='J. Schaad' initials='J.' surname='Schaad'><organization/></author>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<date month='September' year='2002'/>
</front>
<seriesInfo name='RFC' value='3394'/>
<seriesInfo name='DOI' value='10.17487/RFC3394'/>
</reference>



<reference anchor='RFC8152' target='https://www.rfc-editor.org/info/rfc8152'>
<front>
<title>CBOR Object Signing and Encryption (COSE)</title>
<author fullname='J. Schaad' initials='J.' surname='Schaad'><organization/></author>
<date month='July' year='2017'/>
<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='RFC8174' target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author fullname='B. Leiba' initials='B.' surname='Leiba'><organization/></author>
<date month='May' year='2017'/>
<abstract><t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='8174'/>
<seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>



<reference anchor='RFC9180' target='https://www.rfc-editor.org/info/rfc9180'>
<front>
<title>Hybrid Public Key Encryption</title>
<author fullname='R. Barnes' initials='R.' surname='Barnes'><organization/></author>
<author fullname='K. Bhargavan' initials='K.' surname='Bhargavan'><organization/></author>
<author fullname='B. Lipp' initials='B.' surname='Lipp'><organization/></author>
<author fullname='C. Wood' initials='C.' surname='Wood'><organization/></author>
<date month='February' year='2022'/>
<abstract><t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t><t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t></abstract>
</front>
<seriesInfo name='RFC' value='9180'/>
<seriesInfo name='DOI' value='10.17487/RFC9180'/>
</reference>


<reference anchor='I-D.ietf-suit-manifest'>
   <front>
      <title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Henk Birkholz'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Koen Zandberg'>
	 <organization>Inria</organization>
      </author>
      <date day='28' month='April' year='2022'/>
      <abstract>
	 <t>   This specification describes the format of a manifest.  A manifest is
   a bundle of metadata about code/data obtained by a recipient (chiefly
   the firmware for an IoT device), where to find the that code/data,
   the devices to which it applies, and cryptographic information
   protecting the manifest.  Software updates and Trusted Invocation
   both tend to use sequences of common operations, so the manifest
   encodes those sequences of operations, rather than declaring the
   metadata.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-manifest-17'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-manifest-17.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-cose-hpke'>
   <front>
      <title>Use of Hybrid Public-Key Encryption (HPKE) with CBOR Object Signing and Encryption (COSE)</title>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Russ Housley'>
	 <organization>Vigil Security, LLC</organization>
      </author>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <date day='7' month='March' year='2022'/>
      <abstract>
	 <t>   This specification defines hybrid public-key encryption (HPKE) for
   use with CBOR Object Signing and Encryption (COSE).  HPKE offers a
   variant of public-key encryption of arbitrary-sized plaintexts for a
   recipient public key.

   HPKE works for any combination of an asymmetric key encapsulation
   mechanism (KEM), key derivation function (KDF), and authenticated
   encryption with additional data (AEAD) encryption function.
   Authentication for HPKE in COSE is provided by COSE-native security
   mechanisms.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-cose-hpke-01'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-cose-hpke-01.txt' type='TXT'/>
</reference>




    </references>

    <references title='Informative References'>





<reference anchor='RFC9019' target='https://www.rfc-editor.org/info/rfc9019'>
<front>
<title>A Firmware Update Architecture for Internet of Things</title>
<author fullname='B. Moran' initials='B.' surname='Moran'><organization/></author>
<author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'><organization/></author>
<author fullname='D. Brown' initials='D.' surname='Brown'><organization/></author>
<author fullname='M. Meriac' initials='M.' surname='Meriac'><organization/></author>
<date month='April' year='2021'/>
<abstract><t>Vulnerabilities in Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism suitable for devices with resource constraints. Incorporating such an update mechanism is a fundamental requirement for fixing vulnerabilities, but it also enables other important capabilities such as updating configuration settings and adding new functionality.</t><t>In addition to the definition of terminology and an architecture, this document provides the motivation for the standardization of a manifest format as a transport-agnostic means for describing and protecting firmware updates.</t></abstract>
</front>
<seriesInfo name='RFC' value='9019'/>
<seriesInfo name='DOI' value='10.17487/RFC9019'/>
</reference>



<reference anchor='RFC9124' target='https://www.rfc-editor.org/info/rfc9124'>
<front>
<title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title>
<author fullname='B. Moran' initials='B.' surname='Moran'><organization/></author>
<author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'><organization/></author>
<author fullname='H. Birkholz' initials='H.' surname='Birkholz'><organization/></author>
<date month='January' year='2022'/>
<abstract><t>Vulnerabilities with Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism that is also suitable for constrained devices. Ensuring that devices function and remain secure over their service lifetime requires such an update mechanism to fix vulnerabilities, update configuration settings, and add new functionality.</t><t>One component of such a firmware update is a concise and machine-processable metadata document, or manifest, that describes the firmware image(s) and offers appropriate protection. This document describes the information that must be present in the manifest.</t></abstract>
</front>
<seriesInfo name='RFC' value='9124'/>
<seriesInfo name='DOI' value='10.17487/RFC9124'/>
</reference>



<reference anchor='RFC8937' target='https://www.rfc-editor.org/info/rfc8937'>
<front>
<title>Randomness Improvements for Security Protocols</title>
<author fullname='C. Cremers' initials='C.' surname='Cremers'><organization/></author>
<author fullname='L. Garratt' initials='L.' surname='Garratt'><organization/></author>
<author fullname='S. Smyshlyaev' initials='S.' surname='Smyshlyaev'><organization/></author>
<author fullname='N. Sullivan' initials='N.' surname='Sullivan'><organization/></author>
<author fullname='C. Wood' initials='C.' surname='Wood'><organization/></author>
<date month='October' year='2020'/>
<abstract><t>Randomness is a crucial ingredient for Transport Layer Security (TLS) and related security protocols.  Weak or predictable &quot;cryptographically secure&quot; pseudorandom number generators (CSPRNGs) can be abused or exploited for malicious purposes. An initial entropy source that seeds a CSPRNG might be weak or broken as well, which can also lead to critical and systemic security problems. This document describes a way for security protocol implementations to augment their CSPRNGs using long-term private keys. This improves randomness from broken or otherwise subverted CSPRNGs.</t><t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t></abstract>
</front>
<seriesInfo name='RFC' value='8937'/>
<seriesInfo name='DOI' value='10.17487/RFC8937'/>
</reference>



<reference anchor='RFC2630' target='https://www.rfc-editor.org/info/rfc2630'>
<front>
<title>Cryptographic Message Syntax</title>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<date month='June' year='1999'/>
<abstract><t>This document describes the Cryptographic Message Syntax.  This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary messages.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='2630'/>
<seriesInfo name='DOI' value='10.17487/RFC2630'/>
</reference>



<reference anchor='RFC4949' target='https://www.rfc-editor.org/info/rfc4949'>
<front>
<title>Internet Security Glossary, Version 2</title>
<author fullname='R. Shirey' initials='R.' surname='Shirey'><organization/></author>
<date month='August' year='2007'/>
<abstract><t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='FYI' value='36'/>
<seriesInfo name='RFC' value='4949'/>
<seriesInfo name='DOI' value='10.17487/RFC4949'/>
</reference>




    </references>


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

<t>We would like to thank Henk Birkholz for his feedback on the CDDL description in this document. Additionally, we would like to thank Michael Richardson and Carsten Bormann for their review feedback. Finally, we would like to thank Dick Brooks for making us aware of the challenges firmware encryption imposes on binary analysis.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAHP5x2IAA+08a2/buJbfA+Q/EO3FNpnart+PXHT3JnGyDfrcpjODxdwi
oCXaJiJLXklO6mlzf/ueB0lRspy2iwsssFgXSG2Jj8PD8z6HbDabhwe5ziN1
Ii51urqXqRIXcZBu17lOYnGv86W4/vXqk3grYz1XWZ4dHsjZLFV3tR0OD8Ik
iOUKhgtTOc+bWuXzZrbReXNuWjeVa91sDw4PApmrRZJuT0SWh4cHhwd6nZ6I
daoGvdH4U7rJ8m67PWl3Yd5UyRNxrYJNqvPt4cF9kt4u0mSzPiEQDw9u1Rae
hSfiKs5VGqu8OUUgcNAsl3F4I6MkBtC2Clax1ieHB0Kk80CFWb6N7HMh8iTw
v+s4VHHunmRJmqdqnhUPtqvy7zzVQdE+SFYr6F+813GkY2829SVvRjrLmzDQ
LImgYTP55Tm+Alyu5Hqt44UPz02k7hQ26+PC5CZfJikupYnv6aNjePuqJT5l
wTKZq1gv3Cvem1cyjlVW9z5JF7DRf0rcnhNxmq7EG73SuQpdC7WSOjoRSxqi
lbsh/ibTVQsWi0BVYfnYEq+STRapbQWQj5ss23lVhuE3vdCR2/WGePPm3LW0
lFhuswMqj/+3O2yVqWAXSgLyrCXeJqmM7UOG8CxVcSjj8qvvYsnMbDq3qLOP
oMODOElX0P9OERV+vDzvdjoT+73Xm/Tt93Fn0C2+j/p1bSadcZu+XzWnrYLl
VoZny6+CJFPN5foWZwZui+dVSCbtApJJp1tAMumNHLTDXtt+70/63P7woNls
wqYAB8iA2O7TUmdIxhtkAZGtVaDnGihPCisOxGYdggQQKxUASelsJe6XCh7n
S3V44BrplVzA30wY4aHClijkTyFRxCaD0aGvuLr4dAkAkeyyeGBxBlJCwA85
A6ZbElzrNLnToQrFbCuW21mqYR/XG3gfNKlxMfzRqw+vL44FyBJxenEtXsPb
31O5Fkfwq/n692Ogc2hweEBg8BA0Hw2QLKDpcgsL1JES3IMBlijvmtkSFhMK
kmOelMQBWr5QTua0wl3kgDQIgMDWuDAYiFYbJPEdrFHLCAXVSqFw2gGphXuF
e7fSYRgp/PVUoBRNk3ATsGA/PPhtE8UqlTMd6Rw3kca3ohahgt2OF5k4uko+
HYtQ3ekAWi3lnRKp1BlARJsaK/gGRAerTlWkYR8UITRD9lWPEEa+lDkuU0ZZ
AhIdKJz64lCwSiQ6kKuhnRjEX4I7m6sgr+CKKaREGkBrxAbiXmY4goqSNYz1
9Ws9Rz08wPDVMSwd4X4eHsw2MaAS0QJIl7AUCZyRbPLy3hEeYgEYM3A3LP0n
0ChGatjd6wbhC59bJENroKpgKXQuQGNEsD0t5j8Do2NzoJ9VEqoIlmbY++EB
hslBXmW8P35TQvlS0gQzXMxcpcwnOxgU3KsFFCFkGGruDxtFnYAw7Gbgc7mA
vYI+AAoIhIAma9glZCWGlCIEuZ3LCLZcL2KZI5EQ9axUliHlowpEEudhgBZC
wFANh6zklmgHNwd6zQFgnANoZ65D5hHQHsCRCGzBf4RIj/2AVZGjEFs6DcVa
psgNDUBxEG1C7CvzXAa3KoWH8zRZCVwsPQ9grzJCSgm8mY5lCjz+inuJfLuG
xUTRVhCvaABthaxwGyf3kQoXyoqAXKYLYD1PUMI+rZJNTFSmUwMJ8MIlYEx9
kSAbADepAiTGzSTVsA6YANANcmC1QhiPPr7/cHx4kKr/2ugUSdnCTBMypER+
noBayVtoCaS32sD+rRKAA7YV9nUT5USaoJUVQKm+rKNE5wBOiTZ3+YdIGzkG
12+lBRk6+k/4mYIaWWvaAySvur2GWUNFAAJczKuPKBOz58i2JSGJHaFd8cwT
mkaM4jBWmRhIPcyARI5DCwnROHMucBXJYGB9JEXi2BCBlmWUNKqSq4ErTsUa
yCSJgV7ZBiFkNWCeNdgbuBJi3ZJiBDONJEUVXYxW3pHTqopg8Pz1WUTdSSAe
YBYSb0ZAZ39FlvD0PXgDCoQYbuh9gqtMExks4SdiCRQfaxCnrSsrR/srAreA
dJPRy+IxtczIxca1utnB7unaXU0rjl5fvD52FApAWsxB+01AhomIN6uZSnHx
6yTLNGqhXasioTEzK6tTBcLs8GCpojWKCvBlYGyN2hM0jdGqW0B3fq9UTPwD
XWCYCovINIOZNTIyzkLb7zGUwz0JOhBtOQpaWHQBshEDrCCeinNjIFhQP6kU
BEESJYutHRTXho5VJp68/fX605MG/y/evafvHy/+49erjxdT/H796vTNG/fF
trh+9f7XN/D+8MB8Lbqev3/79uLdlHvDU1F59Pb0P5/wxj55/+HT1ft3p2+e
ANqI0sjbNMtl2TczKIUtRrYmXZ4FqZ6RGBVn5x/+JZ5l6792+qz/0OgG/Uff
0bh+eAC3EpQJz5jEEVpr+BM2cIsUrGSKA4FwBu5Yo1oCloRpsmVyHwvc5dau
3SuzDL4A2csV7LJEH+Ux0n/E6mgYe+AHdLo1EaipTIOlRuWLypNbtXHlzkgA
nK1gFSA+VEpdnYwl1DIfEw7NHOO2mYPsO6PQkihK7pHJVkrG5Lbi+L+AZ4bj
gruXsEWE9JZvjb7HSZH0PHFsNHsL+360gOzpDoAqcF72jgBizVgjqFGNYeAA
ZQ9SS0P/aHZmvM6SKLMLKYQKCJSGjxZAikCXjPGD3wA/JTkHYqhlxqiVOUBH
tA3VUdG94lHxG1qeOAqwbQ6A7Yx0/shI6LQZuodvtPu/iFcsWD+ws4ILvNgV
rPX776gHvF1yvYAnMmOc+PSvyX4wkDrVgzGBezCl0kaZ/IGt0VIzFohIUHaC
3NtGiQzRNIB93jHnYfQvIEWBTEBCVww68OUKw3PHuBO/kzeWGx7whs6YFPJl
mmwWS7DcmcjtqhpiHUkUNl9yA2MtaLgUtNEqtoYZywknp0QBK7iIhoMoK4Y8
ojHZ/SwmxzfkcYYs+3CgBeihrRHwpyXef4qi4AHfeGLAAcKmV0laIA2HGoNa
s02OyKuukG0ct3ts8tIwZFpY09F1Q18NMAg2x1UO2ESbZmkIAcMiufFGqNMm
MwxvkVeZ3Co+n9pUDAgIfCfPrmeTs5ZgS90DqWTsf/2K7ZtzvQDEoFw39qjD
AZBRts1ytWo4EQT6JjM+gTcsaGpYlUFQ4a4hrgB4Zo14nkoYeEPIZkO1ZiZy
e+95p40FB86hBmt5A479jhe4G14pfDjQEyAuwZgh8vjHP/7hwmU/8nnedJ/n
P9Xxm/f1ZzueMiH9fEd/Rh/yxztW1gjjTHnfxLfvd4bm2OfIBae+lUHZ08c1
5xnPDY8c/1jvty6KUV3md/vuovSf2cWDZg/J7O1aeVGzhd+8EOBzhwN6MfVZ
6FvNJjb3fGjWa+Y5M+uP7mUNwD+6kT+01vrPD2C4/lF1gjKSnlvi9xZfWVBl
DCNLvp6Ip1Z+CsosvXxSl1nytVLrCSmkuniui0OgyDPmKcgxjITUaxXnbwkM
YmDEGUPb4LgrYxEYtW5CWGgzleStp4gxZmKitDweWGkUkbCiFKGIcT4M/jjb
B02mhg+v3wXaocsI1imHB4ww90LF5omzv52RVXHZybIg47sIC3GAEZ0TpxIw
1EBRJLA4Emssl23lSmAEEIFgrhLgJVxTxtbcvYZhUT3PEBWRvgXnfL++ClSK
nme0Zc2z3IXSbpEL5QB4YMKhS7NHMQMaEg5B7sTsPAsP7ZUd+/Aew0HrKNmS
0sXghcQpCTG8MRhQXq+TFBBywrZ+Hc5lAL1kiRotuRUOk87qSRP58AgNolq6
pZiDEPtmNpioDM075nzJup2QGY3LJoOmREBBWzgVe7e1fU3gKjMeYbMEBI66
E3WDH+Ge5R/hEqcqUgtJdiQHMLNbpHgvLQxvLLy7Mb19gBJVgOkZqS96FrFz
qGI/VoNjwkS7fOFxRcESOxRERjX8H25jcOI5OEtDpjwTm1lExCAlMnxeEETB
3exixgpjqhTyPcXYTAhiJNMYtbYrN5vuJEeOefC9q6f9N7xjMVtKtNvV7yKV
DeirtBCVkRNByDWWVRr10pKCtEeauG5l+x0enL+/vrgxwl446/YYOcPY3sbF
Nga6ijnhIlJZeFJ+A3QJjXoH78lE4by0HogmNG05UQArwEwBzIHc9vb0XIXH
Vt5X4564+ms3YhkYgBblnZEtmCnwo780j8RcB1jTuJlA6Jso5JTGlv27ejxU
ovGasWaTBiC+c0oC1OD78IAQjukOyp5ZAiME2Hj3PgFBKA0S2OogL4LbhwfU
OVIytG40h5BVrNIFh/rnkcyWItgGEVD4BoQuO2dz8NI27CmDy0YowqQb7BWI
mQV6HaQ4eGFMQBwTxVwkxrUCddsE5LkMEEY35QqGSsnfCUNmT8pK2c1uietd
AuCUkdklP2ckipTREeWMgBooTgw+WbFvMsZ9zjaU6phvcGN5F3kBdzLaKJMK
KCCUGELKyqKfdCytiASQoWWgAzAcUA+WpphRnBca3xlfbGqycIV+tFLHSD5H
mVbnOASYSP082cSOs2IMDoBaY73IjP6USfzCH6hU3lP40yZZb3ZGm1ywUaYw
tIozipkZ2MqsswMgVuAY8qd46SoBWSNzG1KioATGk4SXF/IZ0Tj1JqktOdz+
hfFjg0NeAjGQaappcJSrzIxEcoWh0LxPMZ6benvaAJ2O4VE7MccAWuJ9TBnH
1SbKNbCsKSu4KazZm6t4nlgwQM+RlLcwIMRmS/aCcHjggGCbKuDwnhWpj81H
6PlC8SBGJ4Yw2G59eBBHc2fFcuCI8I02qn1JIT6Mg6ndpJFc28TE4YEJiDUe
X0nBIJQiIJO3LPEtdpkiyWkwy+PnN5/kYgHNX4qnw1anPToqvT2utIZmX6nq
CgEqZ4ItUOLlvwqsSRGtYAbrpe6npZYNN4Ij2Jo+lkeoNT25xqgVFiG4dzdv
FZobWTFiHZLKg3+1DtovoEnzF/DiGFv88bx22z9j6wf88wu/xwoM0EnASzcf
DCPUv51SehC2d2sa/OUvZcRfOK42DRAeCywg/sHz8XwesX5eWbacT6dvjGf3
qSKsSXyEBTejfNyjCI5Q0ZL7Uqsyji3P2uEtz1akNfxwuofjcUjOoMkooazR
HbrTaRJTqZ4pwZiB5lIpypmlBPOL6hY4n078jdliYFPwdGK0a6uye2dNVRmN
bFpdjompF0zh5PJLSyYlMsXO5EnaD2xWp1HXMANHGgPLTWMPQ8MN7K7fFisV
vaGEP2iVF86pren9b9w/VZSyhDk2qS71zqF3ue2O6i/NZNpWeYxZ6+acErJ+
m1/jrNrKvHZE7hi0ROQ+RfsUVKJotwceRT8t55i/PjUC11J7fQZaRoskBZJf
sc3kZSbr0keUhAS569Q75yOKTAqYgNAiWUWYYsDSrJzLWfYmhtDYI4b7oRT4
J2PBuhoyVPec0qIMhomNUKTbVPbRWq6NJ97ptrqtDqowk18ddJEzadzC1UI+
QTO0UNnCms5/vylMXGc+CCziXaBaNz5tkQT1qkUsdMUqagfzTAYJhDkrZin5
Mn/fNeIbRXLdcnuxJuNsABpZyTnd+lgNik0WQmdnaRThkQbXEAgqg8aklLLW
dAa6mzMl5dQm2LSMFgDj6GOncX1sIxMYxzK7b+sNvEiM+Nhx9puJcVy3xBt9
q+51Bus+94erDGO6XuOyr+aIU4AkYvSQ/W1+v6ZNt72ZKMELqa/x+cgm/QIM
5dhBhAYJOkEm0MRk/yVn3+ie8YGQ/oKAwtSvzXesfipcXSYPh6nDg4t350cu
tdZAbjgWJNc8I9wvxCzScIazGEpyr7hwBdGwd2kUvyuXWAGgjQJRlv7qGKFE
gCWGMuoPs/CZW7nAtcHLhkk2U60MPrNE2UAR0XJQV8EsSlIwwtFgTDtK3Qtm
ZkjWmYEYX6TKihJ1GOuyJS4k8OP+RZPO3cd3LhBGMRgqOFqnGj3RuYm7eaGv
qxize2ne4MjuTQepWgCFtFqtBo5wEx99jOmJQx091sc0nH7ZwT0ztSK7iDSu
zAwk81znLituy6CYGWWtv16SC4QrtDN4eYBNWvW9zVunJlJB3ETFX3PH5UBa
aZJl3l66/PK+ejowdIBcjTjRqZ9nJKx6lXV2A0haJCQ/ycrIEeAZsSXL0IJL
XPKfyYxKT6iMkmWZKRXA2QtyO8dpK5vMQTYro2vXgsE1DDwaHCF2v7fNzBP+
5lZkKlZXb0zRlR89XslQnVgqudGOTuqZDN4YDvWJwSdXiinGiSWezFoAC3Ly
AETMsXsRU9oBMAaylc5rk/SOiCrBp2qNPRcsGBYrKddNrGFvuUbR5LGxhFfS
mCTr3iUU8jEkba0Da/I0uBrL1ZFYKwGNhJ5nJljbB4u7FEfgSPyYIKoz6Q33
3GEEBy1zDIA2dXyXGINyJjNdUDuHAIogUSFQPHvjphTDl6B2YEEYfWOm+lOl
iYhUvMiXRcFd2TwgS2mblRDnl4Sa4Gy1nBuLzsgMYRlZ7o+pFo4QOuvRquer
3xoCi5HhB9aoGG7YFSaIRDSLw7BsYFm4W7BsYBLiUKA2Fc1NmJWtT1qULafL
sYTTmZkuO4W2sZOy/tjWnfcwbsvlKBQRhGHUlCq7vefSJmOR1w1BEYHJ8Mh/
d0wxo9r4yMs6OHCCUlj2pfgDXYWCNIQ48d0d8OdUerNUwOHpzUqub1xLcjE2
cdHzZLex95qae4iG5vEmihq7/tZfgdUDaWpfCoy7rnRurZDZMNAf4nmVgj8f
HnzGxe6HX7wEx4fdpA56XugOejB4zgpl2sC8TzksEMmZisRLiotmprWLCIp1
ojES+lA7uY+ul8LNP3CeXzH/1W8/O1sFA4/sbAa6QrRrNtD19oCu2TgaxUFa
Y4SA/Df4rxvRX/rPoF6Ifg2iqAz9f7hFzvst2ND6vo6jS75swWRFaIecxHK8
uDg/QPk/nVE00wpUJVdWVrDyNqE4PL2DCY5CVrB6xWpp5KDCW7MChIIoCDrg
30kRI0Rw1a72AeC+KYY1pGE+1nc4EU/M8p40vNc+fajVOt/eJOlNplLMPYPJ
4UjEfBDNaSyjGylDQyru7ecqxh3YO1gvAzxFtFzbn4z6071ytOHZPBiuL1YA
FBKFGQiqmOyy8vM61eA73qB1JB7TSqg2WhH6a3RnpZztmZvlWXma0goblKpQ
Ync7GxUHrBIaL9aAmg+HdwWI+9Jvlm6JO+w4pW2zsetM0QEWlNNFHYazBo0V
JcBg3uDxs9zUqWwyN2rVCnKlwM1Od0xD1vrunpVjS5HNZPY8xNVvJ6L9pTts
wN/hGP92e/i3TU/CPv6dz+g5vQ0kve3g3xm97dHbcRtHA3EFxC8rnyf06moK
r2512OzQ7w/Olrf1OvCajFmymYBTo2qOmfq56p6jpfpyfCIG/eF4OBn1um3z
t9Ntj7rDwbAzPIdfQ3jaHU5Ho2EHn2Kr4RTejeD7hS946kIzGkvxv5gTaQ0E
7Mi453j0WswAyFu0XlGgh8cnzuiYjoftcb/fO+204R/8HfTPu8PhuNtrD6f9
y7Pu+Py03Tnr987G7cvhuNdvn3bbnW633e8PhmcAYb87PTzodQbjzvj0sj0Z
drtn/ct++7IzmvSg4WTaGU/b5xen/eFlZzA5708uRjDO2bDfnxoQeGEgOdGx
BkrYw4sU+wj1Ik7AXwvMSiuWFfFP09BNybgCG4pFkicFX1SlhA3LLF4iuf77
+VskWfGi6LF8xnh61ijEbJHMMIP66tUbVt/5I6EFcALj7cP1s6Lpgz/ZC+LM
71hL/kRscBW//4AhPEtKpil4P2XAls9gfbvIKTf6um+x5Wbw6ZyIZq9k871g
HANyQVDstO8jXixt9TrPsD0r/ErbEmJo2HqzZGd5P0uo3mZ85q/w37Ff/ufT
ndNrPh1fmHdV68IzKTDYUmFjPJr7pH8+bg8ApvFoOuz2L6aDi/b07Gx0Oroc
XZ6OLs6eGJ+7HBMrSuh9OTBHB57KDI5xcCsHMHgMS70Ydi4AH5dnp9POZefs
stftDc5658P+eXvYnowvTgfA+d1edwgS9HLS7w5AXFwOR5fty7Ph+aTb7Y9P
L7rjyWm7O+gOxpdtEGun01G73xk4Vn9aPn3RrD19Ib4+pXQtdnj1/VNwpQM6
HNcGhlgZz5x0Ph+y9GoOyzFNmc40aLN028wopOKiN5mJbko/XPzMH4k02qV/
6qWmlI8jywwU3uFBFXWs+/DeCiqfLDxi1srR1mbr6DBbEjfpjeTqTrXGwVIZ
NTMMzgQgyfH8qWq+UlG0wmJHWypA0auUSiBt9BkMmlSxlrAJlsODIsVShFNN
mLIU5qqmZOorrLwjHUUobC0z0xmXbGPzNRmdc04jIFuAP7XeONOH+l2Dwj3D
0tP5Jg5cDA3Nv3mSqh1OoHgdZlB4e2gIeCvXoHBoNkoA6RbATR0tZsXF+fSV
sPciUGCcNvs9Bpaw5TKJQj5gWCKNlMo83HHSULmpXPiwElEsAhgtEgwGEVyF
4nCl43m0CUy5jzvg5RlODay2WXL5I3tH+daPqxTn9FwQzpT0YLi+XJdqDbQM
xrYg+ztejbkU9cCFHV6f00lg26I5Rlyl9ZmoRJVzWLQDeJCa7OpS5R3guRq5
s+dbaSaYPce8xwyWFtIPVE1JkERsB3hnDN2FIHQQyBzYLcxYwjgRC8pwPlEX
O9vXkOIeM4VBcrRqmJ6uqvAMFZzbt1Ou8uIeD++onrOhMQewwqPofP8KG8S+
kVI5hW1gPLLGwXGVRX+sP7FOJu4V7lZGDIH6j1Dz7gochg/N7mBI+ufV6+ll
8/rVKf1GiWUku6F9HPStu9fi6PXFW2Qm9FaNeXbTPjKmmW95cADhUbts+Uwa
m8x2920Sf4CYUgqm21cyvya98WzQHQ86w86kFwSjTrc3n7d7o3F7Mu8HXfns
wY36iJ1FNpZtV5fCefETtqewFUplwxMX2RsPe88a/iA1S32xzzKF5oVs81Qh
TfwF3mIUPAmRyFTVKmt2EFuyD4gG2x/MJTBHum05mAzn3UCOQ7CYgnYfTIJe
exzISbvu2FIwn80DORzMOtim0x2F8/FcdSYd2R72wnY7HAUD8HzAcqjrDbOp
eX8k+4NwGA6DwairRrOwM5vMe2o4mQ3aMuyNR4NgWNt7PgxlOwAHb9IOhqNB
OO93ht2gN/GxaXAkwPGjPfA3ElUs6wMPcVXLlQ3XGRmuYa/rj/1Q2rWybipt
80TO5HAu+301mXUDNZ+Ew/5w2OmHQSiHo3Y4C2e9juzNJmFvFIykDwFgtj2Z
SCw6GPTApXAAfIb/P/vmqi99vmutIimylfrHBSidJAUdh3mPE65qMEfr/dSQ
jpvZNg5cbpITmHz2j8RmE8dsfTan8QEFv/l1MV+f7tQIWRv5ezW03ul/P5NR
+JYuUOLsHSPtxtSBEmztL6cDT4xT5pFNaBYgCae3MTfCxwQoQoY5uUIpU0yv
GINFRiWdgQfY+dKCGpPKyyC2TOSrVPFoC0i92sTHa4tdLRjexeIuU+BD/8Ur
BMUURnLlo87NLRDGVtN8egFzc1wrhnecVIrF3F03lLBx9/zY2xcIF3yXElaO
cbkemiofXN2g3W9bikknFoAL05xrumHidFN2c8ypT1zpPDfF4s644AwnaNWm
gvUWIPGVSdYeoaCTb5Joii+4swsIRrDcxLeYkI7wIprquRsEDVggSqhiLi5t
qkJ7i155CeZoi+eY2YgxREJOi0sEunszaJsxhu9OS1ma9vTR4QHbsWAhYmck
SEqVVi8MyiU8nSNlEFReGQ/Cx2ZutTp299gU1ndTSTflYeewJ6563V3tpLlU
Hww7d8MPBhlBjDAdY+RbLghKWKd/OmeWJDmWdgKQtPOZu1SGzsvQJGBPUZPQ
HuRC8JuzbZPxTHds3YMFwmCYSolgk6bsytzJSKPnbLyWcja32sylFuWd1BHd
w4Umb6Qk455uhkCvhzKIxenj4lgKVQ2RixIk6y0uQ+cWXyUs7NrpsOm4kLUV
KLG6B8B21u/WiDc2abwEsLLIgj8owpxyivP0xZmbqiXoZzkAjRF13DO6ewrp
ETRKloBs0XjJh6lXzaIkp0uh7pLojg5GYC98WNwygbl0tG7Z2maWJTShe42V
nUwV1pEw6+TKil0CnPMVXgnRSqW+gMQxsHMyA9kUe9VGVYkBzcGp2pgCDaJ6
aU834T0GVOGaUjzJ3Zvg0aYu0eUuzBbxlhbdFrKU2KF1dBmtrOOiXCCSSM3R
BZ7bAywgJpdcnECi1h4GKxZrzw4Wt+OxdLMeM50hbBjRUchi7WSxf3OZ2Tw6
6vGY139V19smyHdS9EBC9hIEvNwHUCyNPipceSp3pPahXmA9qldNUXLoKpfG
uGwGF1jt3piQqgUm6FK8AOaODOKqiq5c2VQT1EEZRKKaZC2f0qxDIAm1TDlk
4yh2fndYokgreVYCtwLFgwVkfClNaJKGjFbv0ApfqRWYQh0sfvHCMFSOV6wM
7161ZoSWsWziO7zcJqXKQLR86QpXW1rK8YiIrtwo3aHw/GXxee79fbnzvfSz
9ILPb38T7zDSQJ9vv2GW6tuUqoUJ1d/EuT2Xgdcwfvto667hWwHqt382TCZp
1Tw/O/8mRG8AUGLsFp1PhPiPz57xDz+JxODbu8R7bFbnN+S/MKh4iybgzln4
qaHSz6UX+0eqPqn5WTOSf4z+ufe3ufO99LP0wsMT+P0WT0ODJwwF/D+eKngi
evr0EfE0+ufSE16CqNKa1f0sngjbRwDk8f82PTGexv9cevq/gSfnzDsBbj35
07IKc3rFPRcfjV5ht56vxEOPEAyeC+vPk8Nf9fhPw7Dw+PlC28D2dKedyGg5
8u4G3T2aeozpjtrwcNkrL65YOqKC9xW4tDqjW1arseDj1mcTULCXYtPFHTo0
kfRMfH2aqaCJtTkunuDpxNLZlLzmMrvCM8D7T7fV0+d1WR8Tp6WsS8ZHOGsP
nhR2+84VAnxgsXRzJBVY2OIkji8DPil63uQ8gX/hxt7rNr43lTkkSWs4S/Be
ZboZw15ShuY/WMnzNIlzuvF9E3snZzlPVbrhlg6Wo1XrHfAUxRlnY6F5fbET
X7pRvh3XvzvYv1gqS6KNuXG0sp3V6//cNScWi3lipxBLvVjyxcyUPaEIQGGe
OhowxzlgLdRB4WHh9da77LRyX6W7l9l2pkhUqLMgSjIq0UEWhGe6qKTBZnwv
HLr6toao6GMjUXRmHgNORSzYEIukkwuVI/8mqbebdmvwhbYZXXiiYpwiLFa8
2Gi8SCs2nM/d7V0TRcaK7VvOYeCQXOFk7lI3+MdzCEg+7q4Vc6nwllk8pvvS
wUfZZub+XW0m5etn3O7cla/nbonfcdl7r05jts63a8YcTcBFPOaCY/QVUGjY
XCc5Z5naA6HS6Kj4gU+TKy4dbimyn+YmYRMC8AUdCemtN1KA2Kk/rmBrt/bf
DwfYNaAhfht1USwMJepAY3AjMEISC6pLS9UqsySXJfOcr3fbgJOxxUP68IYq
9jnjWNySXOAUOFDbO9fwavXTd6cViVx3behtxi0p4sc+EjrUwpR1Unxt11PC
6AGrNC7AM60R5D2+jrv/fSaDW3O8MXAX9tCZWFOqdk93XHBJOs4t41sssb8V
Zzq9XSbRn0SZ5FzD/uFw9i5iKmwMCy9mR7O0RPmizvv62d6CBJUqEh/x/zRE
/Ydi5lymWGMqzjC/GztPW2Pm4k4Dziw8LXGpH59hqgHqszRJbpnPVvIW9drG
XsFniA6mj/A0gMpq1R2KyYxOXlTpocV2BumS/wawe2bygWUAAA==

-->

</rfc>

