<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.21 (Ruby 3.0.2) -->
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-jose-hpke-encrypt-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="Use of HPKE in JOSE">Use of Hybrid Public Key Encryption (HPKE) with JSON Object Signing and Encryption (JOSE)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-jose-hpke-encrypt-03"/>
    <author fullname="Tirumaleswar Reddy">
      <organization>Nokia</organization>
      <address>
        <postal>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <country>India</country>
        </postal>
        <email>kondtir@gmail.com</email>
      </address>
    </author>
    <author fullname="Hannes Tschofenig">
      <organization/>
      <address>
        <postal>
          <country>Austria</country>
        </postal>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author fullname="Aritra Banerjee">
      <organization>Nokia</organization>
      <address>
        <postal>
          <city>Munich</city>
          <country>Germany</country>
        </postal>
        <email>aritra.banerjee@nokia.com</email>
      </address>
    </author>
    <author initials="O." surname="Steele" fullname="Orie Steele">
      <organization>Transmute</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>orie@transmute.industries</email>
      </address>
    </author>
    <author initials="M." surname="Jones" fullname="Michael B. Jones">
      <organization>Self-Issued Consulting</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>michael_b_jones@hotmail.com</email>
        <uri>https://self-issued.info/</uri>
      </address>
    </author>
    <date year="2024" month="December" day="06"/>
    <area>Security</area>
    <workgroup>JOSE</workgroup>
    <keyword>HPKE</keyword>
    <keyword>JOSE</keyword>
    <keyword>PQC</keyword>
    <keyword>Hybrid</keyword>
    <abstract>
      <?line 92?>

<t>This specification defines Hybrid Public Key Encryption (HPKE) for use with
JSON Object Signing and Encryption (JOSE). HPKE offers a variant of
public key encryption of arbitrary-sized plaintexts for a recipient public key.</t>
      <t>HPKE works for any combination of an asymmetric key encapsulation mechanism (KEM),
key derivation function (KDF), and authenticated encryption with additional data
(AEAD) function. Authentication for HPKE in JOSE is provided by
JOSE-native security mechanisms or by one of the authenticated variants of HPKE.</t>
      <t>This document defines the use of the HPKE with JOSE.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-jose-hpke-encrypt/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        jose Working Group mailing list (<eref target="mailto:jose@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/jose/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/jose/"/>.
      </t>
    </note>
  </front>
  <middle>
    <?line 106?>

<section anchor="introduction">
      <name>Introduction</name>
      <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>This specification enables JSON Web Encryption (JWE) to leverage HPKE,
bringing support for KEMs and the possibility of Post Quantum or Hybrid KEMs to JWE.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

</section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</name>
      <t>This specification uses the following abbreviations and terms:</t>
      <ul spacing="normal">
        <li>
          <t>Content Encryption Key (CEK), is defined in <xref target="RFC7517"/>.</t>
        </li>
        <li>
          <t>Hybrid Public Key Encryption (HPKE) is defined in <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>pkR is the public key of the recipient, as defined in <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>skR is the private key of the recipient, as defined in <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>Key Encapsulation Mechanism (KEM), see <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>Key Derivation Function (KDF), see <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>Authenticated Encryption with Associated Data (AEAD), see <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>Additional Authenticated Data (AAD), see <xref target="RFC9180"/>.</t>
        </li>
      </ul>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>This specification describes two modes of use for HPKE in JWE:</t>
      <ul spacing="normal">
        <li>
          <t>HPKE JWE Integrated Encryption, where HPKE is used to encrypt the plaintext.</t>
        </li>
        <li>
          <t>HPKE JWE Key Encryption, where HPKE is used to encrypt a content encryption key (CEK) and the CEK is subsequently used to encrypt the plaintext.</t>
        </li>
      </ul>
      <t>When "alg" and "enc" are both present in a protected header and when "iv" and "tag" are empty, the mode is HPKE JWE Integrated Encryption.</t>
      <t>When "enc" is present in a protected header and "alg" is absent, the mode is HPKE JWE Key Encryption when a valid HPKE "alg" value is present in the unprotected headers.</t>
      <t>HPKE supports several modes, which are described in Table 1 of <xref target="RFC9180"/>.</t>
      <t>In JWE, the use of specific HPKE modes such as "mode_base" or "mode_auth_psk" is determined by the presence of the header parameters "psk_id" and "auth_kid".</t>
      <t>JWE supports different serializations, including Compact JWE Serialization as described in Section 3.1 of <xref target="RFC7516"/>, General JWE JSON Serialization as described in Section 3.2 of <xref target="RFC7516"/>.</t>
      <t>Certain JWE features are only supported in specific serializations.</t>
      <t>For example Compact JWE Serialization does not support the following:</t>
      <ul spacing="normal">
        <li>
          <t>additional authenticated data</t>
        </li>
        <li>
          <t>multiple recipients</t>
        </li>
        <li>
          <t>unprotected headers</t>
        </li>
      </ul>
      <t>HPKE JWE Key Encryption can be used with "aad" but only when not expressed with Compact JWE Serialization.</t>
      <t>Single recipient HPKE JWE Key Encryption with no "aad" can be expressed in Compact JWE Serialization, so long as the recipient and sender use the same HPKE Setup process as described in { Section 5 of RFC9180 }.</t>
      <section anchor="auxiliary-authenticated-application-information">
        <name>Auxiliary Authenticated Application Information</name>
        <t>HPKE has two places at which applications can specify auxiliary authenticated information as described in { Section 8.1 of RFC9180 }.</t>
        <t>HPKE algorithms are not required to process "apu" and "apv" as described in Section 4.6.1 of <xref target="RFC7518"/>, despite appearing to be similar to key agreement algorithms (such as "ECDH-ES").</t>
        <t>The "aad parameter" for Open() and Seal() <bcp14>MUST</bcp14> be used with both HPKE JWE Integrated Encryption and HPKE JWE Key Encryption.</t>
        <t>To avoid confusion between JWE AAD and HPKE AAD, this document uses the term "HPKE AEAD AAD" to refer the "aad parameter" for Open() and Seal().</t>
        <t>The HPKE AEAD AAD <bcp14>MUST</bcp14> be set to the "JWE Additional Authenticated Data encryption parameter" defined in Step 14 of Section 5.1 of <xref target="RFC7516"/> which is repeated here for clarity:</t>
        <t>Let the Additional Authenticated Data encryption parameter be ASCII(Encoded Protected Header).
However, if a JWE AAD value is present (which can only be the case when using the JWE JSON Serialization), instead let the Additional Authenticated Data encryption parameter be ASCII(Encoded Protected Header || '.' || BASE64URL(JWE AAD)).</t>
      </section>
      <section anchor="encapsulated-keys">
        <name>Encapsulated Keys</name>
        <t>Encapsulated keys <bcp14>MUST</bcp14> be the base64url encoded encapsulated key as defined in Section 5.1.1 of <xref target="RFC9180"/>.</t>
        <t>In HPKE JWE Integrated Encryption, JWE Encrypted Key is the encapsulated key.</t>
        <t>In HPKE JWE Key Encryption, each recipient JWE Encrypted Key is the encrypted content encryption key, and the encapsulated key (ek) is found in the recipient header.</t>
      </section>
    </section>
    <section anchor="integrated-encryption">
      <name>Integrated Encryption</name>
      <t>In HPKE JWE Integrated Encryption:</t>
      <ul spacing="normal">
        <li>
          <t>The protected header <bcp14>MUST</bcp14> contain an "alg" that starts with "HPKE".</t>
        </li>
        <li>
          <t>The protected header <bcp14>MUST</bcp14> contain an "enc" and it <bcp14>MUST</bcp14> be set to the value "dir". It updates Section 4.1.2 of <xref target="RFC7516"/> to clarify that in case where HPKE JWE Integrated Encryption is used, setting "enc" set to "dir" is appropriate, as both the derivation of the CEK and the encryption of the plaintext are fully handled within the HPKE encryption.</t>
        </li>
        <li>
          <t>The protected header parameters "psk_id" and "auth_kid" <bcp14>MAY</bcp14> be present.</t>
        </li>
        <li>
          <t>The protected header parameter "ek" <bcp14>MUST NOT</bcp14> be present.</t>
        </li>
        <li>
          <t>The "encrypted_key" <bcp14>MUST</bcp14> be the base64url encoded encapsulated key as defined in Section 5.1.1 of <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>The "iv", "tag" and "aad" members <bcp14>MUST NOT</bcp14> be present.</t>
        </li>
        <li>
          <t>The "ciphertext" <bcp14>MUST</bcp14> be the base64url encoded ciphertext as defined in Section 5.2 of <xref target="RFC9180"/>.</t>
        </li>
        <li>
          <t>The HPKE Setup info parameter <bcp14>MAY</bcp14> be used, and its values are not constrained by this specification. By default, it is empty unless apu or apv are present, in which case it will carry the JOSE context-specific data as defined in Section 4.6.2 of <xref target="RFC7518"/>, i.e., the concatenation of AlgorithmID, PartyUInfo, and PartyVInfo. It does not include Z, keydatalen, SuppPubInfo, or SuppPrivInfo. AlgorithmID is structured as defined in Section 4.6.2 of <xref target="RFC7518"/> and the Data field in AlgorithmID will be set to the octets of the ASCII representation of the "enc" Header Parameter value.</t>
        </li>
      </ul>
      <section anchor="compact-example">
        <name>Compact Example</name>
        <t>A Compact JWE or JSON Web Token:</t>
        <artwork><![CDATA[
eyJhbGciOiJIUEtFLVAyNTYtU0hBMjU2LUExMjhHQ00iLCJlbmMiOiJkaXIiLCJraWQiOiJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6andrLXRodW1icHJpbnQ6c2hhLTI1Njp2b2RIQ3FjVVdFbV83NUpWcXlhTjhaS1FVMjF3VEFSYzhkRzhuVU1jZlBVIn0.BCsvYxTHM4CO_OwQxL3lkJDdlw3UDjx2xN9MIXnbVzfTgFJmo_Es2xdH-fYs9EXfH_V53JgMWfUm7rBD_oE5efU..7_va6cnwClMsw7h7lqpm2tCrH9NkciM-g9UabdPWcOeIRmAf01NLYG7Wn8fFoohHlcGgd0nh7Jmo9nvHFi7sH6kOX7pplBnvLUoPrqeyW4TdXo_X8YThNKf9BFyWGyF6fjelbic5jSYClFaenMkTnjpHxFW1sWuiuZVmO1EOzrlNttWy.
]]></artwork>
        <t>After verification:</t>
        <artwork><![CDATA[
{
  "protectedHeader": {
    "alg": "HPKE-P256-SHA256-A128GCM",
    "enc": "dir",
    "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:vodHCqcUWEm_75JVqyaN8ZKQU21wTARc8dG8nUMcfPU"
  },
  "payload": {
    "urn:example:claim": true,
    "iss": "urn:example:issuer",
    "aud": "urn:example:audience",
    "iat": 1729785491,
    "exp": 1729792691
  }
}
]]></artwork>
      </section>
      <section anchor="json-example">
        <name>JSON Example</name>
        <t>A JSON Encoded JWE:</t>
        <artwork><![CDATA[
{
  "protected": "eyJhbGciOiJIUEtFLVAyNTYtU0hBMjU2LUExMjhHQ00iLCJlbmMiOiJkaXIiLCJraWQiOiJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6andrLXRodW1icHJpbnQ6c2hhLTI1NjpTNkFYZmRVXzZZZnp2dTBLRERKYjBzRnV3bklXUGs2TE1URXJZaFBiMzJzIiwicHNrX2lkIjoib3VyLXByZS1zaGFyZWQta2V5LWlkIiwiYXV0aF9raWQiOiJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6andrLXRodW1icHJpbnQ6c2hhLTI1NjpTNkFYZmRVXzZZZnp2dTBLRERKYjBzRnV3bklXUGs2TE1URXJZaFBiMzJzIn0",
  "encrypted_key": "BD7QVodtG-FwYASgb36zuTzUCc80aiYwS6JOOE-6_heUGyAZt-cU0818e4oYqP7ebBuW3KTM9EQA0vM5fWp6hj0",
  "ciphertext": "ZxqtYoomgVQGctnv1I_EBVI1NIeJ7qJw2iVtqwUw3fXa8FK-",
  "aad": "8J-PtOKAjeKYoO-4jyBiZXdhcmUgdGhlIGFhZCE"
}
]]></artwork>
        <t>After verification:</t>
        <artwork><![CDATA[
{
  "protectedHeader": {
    "alg": "HPKE-P256-SHA256-A128GCM",
    "enc": "dir",
    "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s",
    "psk_id": "our-pre-shared-key-id",
    "auth_kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s"
  },
  "plaintext": "🖤 this plaintext!",
  "additionalAuthenticatedData": "🏴‍☠️ beware the aad!"
}
]]></artwork>
      </section>
    </section>
    <section anchor="key-encryption">
      <name>Key Encryption</name>
      <t>HPKE based recipients can be added alongside existing <tt>ECDH-ES+A128KW</tt> or <tt>RSA-OAEP-384</tt> recipients because HPKE is only used to encrypt the content encryption key, and because the protected header used in content encryption is passed to HPKE as Additional Authenticated Data.</t>
      <t>In HPKE JWE Key Encryption:</t>
      <ul spacing="normal">
        <li>
          <t>The protected header <bcp14>MUST NOT</bcp14> contain an "alg".</t>
        </li>
        <li>
          <t>The protected header <bcp14>MUST</bcp14> contain an "enc" that is registered in both the IANA HPKE AEAD Identifiers Registry, and the IANA JSON Web Signature and Encryption Algorithms Registry.</t>
        </li>
        <li>
          <t>The recipient unprotected header parameters "psk_id" and "auth_kid" <bcp14>MAY</bcp14> be present.</t>
        </li>
        <li>
          <t>The recipient unprotected header parameter "ek" <bcp14>MUST</bcp14> be present.</t>
        </li>
        <li>
          <t>The recipient unprotected header <bcp14>MUST</bcp14> contain a registered HPKE "alg" value.</t>
        </li>
        <li>
          <t>The "encrypted_key" <bcp14>MUST</bcp14> be the base64url encoded content encryption key as described in Step 15 in Section 5.1 of <xref target="RFC7516"/>.</t>
        </li>
        <li>
          <t>The recipient "encrypted_key" is as described in Section 7.2.1 of <xref target="RFC7516"/>.</t>
        </li>
        <li>
          <t>The "iv", "tag" JWE members <bcp14>MUST</bcp14> be present.</t>
        </li>
        <li>
          <t>The "aad" JWE member <bcp14>MAY</bcp14> be present.</t>
        </li>
        <li>
          <t>The "ciphertext" <bcp14>MUST</bcp14> be the base64url encoded ciphertext as described in Step 19 in Section 5.1 of <xref target="RFC7516"/>.</t>
        </li>
        <li>
          <t>The HPKE Setup info parameter <bcp14>MAY</bcp14> be used, and its values are not constrained by this specification. By default, it is empty unless apu or apv are present, in which case it will carry the JOSE context-specific data as defined in Section 4.6.2 of <xref target="RFC7518"/>, i.e., the concatenation of AlgorithmID, PartyUInfo, and PartyVInfo. It does not include Z, keydatalen, SuppPubInfo, or SuppPrivInfo. AlgorithmID is structured as defined in Section 4.6.2 of <xref target="RFC7518"/> and the Data field in AlgorithmID will be set to the octets of the ASCII representation of the "alg" (algorithm) Header Parameter value.</t>
        </li>
      </ul>
      <section anchor="multiple-recipients">
        <name>Multiple Recipients</name>
        <t>For example:</t>
        <artwork><![CDATA[
{
  "protected": "eyJlbmMiOiJBMTI4R0NNIn0",
  "iv": "ZL0HDvZJizA6vyTV",
  "ciphertext": "Oq26x9vppULrGNzCn2jaB_Sl-Swjv7e0AcgnhUR5AtrjEf2v6jee09WN-Ne-HIGXBgQpgJPchg0eWNmgv4Ozi5I",
  "tag": "ULnlOiJRYfCzM_r5j9sLEQ",
  "aad": "cGF1bCBhdHJlaWRlcw",
  "recipients": [
    {
      "encrypted_key": "G3HmlpOgA4H1i_RQhT44Nw7svDwUqvNR",
      "header": {
        "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:cxQC_lWt22BIjH5AWSLHCZk_f-mU3-W4Ztcu5-ZbwTk",
        "alg": "ECDH-ES+A128KW",
        "epk": {
          "kty": "EC",
          "crv": "P-256",
          "x": "JnGWSQ90hlt0H7bfcgfaw2DZE-qqv_cwA4_Dn_CkLzE",
          "y": "6jw1AC5q9-qewwBh9DK5YzUHLOogToGDSpoYAJdNo-E"
        }
      }
    },
    {
      "encrypted_key": "pn6ED0ijngCiWF8Hd_PzTyayd2OmRF7QarTVfuWj6dw",
      "header": {
        "alg": "HPKE-P256-SHA256-A128GCM",
        "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s",
        "psk_id": "our-pre-shared-key-id",
        "auth_kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s",
        "ek": "BI41YDnhTTI6jSd7T62rLwzCCt_tBqN5LFooiZ7eXJsh01O0-h-BQ6JToKX9UXDw_3ylbXTiYWmPXl2fNmr4BeQ"
      }
    }
  ]
}
]]></artwork>
        <t>After verification:</t>
        <artwork><![CDATA[
{
  "plaintext": "🎵 My lungs taste the air of Time Blown past falling sands 🎵",
  "protectedHeader": {
    "enc": "A128GCM"
  },
  "unprotectedHeader": {
    "alg": "HPKE-P256-SHA256-A128GCM",
    "enc": "dir",
    "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s",
    "psk_id": "our-pre-shared-key-id",
    "auth_kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s",
    "ek": "BI41YDnhTTI6jSd7T62rLwzCCt_tBqN5LFooiZ7eXJsh01O0-h-BQ6JToKX9UXDw_3ylbXTiYWmPXl2fNmr4BeQ"
  },
  "additionalAuthenticatedData": "paul atreides"
}
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This specification is based on HPKE and the security considerations of
<xref target="RFC9180"/> are therefore applicable also to this specification.</t>
      <t>HPKE assumes the sender is in possession of the public key of the recipient and
HPKE JOSE makes the same assumptions. Hence, some form of public key distribution
mechanism is assumed to exist but outside the scope of this document.</t>
      <t>HPKE in Base mode does not offer authentication as part of the HPKE KEM.
In this case JOSE constructs like JWS and JSON Web Tokens (JWTs) can be used to add authentication.
HPKE also offers modes that offer authentication.</t>
      <t>HPKE relies on a source of randomness to be available on the device.
In Key Agreement with Key Wrapping mode, CEK has to be randomly generated and it <bcp14>MUST</bcp14> be ensured that the guidelines in <xref target="RFC8937"/> for random number generations are followed.</t>
      <section anchor="key-management">
        <name>Key Management</name>
        <t>Reusing a single KEM key across multiple algorithm combinations <bcp14>MUST</bcp14> be avoided to maintain cryptographic security. Each key and its associated algorithm suite, comprising the KEM, KDF, and AEAD, should be managed independently. This separation prevents unintended interactions or vulnerabilities between suites, ensuring the integrity and security guarantees of each algorithm suite are preserved.
Additionally, the same key <bcp14>MUST NOT</bcp14> be used for both key wrapping and content encryption, as it may introduce security risks.  It
creates algorithm confusion, increases the potential for key leakage, cross-suite attacks, and improper handling of the key.</t>
      </section>
      <section anchor="plaintext-compression">
        <name>Plaintext Compression</name>
        <t>Implementers are advised to review Section 3.6 of <xref target="RFC8725"/>, which states:
Compression of data <bcp14>SHOULD NOT</bcp14> be done before encryption, because such compressed data often reveals information about the plaintext.</t>
      </section>
      <section anchor="header-parameters">
        <name>Header Parameters</name>
        <t>Implementers are advised to review Section 3.10 of <xref target="RFC8725"/>, which comments on application processing of JWE Protected Headers.
Additionally, Unprotected Headers can contain similar information which an attacker could leverage to mount denial of service, forgery or injection attacks.</t>
      </section>
      <section anchor="ensure-cryptographic-keys-have-sufficient-entropy">
        <name>Ensure Cryptographic Keys Have Sufficient Entropy</name>
        <t>Implementers are advised to review Section 3.5 of <xref target="RFC8725"/>, which provides comments on entropy requirements for keys.
This guidance is relevant to both public and private keys used in both Key Encryption and Integrated Encryption.
Additionally, this guidance is applicable to content encryption keys used in Key Encryption mode.</t>
      </section>
      <section anchor="validate-cryptographic-inputs">
        <name>Validate Cryptographic Inputs</name>
        <t>Implementers are advised to review Section 3.4 of <xref target="RFC8725"/>, which provides comments on the validation of cryptographic inputs.
This guidance is relevant to both public and private keys used in both Key Encryption and Integrated Encryption, specifically focusing on the structure of the public and private keys.
These inputs are crucial for the HPKE KEM operations.</t>
      </section>
      <section anchor="use-appropriate-algorithms">
        <name>Use Appropriate Algorithms</name>
        <t>Implementers are advised to review Section 3.2 of <xref target="RFC8725"/>, which comments on the selection of appropriate algorithms.
This is guidance is relevant to both Key Encryption and Integrated Encryption.
When using Key Encryption, the strength of the content encryption algorithm should not be significantly different from the strengh of the Key Encryption algorithms used.</t>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>This document adds entries to <xref target="JOSE-IANA"/>.</t>
      <section anchor="ciphersuite-registration">
        <name>Ciphersuite Registration</name>
        <t>This specification registers a number of ciphersuites for use with HPKE.
A ciphersuite is a group of algorithms, often sharing component algorithms such as hash functions, targeting a security level.
An HPKE ciphersuite, is composed of the following choices:</t>
        <ul spacing="normal">
          <li>
            <t>HPKE Mode</t>
          </li>
          <li>
            <t>KEM Algorithm</t>
          </li>
          <li>
            <t>KDF Algorithm</t>
          </li>
          <li>
            <t>AEAD Algorithm</t>
          </li>
        </ul>
        <t>The "KEM", "KDF", and "AEAD" values are chosen from the HPKE IANA registry <xref target="HPKE-IANA"/>.</t>
        <t>For readability the algorithm ciphersuites labels are built according to the following scheme:</t>
        <artwork><![CDATA[
HPKE-<KEM>-<KDF>-<AEAD>
]]></artwork>
        <t>The "HPKE Mode" is described in Table 1 of <xref target="RFC9180"/>:</t>
        <ul spacing="normal">
          <li>
            <t>"Base" refers to "mode_base" described in Section 5.1.1 of <xref target="RFC9180"/>,
which only enables encryption to the holder of a given KEM private key.</t>
          </li>
          <li>
            <t>"PSK" refers to "mode_psk", described in Section 5.1.2 of <xref target="RFC9180"/>,
which authenticates using a pre-shared key.</t>
          </li>
          <li>
            <t>"Auth" refers to "mode_auth", described in Section 5.1.3 of <xref target="RFC9180"/>,
which authenticates using an asymmetric key.</t>
          </li>
          <li>
            <t>"Auth_Psk" refers to "mode_auth_psk", described in Section 5.1.4 of <xref target="RFC9180"/>,
which authenticates using both a PSK and an asymmetric key.</t>
          </li>
        </ul>
        <t>Implementations detect the use of modes by inspecting header parameters.</t>
      </section>
      <section anchor="json-web-signature-and-encryption-algorithms">
        <name>JSON Web Signature and Encryption Algorithms</name>
        <t>The following entries are added to the "JSON Web Signature and Encryption Algorithms" registry:</t>
        <section anchor="hpke-p256-sha256-a128gcm">
          <name>HPKE-P256-SHA256-A128GCM</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-P256-SHA256-A128GCM</t>
            </li>
            <li>
              <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(P-256, HKDF-SHA256) KEM, the HKDF-SHA256 KDF and the AES-128-GCM AEAD.</t>
            </li>
            <li>
              <t>Algorithm Usage Location(s): "alg"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-p384-sha384-a256gcm">
          <name>HPKE-P384-SHA384-A256GCM</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-P384-SHA384-A256GCM</t>
            </li>
            <li>
              <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(P-384, HKDF-SHA384) KEM, the HKDF-SHA384 KDF, and the AES-256-GCM AEAD.</t>
            </li>
            <li>
              <t>Algorithm Usage Location(s): "alg"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-p521-sha512-a256gcm">
          <name>HPKE-P521-SHA512-A256GCM</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-P521-SHA512-A256GCM</t>
            </li>
            <li>
              <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(P-521, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the AES-256-GCM AEAD.</t>
            </li>
            <li>
              <t>Algorithm Usage Location(s): "alg"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-x25519-sha256-a128gcm">
          <name>HPKE-X25519-SHA256-A128GCM</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-X25519-SHA256-A128GCM</t>
            </li>
            <li>
              <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(X25519, HKDF-SHA256) KEM, the HKDF-SHA256 KDF, and the AES-128-GCM AEAD.</t>
            </li>
            <li>
              <t>Algorithm Usage Location(s): "alg"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-x25519-sha256-chacha20poly1305">
          <name>HPKE-X25519-SHA256-ChaCha20Poly1305</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-X25519-SHA256-ChaCha20Poly1305</t>
            </li>
            <li>
              <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(X25519, HKDF-SHA256) KEM, the HKDF-SHA256 KDF, and the ChaCha20Poly1305 AEAD.</t>
            </li>
            <li>
              <t>Algorithm Usage Location(s): "alg, enc"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-x448-sha512-a256gcm">
          <name>HPKE-X448-SHA512-A256GCM</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-X448-SHA512-A256GCM</t>
            </li>
            <li>
              <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(X448, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the AES-256-GCM AEAD.</t>
            </li>
            <li>
              <t>Algorithm Usage Location(s): "alg"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
        <section anchor="hpke-x448-sha512-chacha20poly1305">
          <name>HPKE-X448-SHA512-ChaCha20Poly1305</name>
          <ul spacing="normal">
            <li>
              <t>Algorithm Name: HPKE-X448-SHA512-ChaCha20Poly1305</t>
            </li>
            <li>
              <t>Algorithm Description: Cipher suite for JOSE-HPKE in Base Mode that uses the DHKEM(X448, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the ChaCha20Poly1305 AEAD.</t>
            </li>
            <li>
              <t>Algorithm Usage Location(s): "alg"</t>
            </li>
            <li>
              <t>JOSE Implementation Requirements: Optional</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
            <li>
              <t>Algorithm Analysis Documents(s): TODO</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="json-web-signature-and-encryption-header-parameters">
        <name>JSON Web Signature and Encryption Header Parameters</name>
        <t>The following entries are added to the "JSON Web Key Parameters" registry:</t>
        <section anchor="ek">
          <name>ek</name>
          <ul spacing="normal">
            <li>
              <t>Header Parameter Name: "ek"</t>
            </li>
            <li>
              <t>Header Parameter Description: An encapsulated key as defined in { Section 5.1.1 of RFC9180 }</t>
            </li>
            <li>
              <t>Header Parameter Usage Location(s): JWE</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="pskid">
          <name>psk_id</name>
          <ul spacing="normal">
            <li>
              <t>Header Parameter Name: "psk_id"</t>
            </li>
            <li>
              <t>Header Parameter Description: A key identifier (kid) for the pre-shared key as defined in { Section 5.1.2 of RFC9180 }</t>
            </li>
            <li>
              <t>Header Parameter Usage Location(s): JWE</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="authkid">
          <name>auth_kid</name>
          <ul spacing="normal">
            <li>
              <t>Header Parameter Name: "auth_kid"</t>
            </li>
            <li>
              <t>Header Parameter Description: A key identifier (kid) for the asymmetric key as defined in { Section 5.1.3 of RFC9180 }</t>
            </li>
            <li>
              <t>Header Parameter Usage Location(s): JWE</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s):   RFCXXXX</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <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">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <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="RFC7516">
          <front>
            <title>JSON Web Encryption (JWE)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Hildebrand" initials="J." surname="Hildebrand"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Encryption (JWE) represents encrypted content using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries defined by that specification. Related digital signature and Message Authentication Code (MAC) capabilities are described in the separate JSON Web Signature (JWS) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7516"/>
          <seriesInfo name="DOI" value="10.17487/RFC7516"/>
        </reference>
        <reference anchor="RFC7518">
          <front>
            <title>JSON Web Algorithms (JWA)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications. It defines several IANA registries for these identifiers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7518"/>
          <seriesInfo name="DOI" value="10.17487/RFC7518"/>
        </reference>
        <reference anchor="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="RFC8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens that contain a set of claims that can be signed and/or encrypted. JWTs are being widely used and deployed as a simple security token format in numerous protocols and applications, both in the area of digital identity and in other application areas. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>
        <reference anchor="JOSE-IANA" target="https://www.iana.org/assignments/jose/jose.xhtml">
          <front>
            <title>JSON Web Signature and Encryption Algorithms</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8937">
          <front>
            <title>Randomness Improvements for Security Protocols</title>
            <author fullname="C. Cremers" initials="C." surname="Cremers"/>
            <author fullname="L. Garratt" initials="L." surname="Garratt"/>
            <author fullname="S. Smyshlyaev" initials="S." surname="Smyshlyaev"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="October" year="2020"/>
            <abstract>
              <t>Randomness is a crucial ingredient for Transport Layer Security (TLS) and related security protocols. Weak or predictable "cryptographically secure" 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="HPKE-IANA" target="https://www.iana.org/assignments/hpke/hpke.xhtml">
          <front>
            <title>Hybrid Public Key Encryption (HPKE) IANA Registry</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date year="2023" month="October"/>
          </front>
        </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" initials="H." surname="Tschofenig">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Transmute</organization>
            </author>
            <author fullname="Ajitomi, Daisuke" initials="A." surname="Daisuke">
              <organization>bibital</organization>
            </author>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <date day="12" month="July" year="2024"/>
            <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) function.  Authentication for
   HPKE in COSE is provided by COSE-native security mechanisms or by one
   of the authenticated variants of HPKE.

   This document defines the use of the HPKE with COSE.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-hpke-09"/>
        </reference>
      </references>
    </references>
    <?line 538?>

<section anchor="keys-used-in-examples">
      <name>Keys Used In Examples</name>
      <t>This private key and it implied public key are used the examples:</t>
      <sourcecode type="text"><![CDATA[
{
  "kid": "S6AXfdU_6Yfzvu0KDDJb0sFuwnIWPk6LMTErYhPb32s",
  "alg": "HPKE-P256-SHA256-A128GCM",
  "kty": "EC",
  "crv": "P-256",
  "x": "wt36K06T4T4APWfGtioqDBXCvRN9evqkZjNydib9MaM",
  "y": "eupgedeE_HAmVJ62kpSt2_EOoXb6e0y2YF1JPlfr1-I",
  "d": "O3KznUTAxw-ov-9ZokwNaJ289RgP9VxQc7GJthaXzWY"
}
]]></sourcecode>
      <t>This pre shared key is used in the examples:</t>
      <sourcecode type="text"><![CDATA[
{
  "kty": "oct",
  "kid": "our-pre-shared-key-id",
  "k": "anVnZW11anVnZW11Z29rb3Vub3N1cmlraXJla2FpamE"
}
]]></sourcecode>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This specification leverages text from <xref target="I-D.ietf-cose-hpke"/>. We would like to thank Matt Chanda, Ilari Liusvaara, Aaron Parecki and Filip Skokan for their feedback.</t>
    </section>
    <section numbered="false" anchor="document-history">
      <name>Document History</name>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Apply feedback from call for adoption.</t>
        </li>
        <li>
          <t>Provide examples of auth and psk modes for JSON and Compact Serializations</t>
        </li>
        <li>
          <t>Simplify description of HPKE modes</t>
        </li>
        <li>
          <t>Adjust IANA registration requests</t>
        </li>
        <li>
          <t>Remove HPKE Mode from named algorithms</t>
        </li>
        <li>
          <t>Fix AEAD named algorithms</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Created initial working group version from draft-rha-jose-hpke-encrypt-07</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+0823IqSXLvfEUv87DnjAUDSEKXWM8O4iJAAiQBQtLGhqbo
LqCh6W71BYTOasM/YO+bw2/eB3+CHeFnf4p/wP4EZ2ZV3wDdZmN2Z9czMXEE
TVVmVt6zKqszmUzK0z2DHyvpvssVa6TUV0NH15QLf2joqnLGV0rVVJ2V7emW
qXyqX5xVPytL3ZsozW6nrXSGU656Slcfm7o5VpipJYY3O93q53SKDYcOX8Rw
ABRFNxX8OZ1SmcfHlrM6VlxPS6U0SzXZHCjSHDbyMjr3Rpmp5fLMxJ7xDBfQ
MwZMcr2U6w/nuusCMm9lw5xGtVdLmf58yJ3jlAZjjlOqZbrcdH33WPEcn6eA
jt0UczgDerpc9R3dW6VTS8uZjR3Lt+GpIGvGV/BQO04pGSIY/+Iv+PfiskyP
iVep1IKbPmBSlAAC0puG74Ko9ACAI3tO8Wd8Pme6IYd9hwvMWs4YnzNHncDz
iefZ7vE33+AwfKQveDYY9g0++GboWEuXf4MAvkmnUinXA9bfM8MyAd+Kuylb
P1Z+41nqjuJajufwkQufVnP5wXN01dtRVGs+56YHT4Dpc2bbQORvUynmexPL
wYUDSYoy8g1DSKSnO/6cGdxdMke54pq2ogFAFTP1J4YyP1ba1kxn9FwFzh4r
J8wcA2EOp2cOH9OoM+aYzGMzOdLyTQ81oGFqcjKXPJpZpubpzndj/J4FimG5
G4TVmWlyV+m56sQacVMfJ6GWfFxxEu6EpmS9cApgeMya3NsGvwRK4jBcCnem
nL9j1S3f1NVJkoxT7syZuUqQwQhydighf2cinOQydRNUt5NVuh7nhsAtqOo4
Oo8/TVLUc5jpzn2Px/FZMOU7L/glq5sasQYUJkFp39Q9rgFstLIkIa2s0gQt
c2N0tGCljBvKSfynJDFdbowyDdf1AWoZDNI3PNC1OGVzAeR+eD9FGN9NLC+Q
OA0DOz1WAsNwEZxO4GANI+ubV8k3LeC7B0aEJnpVKxfy+SP58TB/sCc/HuUP
c/LjwX6+GH08jD4eBNMOCvv4Ef1BplFql46JACW0HPkfMAF0Gn4XT6SrJc85
4ENym8zzHb7uOEsGOERwsnNXTmTOmHvR+pfLZVZnJhMOAfzf2CRDFg4B/8k+
Try5kUohd5KrPzzahWXAZ3RqHyf+PfEBJ4F/GOugW6sPrgC9PP0jV0CzyZMr
HdWzwLErhVxhN5WB0JXCfxU2BDRM9eBrb6K7imtzVR/pKqmeovGRjr7hPXQD
qxQfQhTGt9S741tWxDNrNOKOqzBlATbNTA8epGyBDUKJwqNpEAGZM0S7d1YZ
V38CVbUNppsef/RcIoKBn1R1WweOKBGMbCpFmDBWyXHmCp34UDdZCNlUGDj6
OUcfH2BmNlicGDLnYGem7s6VT2fV1ucdjHPAJEdfiN9HvqmKxZ1Vap93aMmo
GUAKshRoja2EEgGmaTp+YwbKiaU+laqlyucQUBbcbzidMADh8QxAAZnZjrXQ
NQA+XKXIqExSWcWVAToi2wW9hFEKOAlcLkBeI0+y3w0SjaxUCwhxPqpYqBE4
1XdDKIK1lNkAAVmhW3Nd08C7pr6CyOQ5lubTkkAO79CmL1+kV3l+xiUyBUIN
n3NAxryUXLCr/BAVGQNrQMypUEl+6SbVZIsdcJMNIXJHziehxwOg17MUgy+4
w8aCGTspWKM5Rr13fduGNIJEB1rjklYg02wLTHeoGygioPnCcj3l0gf2+3OU
k2QTTQHwgCaLvIQIsECBQSAgSBWUCOmQi7Rz4gYmX66SbvW7vfSO+Ku0O/T5
qnrZb1xVK/i5Wy+dn4cfUnJEt97pn1eiT9HMcqfVqrYrYjI8VRKPUulW6TYt
tD7dueg1Ou3SeRo11UvoEOSPuKAhV1Amju1wVD3mpkCkqqMP4QvMOSlf/Ncf
83ugCb+QYQdUQXzBwANflqC4AptlGiv5FRi7SkE2xiHLAijMMBSwYN1jBmRq
DAQ7sZamMuEOB25+/RvkzG+PlV8NVTu/9618gAtOPAx4lnhIPNt8sjFZMHHL
oy1oQm4mnq9xOklv6TbxPeB77OGvfm2AzSqZ/OGvv01tU6Ee5Fa6aRnWeLVV
/cHQhcWPLMOwluTMqSrRWQQEJDl3ITZmELyHco4ZCRr5p3L1DHwiagI5EZIy
2TkmB8/P2VTmXYFmCwDhKBCAPbvCAWRekXOQXio0edKEl4G4MSDk2/kPgSKp
j4WP1lr4AA/Nt82qRBGlthZRtswoJTx4dS3AlFzXUnX6qQIBRhEBZjugKBYl
YcqJ2+eBPnXA8S10vnwhhxBGDfxcWsrcQr8NnMTgkQhmgyolVl+L3Aq/Y9jg
Y2dtWTto6I4MOYANAGnoTmQAEFIL3H12DWJSo94CxSA/EKociy6zQJVDPw5f
cDaU0y5/8GE4OKM3qEoNgL1QwBjjtHCXMC5NjnFogdDAJbqIFh0YhncP8iiA
N+EMkg2asKT5+kJO99hYTOdz21uRFyRWI12vszOkhSigbOIt3IJsjMpDl8xg
K7Y14yWCMb8zwL5pkAADD3y+hpeSC3MdtxukcDKgAscp4hpCqVCYUAYRFxKB
pIexW8mj0iUVt0FatxPPZQLVFRQKZXV9hArRFL/eD5nL0xiexVdMn+5td5YW
bskjT0qpmHQfuCg1zJMkF23mQPHnYcqbhsn3uiblSOBm8BXIQyaGS9V0zJCR
Py44B2CiKA5h1bqpGr6GPrlszW1I5Yn73fgo4adiLOly4VR2sxFbsG57ft6B
QtskpiIUynfeC6qwBgqWUOaOx4RxKyNO1ZpLAqKALRcn4IScT64PgNSA2fyR
zW2Q4stL1CwAbVpemG4l4hXFpViuncx6KfOGfBULa8QSengXnm5RRKmHW7Rc
hQpiyIX1k/tNMwayHfpelKMQlfwRVSMc9uK6YP1doD9O1MsmhpBMS+KUpESI
gMkvosGdLsWwMLC7ySBHegk6jGqLRoI/uqC8goou93wbvYQKODZ040uoHfuo
G9L2FAoaX0GMeYTcF3L0tWhTsm0jCB6NoAKnugExTpgIJOBMVVQmLzD7aJZL
axcKtQJRB2iSQtcj0K8QfigsJE46kcHCTQbSZxSpA85fd4TbDziSZrYfmLaN
zvoF69nLFpOmeIimCEMhc+WKSGfRxEXa7Opz3NvEbxiN2NjhXGTWEVWfQrdV
LVfqmWo3/Tkr6gNUj8gDpSkKd2xufhIRrcuZAR8pD06oMkWm14MJAXhBPRG7
pbCFBf4fwurIx41nwOAtORceAhKMCAB82VmrG8I0FL2skhbDIJvBsWlkhsPB
R9KId61R8iMBJ1y3yz0EScCIuFeTo1h+EMMayw27HrcVqGZAxKFNbDhfqcqw
ZoeDxIXHcUSepBq427kCR3bOhXP7OEW4rlK33Gh8ArFYuGNwEbq2Ork24End
WmJYhcACZXQol40w/UnQipZGnm0oXIPKcAsIvRzIFxUWnm2PJFgKmK4HaKFy
/vFWpPzud8ovs7/EPyelbrW41786/yRX9fmz8ERRlg7TQGvBwScegZG5oWIg
oZgEFPd8x0CiCC1fG79WGsRknt2eibyV9OJP8rsgMqhQ1jGvgVvPeDkDqUXe
/TWw8uH2HHgnTH83lv6Jz6hKG1m+qQX5XIRSBNGs3BfaXOs72EHhvEf51Vp+
SlJCijHtYEGKjbtGiusxzKREWEb46ey7oYj0HFfjbfMQwjrSmu6ks0oDPJWN
m65uzL3nN9IjnEtGPVoJ+nQztJ6gJnnZ0cpqBesxD08DJImSJqKEMnQb1gY1
LEynapV8OFIc27SUqSlWMTGRxjbTErULhTs83FlBKDY1Q0YHKWWimsd8/gsM
fjsBVlqlW+Sy9DdvQwIOQBYebN9smZoOVfoetDT9Yxq0RAjl2U5Qm9HiMC+b
czxgdV+lFEwFlADZ/RaZ0cgXCSy8QF4sgcNcKMZJyXqhYELrXaHjUbaDJ8Oe
w6JiZ73wzyonuDc+YpBV76DdwACqTiGjNihbtH2soyAvIqCSBxgVlCC2gDXA
xKVOm3iOI2oq2vYmp/ToZcKyAXP4F1iAyVVhI7nSszwraj+AhWEmOgYIT5Aa
kINcgNdY9TERFbyg79f4nUw9rDtEHcaVux1UFyTHwP3ILpQjF/5QzIfl0new
PQEghom2EDzHV7FK0j6wlNBqKUqOdG7QlDho4mDSZVlgRGKfnyIvxlDMOoQQ
Eo5BeBYZTS9CJSF9EPEzKCuqokpLpUqJSgNWHW6c96wZR/f9+9//PsVXzcnw
VNU7erPRr3q18+vSqt279fq5yUlr2i+c96uPremkfpnL6eflpjGct3DsjN00
8LvDBpf4Pa/O94pscJ27m9rL2xuAedMqDgu1vHY6LgJvnPObK0sb5HW13rSH
5mVRLUwm571Gvj21C8PCVeNytza9vtZqw+vD3XbfHqg3xqQ3nbBuvnbdmtZ2
r6u17u3TZHb1NPGv+/npnXEC8s9lT8ru4vaxV2/tlTv3neXl4/muMWtWNGO5
269MHwuP7aNW48YcXj+NeuNac27dV93Co1bPjG7do+rNqH5/vb/bHLcGo/78
wDmp3FvVfT7qZ7MH9wtWVM1l2Wi5y4PJgfFgzwte2akftWeq3sqMj/psqF0M
1A5vXM1Lo1y+fX57ejAwD0c1y5rUDfV0rOXMyQHgPDIX9Zp+4NaLs87NARRJ
J+bivG9dOA98NdjraTfW/c3hbW/SPhsdndRWg9NVrTiacmOoq/vT7m3ZqDFu
tmY9c2rXH2uDvDvwdf/uet7JVztPjtH2vAGkHCjOVGlEegGRJfABUtBfUgq4
+cBzC01KHytf6HySIvSxiMiZi8J+MdOtl/BPKV84PC230jtiGGrhsYhs8gmG
CXjiO+YxNngckwNzjy2MIcfT5SzjTfz5EKKf6R27E5YBoMcLS6uXH9T+oDq/
P9hvXj+sWPvw7uyyX8gve6Ur9VA7PTT7LXV00ceekucdIp2tDItpEcmIUm5J
HEMM1+dp0R8jCdNdNyAsGEXn7SHlzNfWB8AjHXeKgiEQsmFI/qBwdHC4v3eU
D7jwaAePjwrFozzSmHoW/AdLJDuLmaH4LmOF2GLdFAiS8hOwxV57Vru9m19d
3zzd3d2ZdkHrnZxfVa/ObqcnT1fm9e5wZtz0T91Cr5rvX90071jtRG89NZ8a
+hLgtZ2bgjFrTC19uHu9Or85Wd1180/stLa6G1x6rHC9fz6A32Hs7c11jtWO
/rI0mzmS9FpSApI4qRxcXluad5qpLW9L3fFwt/jk9576ZfUwx/TbZbfY7HSq
meL9hPdPV6U7L6P2c4f5Q75n3T5cHPDhiT/YPeu1jqqXpdyitT8a2MXJVGKL
JRaA6u7xwbu1rPn4+vJU9cxFvnFfBdeWbzd48+ChuSzo197Dsr/cHd2ww9pZ
RsBgZAnpw2bmwuuclab87NbqZPamqxP97kabqPP+WDudGI3T2uSuXE0H2vnX
4B26xdLNSOvfF29HTws/d1apNIc5t+YvzcbgYlY8b/Wqzu3kYrhbcAM0MnsF
TJbvZCB+ZgAYBPAMiDMDP4QWL/PaH5OkyGEF2Tqi+99//ed/E/lZ+PgXUpJh
vZ0otzGPEBP/8O///Q//+N//8sf/+c8/QPqwpINb7Blg2i9CuX61VmLKDTJM
VbXYTmqwHwk4MbvBvUZX13B/UnepgPle7lP9HUr2bPA9pg3fX3VLmU6pepHZ
Pdz7Pg5tyFWG25HB0Q3tQWw7dHmteg2AeNsKC1/umW4BgKxkrkQmtgPd1zcv
Xi3K36hmsUZYr2g/WLmK+tKlBkIXzFCsLCwGqeUo2gZraEg8JJJQpQSNSFG5
T4M/0oUVwgiIjrYCNvfWf3hl+D6osSrxgyCSnI2zcv0064cVnC8cNW7sGNNG
4v5aDbpx9LK+oHVa9M3d+gDcQbbwIsB4SYuKnChmtxSyVPFGA18Q3Z9Q725w
5uh9nPm5+P25+H1X8Utm/Sk8WPn8aiHcCk4Qr6ITxPj55Wvpd5BSn7R6jb2r
XLsdpohgc5isnefqlcVdU38qFRer3vW2hK7zUCg+Hi1su3/unLafymZhyk7u
u0amu5wuDniupI7NSf9qv+Q50+qosChOOc8dDdqZNs/UG6c3J+NLe9y8UCfj
HB+05+PFXudJ328IVGj0eA3h3DSAzKvbUfmpde/sT4/c8+plIjVUT2v5Yflk
otWbBhtcGepS/BzFbxj1G0qMvsiO2c08+HS3Pjfszri0V8/r91eXk97eXnt5
4C4qy/7Don0lMyuYOkmmjD84+1MfL8v3xsArFE4a0/p+adA9r5fvZvejzLy/
mxns3Xmqv5+5Gy57sxB5lKEm05f4AG7PEsQhed5KzImNQ2k6JOoLJCf5yyM+
b5qng+7lUW5ieLn6wXCkjkdsWajcVTMPD4t7dVnau6+Y9+XZ+VM1OZuQFafL
fKm8/3CUeeDL5cnkqHK2f/vUr593rHHPOq10beu21NTaVqaaDic/p+J/n3fe
EJptFquVnD41x2V9UDusa/cXT70VW2mFzvyqdnDJnN71yB9Mi9rydfm9L+3/
Myb6H0j2/3wJf1zJZlQ8NvbytxVz0us1itOudtArFpzz5VO57N17Jw/t/fOa
Zel3B/ym6U5y+U4uM8mcXBabPevs5qh/U1ne766M4U1Pvx3ML26Mwqg9d/ZO
+GU6qQXw72/fWdYlC5F/+g+ltVIMH3J/xWOQPolyQnfQ3fb0OVdODGzPhOza
U0bMMKh/Fly8q+Bk4UVeLBVlDRioSFgNxZK5n6vLP5mkH13Rnt9Tm9qQWSnM
czj2gcdq0eBSGl2Ugd8cFnZGb3QmwgNRpVqyNAtyibBxXk0AwUsJ8b50WQ47
fGQ5PGhAwV4zZriWSDU28sKgfcR1/bnsZpDNNTAUEhfsCed0Jy88eXu5jRUJ
lq1ImBbO2SwAiQ06hMMWXVSQtZgqxy6fObUTzBFWDLKGBZo+9KmAj245UJWA
lIqyGkt10cvke1S8Ey7VsmV/W6xZI1goNnJjJkvtgWG6SNc94v04sgkHVNZL
XCk4q7ayWDkTbEqJgwRYZIuuYugz7DDokvCSxwwu9ub33M+JrixYB6jWGu5s
0NQDcpNXUUTvHxXO26gN1udwQ8eGViwJXbBR0ernADHW3MREX3TssAXeRkTd
sEx5/rrQVU5rw82AUtjCQ8fT+GjgiDuFRMkOHc9S7xPBEwiMlTKmbj3qn0+e
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
6OwKVO1dAAA=

-->

</rfc>
