<?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-rfc2629 version 1.4.19 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-celi-wiggers-tls-authkem-01" category="info" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.9.1 -->
  <front>
    <title abbrev="AuthKEM">KEM-based Authentication for TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-celi-wiggers-tls-authkem-01"/>
    <author initials="S." surname="Celi" fullname="Sofía Celi">
      <organization>Cloudflare</organization>
      <address>
        <email>cherenkov@riseup.net</email>
      </address>
    </author>
    <author initials="P." surname="Schwabe" fullname="Peter Schwabe">
      <organization>Radboud University &amp; MPI S&amp;P</organization>
      <address>
        <email>peter@cryptojedi.org</email>
      </address>
    </author>
    <author initials="D." surname="Stebila" fullname="Douglas Stebila">
      <organization>University of Waterloo</organization>
      <address>
        <email>dstebila@uwaterloo.ca</email>
      </address>
    </author>
    <author initials="N." surname="Sullivan" fullname="Nick Sullivan">
      <organization>Cloudflare</organization>
      <address>
        <email>nick@cloudflare.com</email>
      </address>
    </author>
    <author initials="T." surname="Wiggers" fullname="Thom Wiggers">
      <organization>Radboud University</organization>
      <address>
        <email>thom@thomwiggers.nl</email>
      </address>
    </author>
    <date year="2022" month="March" day="07"/>
    <area>General</area>
    <workgroup>TLS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document gives a construction for a Key Encapsulation Mechanism (KEM)-based
authentication mechanism in TLS 1.3. This proposal authenticates peers via a key
exchange protocol, using their long-term (KEM) public keys.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    mailing list (),
  which is archived at <eref target=""/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/claucece/draft-celi-wiggers-tls-authkem"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>DISCLAIMER: This is a work-in-progress draft.</t>
      <t>This document gives a construction for KEM-based authentication in TLS
1.3. Authentication happens via asymmetric cryptography by the usage of
KEMs advertised as the long-term KEM public keys in the Certificate.</t>
      <t>TLS 1.3 is in essence a signed key exchange protocol (if using certificate-based
authentication). Authentication in TLS 1.3 is achieved by signing the handshake
transcript with digital signatures algorithms. KEM-based authentication provides
authentication by deriving a shared secret that is encapsulated against the
public key contained in the Certificate. Only the holder of the private key
corresponding to the certificate's public key can derive the same shared secret
and thus decrypt it's peers messages.</t>
      <t>This approach is appropriate for endpoints that have KEM public keys. Though
this is currently rare, certificates can be issued with (EC)DH public keys as
specified for instance in <xref target="RFC8410" format="default"/>, or using a delegation
mechanism, such as delegated credentials <xref target="I-D.ietf-tls-subcerts" format="default"/>.</t>
      <t>In this proposal, we use the DH-based KEMs from <xref target="RFC9180" format="default"/>. We
believe KEMs are especially worth discussing in the context of the TLS protocol
because NIST is in the process of standardizing post-quantum KEM algorithms to
replace "classic" key exchange (based on elliptic curve or finite-field
Diffie-Hellman) <xref target="NISTPQC" format="default"/>.</t>
      <t>This proposal draws inspiration from <xref target="I-D.ietf-tls-semistatic-dh" format="default"/>, which is in
turn based on the OPTLS proposal for TLS 1.3 <xref target="KW16" format="default"/>. However, these proposals
require a non-interactive key exchange: they combine the client's public key with
the server's long-term key. This imposes an extra requirement: the ephemeral and
static keys MUST use the same algorithm, which this proposal does not require.
Additionally, there are no post-quantum proposals for a non-interactive key
exchange currently considered for standardization, while several KEMs are on the
way.</t>
      <section anchor="organization" numbered="true" toc="default">
        <name>Organization</name>
        <t>After a brief introduction to KEMs, we will introduce the AuthKEM authentication
mechanism. For clarity, we discuss unilateral and mutual authentication separately.
Next, we introduce the abbreviated AuthKEM handshake, and its opportunistic
client authentication mechanism. In the remainder of the draft, we will discuss
the necessary implementation mechanics, such as code points, extensions, new
protocol messages and the new key schedule.</t>
      </section>
    </section>
    <section anchor="requirements-notation" numbered="true" toc="default">
      <name>Requirements Notation</name>
      <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&nbsp;14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
    </section>
    <section anchor="terminology" numbered="true" toc="default">
      <name>Terminology</name>
      <t>The following terms are used as they are in <xref target="RFC8446" format="default"/></t>
      <t>client:  The endpoint initiating the TLS connection.</t>
      <t>connection:  A transport-layer connection between two endpoints.</t>
      <t>endpoint:  Either the client or server of the connection.</t>
      <t>handshake:  An initial negotiation between client and server that
  establishes the parameters of their subsequent interactions
  within TLS.</t>
      <t>peer:  An endpoint.  When discussing a particular endpoint, "peer"
  refers to the endpoint that is not the primary subject of
  discussion.</t>
      <t>receiver:  An endpoint that is receiving records.</t>
      <t>sender:  An endpoint that is transmitting records.</t>
      <t>server:  The endpoint that responded to the initiation of the TLS connection.
  i.e. the peer of the client.</t>
      <section anchor="key-encapsulation-mechanisms" numbered="true" toc="default">
        <name>Key Encapsulation Mechanisms</name>
        <t>As this proposal relies heavily on KEMs, which are not originally
used by TLS, we will provide a brief overview of this primitive.
Other cryptographic operations will be discussed later.</t>
        <t>A Key Encapsulation Mechanism (KEM) is a cryptographic primitive that defines
the methods <tt>Encapsulate</tt> and <tt>Decapsulate</tt>. In this draft, we extend these
operations with context separation strings:</t>
        <t><tt>Encapsulate(pkR, context_string)</tt>:    Takes a public key, and produces a shared secret and encapsulation.</t>
        <t><tt>Decapsulate(enc, skR, context_str)</tt>:  Takes the encapsulation and the private key. Returns the shared secret.</t>
        <t>We implement these methods through the KEMs defined in <xref target="RFC9180" format="default"/>
to export shared secrets appropriate for using with the HKDF in TLS 1.3:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
def Encapsulate(pk, context_string):
  enc, ctx = HPKE.SetupBaseS(pk, "tls13 auth-kem " + context_string)
  ss = ctx.Export("", HKDF.Length)
  return (enc, ss)
    
def Decapsulate(enc, sk, context_string):
  return HPKE.SetupBaseR(enc, 
                         sk, 
                         "tls13 auth-kem " + context_string)
             .Export("", HKDF.Length)
]]></artwork>
        <t>Keys are generated and encoded for transmission following the conventions in <xref target="RFC9180" format="default"/>.</t>
      </section>
    </section>
    <section anchor="full-15-rtt-authkem-handshake-protocol" numbered="true" toc="default">
      <name>Full 1.5-RTT AuthKEM Handshake Protocol</name>
      <t>Figure 1 below shows the basic KEM-authentication (KEM-Auth) handshake,
without client authentication:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
       Client                                     Server

Key  ^ ClientHello
Exch | + key_share
     v + signature_algorithms
                          -------->
                                             ServerHello  ^ Key
                                             + key_share  v Exch
                                   <EncryptedExtensions>
                                           <Certificate>  ^
       <KEMEncapsulation>  -------->                      |
       {Finished}          -------->                      | Auth
       [Application Data]  -------->                      |
                           <--------          {Finished}  v

       [Application Data]  <------->  [Application Data]

        +  Indicates noteworthy extensions sent in the
           previously noted message.
        <> Indicates messages protected using keys
           derived from a [sender]_handshake_traffic_secret.
        {} Indicates messages protected using keys
           derived from a
           [sender]_authenticated_handshake_traffic_secret.
        [] Indicates messages protected using keys
           derived from [sender]_application_traffic_secret_N.

       Figure 1: Message Flow for KEM-Authentication (KEM-Auth)
                 Handshake without client authentication.
]]></artwork>
      <t>This basic handshake captures the core of AuthKEM.
Instead of using a signature to authenticate the handshake, the client
encapsulates a shared secret to the server's certificate public key.
Only the server that holds the private key corresponding to the certificate public
key can derive the same shared secret.
This shared secret is mixed into the handshake's key schedule.
The client does not have to wait for the server's <tt>Finished</tt> message before it
can send data.
The client knows that its message can only be decrypted if the server was able
to derive the authentication shared secret encapsulated in the <tt>KEMEncapsulation</tt> message.</t>
      <t><tt>Finished</tt> messages are sent as in TLS 1.3, and achieve full explicit authentication.</t>
      <section anchor="client-authentication" numbered="true" toc="default">
        <name>Client authentication</name>
        <t>For client authentication, the server sends the <tt>CertificateRequest</tt> message as in <xref target="RFC8446" format="default"/>.
This message can not be authenticated in the AuthKEM handshake: we will discuss
the implications below.</t>
        <t>As in <xref target="RFC8446" format="default"/>, section 4.4.2, if and only if the client receives <tt>CertificateRequest</tt>,
it MUST send a <tt>Certificate</tt> message.
If the client has no suitable certificate, it MUST send a <tt>Certificate</tt> message
containing no certificates.
If the server is satisfied with the provided certificate, it MUST send back
a <tt>KEMEncapsulation</tt> message, containing the encapsulation to the client's certificate.
The resulting shared secret is mixed into the key schedule.
This ensures any messages sent using keys derived from it are covered by the authentication.</t>
        <t>The AuthKEM handshake with client authentication is given in Figure 2.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
       Client                                     Server

Key  ^ ClientHello
Exch | + key_share
     v + signature_algorithms
                          -------->
                                             ServerHello  ^ Key
                                             + key_share  v Exch
                                   <EncryptedExtensions>  ^ Server
                                    <CertificateRequest>  v Params
                                           <Certificate>  ^
     ^ <KEMEncapsulation>                                 |
     | {Certificate}       -------->                      |
Auth |                     <--------  {KEMEncapsulation}  | Auth
     v {Finished}          -------->                      |
       [Application Data]  -------->                      |
                           <-------           {Finished}  v

       [Application Data]  <------->  [Application Data]

        +  Indicates noteworthy extensions sent in the
           previously noted message.
        <> Indicates messages protected using keys
           derived from a [sender]_handshake_traffic_secret.
        {} Indicates messages protected using keys
           derived from a
           [sender]_authenticated_handshake_traffic_secret.
        [] Indicates messages protected using keys
           derived from [sender]_application_traffic_secret_N.

       Figure 2: Message Flow for KEM-Authentication (KEM-Auth)
                 Handshake with client authentication.
]]></artwork>
        <t>If the server is not satisfied with the client's certificates, it MAY, at its
discretion, decide to continue or terminate the handshake.</t>
        <t>Unfortunately, AuthKEM client authentication requires an extra round-trip.
Clients that know the server's long-term public KEM key MAY choose to use the abbreviated AuthKEM handshake and opportunistically send the client certificate as a 0-RTT-like message.
We will discuss this later.</t>
      </section>
      <section anchor="relevant-handshake-messages" numbered="true" toc="default">
        <name>Relevant handshake messages</name>
        <t>After the Key Exchange and Server Parameters phase of TLS 1.3 handshake, the
client and server exchange implicitly authenticated messages.
KEM-based authentication uses the same set of messages every time that
certificate-based authentication is needed.  Specifically:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Certificate</tt>:  The certificate of the endpoint and any per-certificate
extensions.  This message is omitted by the client if the server did not
send a CertificateRequest message (thus indicating that the client should not
authenticate with a certificate). For AuthKEM, <tt>Certificate</tt> MUST include the
long-term KEM public key. Certificates MUST be handled in accordance
with <xref target="RFC8446" format="default"/>, section 4.4.2.4.  </t>
            <t>
Certificates MUST be handled in accordance with <xref target="RFC8446" format="default"/>, section 4.4.2.4.</t>
          </li>
          <li>
            <tt>KEMEncapsulation</tt>: A key encapsulation against the certificate's long-term public key, which yields an implicitly authenticated shared secret.</li>
        </ul>
      </section>
      <section anchor="overview-of-key-differences-with-rfc8446-tls-13" numbered="true" toc="default">
        <name>Overview of key differences with RFC8446 TLS 1.3</name>
        <ul spacing="normal">
          <li>New types of <tt>signature_algorithms</tt> for KEMs.</li>
          <li>Public keys in certificates are KEM algorithms</li>
          <li>New handshake message <tt>KEMEncapsulation</tt></li>
          <li>The key schedule mixes in the shared secrets from the authentication.</li>
          <li>The <tt>Certificate</tt> is sent encrypted with a new handshake encryption key.</li>
          <li>The client sends <tt>Finished</tt> before the server.</li>
          <li>The clients sends data before the server has sent <tt>Finished</tt>.</li>
        </ul>
      </section>
      <section anchor="implicit-and-explicit-authentication" numbered="true" toc="default">
        <name>Implicit and explicit authentication</name>
        <t>The data that the client MAY transmit to the server before having received the
server's <tt>Finished</tt> is encrypted using ciphersuites chosen based on the
client's and server's advertised preferences in the <tt>ClientHello</tt> and <tt>ServerHello</tt> messages.
The <tt>ServerHello</tt> message can however not be authenticated before the <tt>Finished</tt> message
from the server is verified. The full implications of this are discussed in the
Security Considerations section.</t>
        <t>Upon receiving the client's authentication messages, the server responds with its
<tt>Finished</tt> message, which achieves explicit authentication.
Upon receiving the server's <tt>Finished</tt> message, the client achieves explicit
authentication.
Receiving this message retroactively confirms the server's cryptographic parameter choices.</t>
      </section>
      <section anchor="authenticating-certificaterequest" numbered="true" toc="default">
        <name>Authenticating CertificateRequest</name>
        <t>The <tt>CertificateRequest</tt> message can not be authenticated during the AuthKEM handshake;
only after the <tt>Finished</tt> message from the server has been processed, it can be
proven as authentic. The security implications of this are discussed later.</t>
        <t><strong>This is dicussed in <eref target="https://github.com/claucece/draft-celi-wiggers-tls-authkem/issues/16">Github issue #16</eref>.
We would welcome feedback there.</strong></t>
        <t>Clients MAY choose to only accept post-handshake authentication.</t>
        <t>TODO: Should they indicate this? TLS Flag?</t>
      </section>
    </section>
    <section anchor="abbreviated-authkem-with-pre-shared-public-kem-keys" numbered="true" toc="default">
      <name>Abbreviated AuthKEM with pre-shared public KEM keys</name>
      <t>When the client already has the server's long-term public key, we can do a more
efficient handshake.
The client will send the encapsulation to the server's long-term public key in a <tt>ClientHello</tt> extension.
An overview of the abbreviated AuthKEM handshake is given in Figure 3.</t>
      <t>A client that already knows the server, might also already know that it will be
required to present a client certificate. This is expected to be especially
useful in server-to-server scenarios. The abbreviated handshake allows to encrypt
the certificate and send it like early data.</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
       Client                                        Server
Key  ^ ClientHello
Exch | + key_share
&    | + stored_auth_key
Auth | + signature_algorithms
     | + early_auth*
     | + early_data*
     | (Certificate*)
     | (Application Data*)    -------->        ServerHello  ^ Key
     |                                         + key_share  |
     |                                   + stored_auth_key  |
     |                                       + early_auth*  | Exch,
     |                                       + early_data*  | Auth &
     |                               {EncryptedExtensions}  | Server
     |                                 {KEMEncapsulation*}  | Params
     |                       <--------          {Finished}  v
     |                       <-------- [Application Data*]
     | (EndOfEarlyData)
     v {Finished}            -------->

       [Application Data]    <------->  [Application Data]

        +  Indicates noteworthy extensions sent in the
           previously noted message.
        *  Indicates optional or situation-dependent
           messages/extensions that are not always sent.
        <> Indicates messages protected using keys
           derived from a
           client_early_handshake_traffic_secret.
        () Indicates messages protected using keys derived
           from a client_early_traffic_secret.
        {} Indicates messages protected using keys
           derived from a
           [sender]_handshake_traffic_secret.
        [] Indicates messages protected using keys
           derived from [sender]_application_traffic_secret_N.

      Figure 3: Abbreviated AuthKEM handshake, with optional
                opportunistic client authentication.
]]></artwork>
      <section anchor="sec-authkem-pdk-negotiation" numbered="true" toc="default">
        <name>Negotiation</name>
        <t>A client that knows a server's long-term KEM public key MAY choose to attempt the abbreviated AuthKEM handshake.
If it does so, it MUST include the <tt>stored_auth_key</tt> extension in the <tt>ClientHello</tt> message.
This message MUST contain the encapsulation against the long-term KEM public key.
Details of the extension are described below.
The shared secret resulting from the encapsulation is mixed in to the EarlySecret computation.</t>
        <t>The client MAY additionally choose to send a certificate to the server.
It MUST know what ciphersuites the server accepts before it does so.
If it chooses to do so, it MUST send the <tt>early_auth</tt> extension to the server.
The <tt>Certificate</tt> is encrypted with the <tt>client_early_handshake_traffic_secret</tt>.</t>
        <t>The server MAY accept the abbreviated AuthKEM handshake.
If it does, it MUST reply with a <tt>stored_auth_key</tt> extension.
If it does not accept the abbreviated AuthKEM handshake, for instance because it
does not have access to the correct secret key anymore, it MUST NOT reply with
a <tt>stored_auth_key</tt> extension.
The server, if it accepts the abbreviated AuthKEM handshake, MAY additionally
accept the <tt>Certificate</tt> message. If it does, it MUST reply with a <tt>early_auth</tt> extension.</t>
        <t>If the client, who sent a <tt>stored_auth_key</tt> extension, receives
a <tt>ServerHello</tt> without <tt>stored_auth_key</tt> extension, it MUST recompute <tt>EarlySecret</tt> without
the encapsulated shared secret.</t>
        <t>If the client sent a <tt>Certificate</tt> message, it MUST drop that message from its transcript.
The client MUST then continue with a full AuthKEM handshake.</t>
      </section>
      <section anchor="rtt-forward-secrecy-and-replay-protection" numbered="true" toc="default">
        <name>0-RTT, forward secrecy and replay protection</name>
        <t>The client MAY send 0-RTT data, as in <xref target="RFC8446" format="default"/> 0-RTT mode.
The <tt>Certificate</tt> MUST be sent before the 0-RTT data.</t>
        <t>As the <tt>EarlySecret</tt> is derived only from a key encapsulated to a long-term secret, it does not have forward secrecy.
Clients MUST take this into consideration before transmitting 0-RTT data or opting in to early client auth.
Certificates and 0-RTT data may also be replayed.</t>
        <t>This will be discussed in full under Security Considerations.</t>
      </section>
    </section>
    <section anchor="implementation" numbered="true" toc="default">
      <name>Implementation</name>
      <t>In this section we will discuss the implementation details such as extensions
and key schedule.</t>
      <section anchor="negotiation-of-authkem" numbered="true" toc="default">
        <name>Negotiation of AuthKEM</name>
        <t>Clients will indicate support for this mode by negotiating it as if
it were a signature scheme (part of the <tt>signature_algorithms</tt> extension). We thus
add these new signature scheme values (even though, they are not signature
schemes) for the KEMs defined in <xref target="RFC9180" format="default"/> Section 7.1. Note that
we will be only using their internal KEM's API defined there.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
enum {
  dhkem_p256_sha256   => TBD,
  dhkem_p384_sha384   => TBD,
  dhkem_p521_sha512   => TBD,
  dhkem_x25519_sha256 => TBD,
  dhkem_x448_sha512   => TBD,
}
]]></artwork>
        <t>When present in the <tt>signature_algorithms</tt> extension, these values indicate AuthKEM support with the specified key exchange mode.
These values MUST NOT appear in <tt>signature_algorithms_cert</tt>, as this extension specifies the signing algorithms by which certificates are signed.</t>
      </section>
      <section anchor="clienthello-and-serverhello-extensions" numbered="true" toc="default">
        <name>ClientHello and ServerHello extensions</name>
        <t>A number of AuthKEM messages contain tag-length-value encoded extensions structures.
We are adding those extensions to the <tt>ExtensionType</tt> list from TLS 1.3.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
enum {
  ...
  stored_auth_key (TBD),                 /* RFC TBD */
  early_auth (TBD),                      /* RFC TBD */
  (65535)
} ExtensionType;
]]></artwork>
        <t>The table below indicates the messages where a given extension may
appear:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
+---------------------------------------+-------------+
| Extension                             |    KEM-Auth |
+---------------------------------------+-------------+
| stored_auth_key [RFCTBD]              |      CH, SH |
|                                       |             |
| early_auth  [RFCTBD]                  |      CH, SH |
|                                       |             |
+---------------------------------------+-------------+
]]></artwork>
        <section anchor="stored-auth-key" numbered="true" toc="default">
          <name>Stored Auth Key</name>
          <t>To transmit the early authentication encapsulation in the abbreviated AuthKEM handshake, this document defines a new extension type (<tt>stored_auth_key (TBD)</tt>).
It is used in ClientHello and ServerHello messages.</t>
          <t>The extension_data field of this extension, when included in the
ClientHello, MUST contain the <tt>StoredInformation</tt> structure.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
      select (type) {
        case client:
          opaque key_fingerprint<1..255>;
          opaque ciphertext<1..2^16-1>
        case server:
          AcceptedAuthKey '1';
      } body;
} StoredInformation
]]></artwork>
          <t>This extension MUST contain the folowing information when included in <tt>ClientHello</tt> messages:</t>
          <ul spacing="normal">
            <li>The client indicates the public key encapsulated to by its fingerprint</li>
            <li>The client submits the ciphertext</li>
          </ul>
          <t>The server MUST send the extension back as an acknowledgement, if and only if it wishes to negotiated the abbreviated AuthKEM handshake.</t>
          <t>The fingerprint calculation proceeds this way:</t>
          <ol spacing="normal" type="1"><li>Compute the SHA-256 hash of the input data. Note that the computed
hash only covers the input data structure (and not any type and
length information of the record layer).</li>
            <li>Use the output of the SHA-256 hash.</li>
          </ol>
          <t>If this extension is not present, the client and the server MUST NOT negotiate the abbreviated AuthKEM handshake.</t>
          <t>The presence of the fingerprint might reveal information about the identity of the server that the client has.
This is discussed further under <xref target="sec-considerations" format="default">Security Considerations</xref>.</t>
        </section>
        <section anchor="early-authentication" numbered="true" toc="default">
          <name>Early authentication</name>
          <t>To indicate the client will attempt client authentication in the abbreviated AuthKEM handshake, and for the server to indicate acceptance of attempting this authentication mechanism,
we define the ```early_auth (TDB)`` extension.
It is used in ClientHello and ServerHello messages.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
} EarlyAuth
]]></artwork>
          <t>This is an empty extension.</t>
          <t>It MUST NOT be sent if the <tt>stored_auth_key</tt> extension is not present.</t>
        </section>
      </section>
      <section anchor="protocol-messages" numbered="true" toc="default">
        <name>Protocol messages</name>
        <t>The handshake protocol is used to negotiate the security parameters
of a connection, as in TLS 1.3. It uses the same messages, expect
for the addition of a <tt>KEMEncapsulation</tt> message and does not use
the <tt>CertificateVerify</tt> one.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
enum {
    ...
    kem_encapsulation(tbd),
    ...
    (255)
  } HandshakeType;

struct {
    HandshakeType msg_type;    /* handshake type */
    uint24 length;             /* remaining bytes in message */
    select (Handshake.msg_type) {
        ...
        case kem_encapsulation:     KEMEncapsulation;
        ...
    };
} Handshake;
]]></artwork>
        <t>Protocol messages MUST be sent in the order defined in Section 4.
A peer which receives a handshake message in an unexpected order MUST
abort the handshake with an "unexpected_message" alert.</t>
        <t>The KEMEncapsulation message is defined as follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
    opaque certificate_request_context<0..2^8-1>
    opaque encapsulation<0..2^16-1>;
} KEMEncapsulation;
]]></artwork>
        <t>The encapsulation field is the result of a <tt>Encapsulate</tt> function. The
<tt>Encapsulate()</tt> function will also result in a shared secret (<tt>ssS</tt> or <tt>ssC</tt>,
depending on the peer) which is used to derive the <tt>AHS</tt> or <tt>MS</tt> secrets.</t>
        <t>If the <tt>KEMEncapsulation</tt> message is sent by a server, the authentication
algorithm MUST be one offered in the client's <tt>signature_algorithms</tt>
extension unless no valid certificate chain can be produced without
unsupported algorithms.</t>
        <t>If sent by a client, the authentication algorithm used in the signature
MUST be one of those present in the <tt>supported_signature_algorithms</tt>
field of the <tt>signature_algorithms</tt> extension in the
<tt>CertificateRequest</tt> message.</t>
        <t>In addition, the authentication algorithm MUST be compatible with the key(s)
in the sender's end-entity certificate.</t>
        <t>The receiver of a <tt>KEMEncapsulation</tt> message MUST perform the <tt>Decapsulate(enc, skR)</tt>
operation by using the sent encapsulation and the private key of the public key
advertised in the end-entity certificate sent. The <tt>Decapsulate(enc, skR)</tt> function
will also result on a shared secret (<tt>ssS</tt> or <tt>ssC</tt>, depending on the Server or
Client executing it respectively) which is used to derive the <tt>AHS</tt> or <tt>MS</tt> secrets.</t>
        <t><tt>certificate_request_context</tt> is included to allow the recipient to identify the
certificate against which the encapsulation was generated. It MUST be set to the
value in the <tt>Certificate</tt> message to which the encapsulation was computed.</t>
      </section>
      <section anchor="cryptographic-computations" numbered="true" toc="default">
        <name>Cryptographic computations</name>
        <t>The AuthKEM handshake establishes three input secrets which are
combined to create the actual working keying material, as detailed below. The
key derivation process incorporates both the input secrets and the handshake
transcript.  Note that because the handshake transcript includes the random
values from the Hello messages, any given handshake will have different traffic
secrets, even if the same input secrets are used.</t>
        <section anchor="key-schedule-for-full-authkem-handshakes" numbered="true" toc="default">
          <name>Key schedule for full AuthKEM handshakes</name>
          <t>AuthKEM uses the same HKDF-Extract and HKDF-Expand functions as defined by
TLS 1.3, in turn defined by <xref target="RFC5869" format="default"/>.</t>
          <t>Keys are derived from two input secrets using the HKDF-Extract and
Derive-Secret functions.  The general pattern for adding a new secret
is to use HKDF-Extract with the Salt being the current secret state
and the Input Keying Material (IKM) being the new secret to be added.</t>
          <t>The notable differences are:</t>
          <ul spacing="normal">
            <li>The addition of the <tt>Authenticated Handshake Secret</tt> and a new set of
handshake traffic encryption keys.</li>
            <li>The inclusion of the <tt>SSs</tt> and <tt>SSc</tt> shared secrets as IKM to 
<tt>Authenticated Handshake Secret</tt> and <tt>Main Secret</tt>, respectively</li>
          </ul>
          <t>The full key schedule proceeds as follows:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
            0
            |
            v
    PSK -> HKDF-Extract = Early Secret
            |
            +--> Derive-Secret(., "ext binder" | "res binder", "")
            |                  = binder_key
            |
            +--> Derive-Secret(., "c e traffic", ClientHello)
            |                  = client_early_traffic_secret
            |
            +--> Derive-Secret(., "e exp master", ClientHello)
            |                  = early_exporter_master_secret
            v
            Derive-Secret(., "derived", "")
            |
            v
(EC)DHE -> HKDF-Extract = Handshake Secret
            |
            +--> Derive-Secret(., "c hs traffic",
            |                  ClientHello...ServerHello)
            |                  = client_handshake_traffic_secret
            |
            +--> Derive-Secret(., "s hs traffic",
            |                  ClientHello...ServerHello)
            |                  = server_handshake_traffic_secret
            v
            Derive-Secret(., "derived", "") = dHS
            |
            v
    SSs -> HKDF-Extract = Authenticated Handshake Secret
            |
            +--> Derive-Secret(., "c ahs traffic",
            |                  ClientHello...KEMEncapsulation)
            |         = client_handshake_authenticated_traffic_secret
            |
            +--> Derive-Secret(., "s ahs traffic",
            |                  ClientHello...KEMEncapsulation)
            |         = server_handshake_authenticated_traffic_secret
            v
            Derive-Secret(., "derived", "") = dAHS
            |
            v
SSc||0 * -> HKDF-Extract = Main Secret
            |
            +--> Derive-Secret(., "c ap traffic",
            |                  ClientHello...server Finished)
            |                  = client_application_traffic_secret_0
            |
            +--> Derive-Secret(., "s ap traffic",
            |                  ClientHello...server Finished)
            |                  = server_application_traffic_secret_0
            |
            +--> Derive-Secret(., "exp master",
            |                  ClientHello...server Finished)
            |                  = exporter_master_secret
            |
            +--> Derive-Secret(., "res master",
                               ClientHello...client Finished)
                               = resumption_master_secret

*: if client authentication was requested, the `SSc` value should 
   be used. Otherwise, the `0` value is used.
]]></artwork>
        </section>
        <section anchor="abbreviated-authkem-key-schedule" numbered="true" toc="default">
          <name>Abbreviated AuthKEM key schedule</name>
          <t>The abbreviated AuthKEM handshake follows the <xref target="RFC8446" format="default"/> key schedule more closely.
We change the computation of the <tt>EarlySecret</tt> as follows, and add a computation for
<tt>client_early_handshake_traffic_secret</tt>:
~~~
            0
            |
            v
    SSs -&gt; HKDF-Extract = Early Secret
            |
            ...
            +--&gt; Derive-Secret(., "c e traffic", ClientHello)
            |                  = client_early_traffic_secret
            |
            +--&gt; Derive-Secret(., "c e hs traffic", ClientHello)
            |                  = client_early_handshake_traffic_secret
            ...
~~~</t>
          <t>We change the computation of <tt>Main Secret</tt> as follows:
~~~
            Derive-Secret(., "derived", "") = dHS
            |
            v
SSc||0 * -&gt; HKDF-Extract = Main Secret
            |
            ...
~~~</t>
        </section>
        <section anchor="computations-of-kem-shared-secrets" numbered="true" toc="default">
          <name>Computations of KEM shared secrets</name>
          <t>The operations to compute <tt>SSs</tt> or <tt>SSc</tt> from the client are:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
SSs, encapsulation <- Encapsulate(public_key_server,
                                  "server authentication")
               SSc <- Decapsulate(encapsulation, private_key_client,
                                  "client authentication")
]]></artwork>
          <t>The operations to compute <tt>SSs</tt> or <tt>SSc</tt> from the server are:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
               SSs <- Decapsulate(encapsulation, private_key_server
                                  "server authentication")
SSc, encapsulation <- Encapsulate(public_key_client,
                                  "client authentication")
]]></artwork>
        </section>
        <section anchor="explicit-authentication-messages" numbered="true" toc="default">
          <name>Explicit Authentication Messages</name>
          <t>As discussed, AuthKEM generally uses a message for explicit
authentication: Finished message. Note that in the full handshake,
AuthKEM achieves explicit authentication only when the server sends the final
<tt>Finished</tt> message (the client is only implicitly authenticated when they
send their <tt>Finished</tt> message). In a abbreviated handshake mode, the server achieves
explicit authentication when sending their <tt>Finished</tt> message (one round-trip
earlier) and the client, in turn, when they send their <tt>Finished</tt> message
(one round-trip earlier). Full downgrade resilience and forward secrecy
is achieved once the AuthKEM handshake completes.</t>
          <t>The key used to compute the <tt>Finished</tt> message MUST be computed from the
<tt>MainSecret</tt> using HKDF. Specifically:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
server/client_finished_key =
  HKDF-Expand-Label(MainSecret,
                    server/client_label,
                    "", Hash.length)
server_label = "tls13 server finished"
client_label = "tls13 client finished"
]]></artwork>
          <t>The <tt>verify_data</tt> value is computed as follows:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
server/client_verify_data =
      HMAC(server/client_finished_key,
           Transcript-Hash(Handshake Context,
                           Certificate*,
                           KEMEncapsulation*,
                           Finished**)

*  Only included if present.
** The party who last sends the finished message in terms of flights
   includes the other party's Finished message.
]]></artwork>
          <t>See the <xref target="sec-authkem-pdk-negotiation" format="default">abbreviated AuthKEM handshake negotiation section</xref> for special considerations for the abbreviated AuthKEM handshake.</t>
          <t>Any records following a Finished message MUST be encrypted under the appropriate application traffic key as described in TLS 1.3.
In particular, this includes any alerts sent by the server in response to client <tt>Certificate</tt> and <tt>KEMEncapsulation</tt> messages.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <ul spacing="normal">
        <li>The academic works proposing AuthKEM (KEMTLS) contain a in-depth technical
discussion of and a proof of the security of the handshake protocol without client
authentication <xref target="KEMTLS" format="default"/>. The work proposing the variant protocol <xref target="KEMTLSPDK" format="default"/>
with pre-distributed public keys (the abbreviated AuthKEM handshake)
has a proof for both unilaterally and mutually authenticated handshakes.</li>
        <li>We have proofs of the security of KEMTLS and KEMTLS-PDK in Tamarin.
The academic write-up of this is work in progress.</li>
        <li>Application Data sent prior to receiving the server's last explicit
authentication message (the Finished message) can be subject to a client
certificate suite downgrade attack. Full downgrade resilience and forward
secrecy is achieved once the handshake completes.</li>
        <li>The client's certificate is kept secret from active observers by the
derivation of the <tt>client_authenticated_handshake_secret</tt>, which ensures that
only the intended server can read the client's identity.</li>
        <li>When the client opportunistically sends its certificate, it is not encrypted
under a forward-secure key.  This has similar considerations and trade-offs as
0-RTT data.  If it is a replayed message, there are no expected consequences
for security as the malicious replayer will not be able to decapsulate the
shared secret.</li>
        <li>A client that opportunistically sends its certificate, SHOULD send it
encrypted with a ciphertext that it knows the server will accept. Otherwise,
it will fail.</li>
        <li>The PDK extension identifies the public key to which the client has encapsulated via a hash.
This reveals some information about which server identity the client has.
<xref target="I-D.ietf-tls-esni-14" format="default"/> may help alleviate this.</li>
      </ul>
      <section anchor="implicit-authentication" numbered="true" toc="default">
        <name>Implicit authentication</name>
        <t>Because preserving a 1/1.5RTT handshake in KEM-Auth requires the client to
send its request in the same flight when the <tt>ServerHello</tt> message is received,
it can not yet have explicitly authenticated the server. However,
through the inclusion of the key encapsulated to the server's long-term
secret, only an authentic server should be able to decrypt these messages.</t>
        <t>However, the client can not have received confirmation that the server's
choices for symmetric encryption, as specified in the <tt>ServerHello</tt> message,
were authentic. These are not authenticated until the <tt>Finished</tt> message from
the server arrived. This may allow an adversary to downgrade the symmetric
algorithms, but only to what the client is willing to accept. If such an attack
occurs, the handshake will also never successfully complete and no data can be
sent back.</t>
        <t>If the client trusts the symmetric algorithms advertised in its <tt>ClientHello</tt>
message, this should not be a concern. A client MUST NOT accept any
cryptographic parameters it does not include in its own <tt>ClientHello</tt> message.</t>
        <t>If client authentication is used, explicit authentication is reached before
any application data, on either client or server side, is transmitted.</t>
        <t>Application Data MUST NOT be sent prior to sending the Finished
message, except as specified in Section 2.3 of <xref target="RFC8446" format="default"/>.  Note that
while the client MAY send Application Data prior to receiving the server's
last explicit Authentication message, any data sent at that point is,
being sent to an implicitly authenticated peer.</t>
      </section>
      <section anchor="authentication-of-certificate-request" numbered="true" toc="default">
        <name>Authentication of Certificate Request</name>
        <t>Due to the implicit authentication of the server's messages during the
full AuthKEM handshake, the <tt>CertificateRequest</tt> message can not be
authenticated before the client received <tt>Finished</tt>.</t>
        <t>The key schedule guarantees that the server can not read the client's 
certificate message (as discussed above). An active adversary that 
maliciously inserts a <tt>CertificateRequest</tt> message will also 
result in a mismatch in transcript hashes, which will cause 
the handshake to fail.</t>
        <t>However, there may be side effects. The adversary might learn that
the client has a certificate by observing the length of the messages
sent. There may also be side-effects, especially in situations where
the client is prompted to e.g. approve use or unlock a certificate
stored encrypted or on a smart card.</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="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="RFC8410">
          <front>
            <title>Algorithm Identifiers for Ed25519, Ed448, X25519, and X448 for Use in the Internet X.509 Public Key Infrastructure</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson">
              <organization/>
            </author>
            <author fullname="J. Schaad" initials="J." surname="Schaad">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies algorithm identifiers and ASN.1 encoding formats for elliptic curve constructs using the curve25519 and curve448 curves.  The signature algorithms covered are Ed25519 and Ed448.  The key agreement algorithms covered are X25519 and X448. The encoding for public key, private key, and Edwards-curve Digital Signature Algorithm (EdDSA) structures is provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8410"/>
          <seriesInfo name="DOI" value="10.17487/RFC8410"/>
        </reference>
        <reference anchor="I-D.ietf-tls-subcerts">
          <front>
            <title>Delegated Credentials for TLS</title>
            <author fullname="Richard Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Subodh Iyengar">
              <organization>Facebook</organization>
            </author>
            <author fullname="Nick Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Eric Rescorla">
              <organization>Mozilla</organization>
            </author>
            <date day="23" month="September" year="2021"/>
            <abstract>
              <t>   The organizational separation between the operator of a TLS endpoint
   and the certification authority can create limitations.  For example,
   the lifetime of certificates, how they may be used, and the
   algorithms they support are ultimately determined by the
   certification authority.  This document describes a mechanism by
   which operators may delegate their own credentials for use in TLS,
   without breaking compatibility with peers that do not support this
   specification.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-subcerts-11"/>
        </reference>
        <reference anchor="I-D.ietf-tls-semistatic-dh">
          <front>
            <title>Semi-Static Diffie-Hellman Key Establishment for TLS 1.3</title>
            <author fullname="Eric Rescorla">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Nick Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Apple Inc.</organization>
            </author>
            <date day="7" month="March" year="2020"/>
            <abstract>
              <t>   TLS 1.3 [RFC8446] specifies a signed Diffie-Hellman exchange modelled
   after SIGMA [SIGMA].  This design is suitable for endpoints whose
   certified credential is a signing key, which is the common situation
   for current TLS servers.  This document describes a mode of TLS 1.3
   in which one or both endpoints have a certified DH key which is used
   to authenticate the exchange.

Note to Readers

   Source for this draft and an issue tracker can be found at
   https://github.com/ekr/draft-rescorla-tls13-semistatic-dh
   (https://github.com/ekr/draft-rescorla-tls13-semistatic-dh).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-semistatic-dh-01"/>
        </reference>
        <reference anchor="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="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="I-D.ietf-tls-esni-14">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="13" month="February" year="2022"/>
            <abstract>
              <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tlswg/draft-ietf-tls-esni
   (https://github.com/tlswg/draft-ietf-tls-esni).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-14"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk">
              <organization/>
            </author>
            <author fullname="P. Eronen" initials="P." surname="Eronen">
              <organization/>
            </author>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications.  The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="KEMTLS">
          <front>
            <title>Post-Quantum TLS without Handshake Signatures</title>
            <author initials="D." surname="Stebila" fullname="Douglas Stebila">
              <organization>University of Waterloo</organization>
            </author>
            <author initials="P." surname="Schwabe" fullname="Peter Schwabe">
              <organization>Radboud University and Max Planck Institute for Security and Privacy</organization>
            </author>
            <author initials="T." surname="Wiggers" fullname="Thom Wiggers">
              <organization>Radboud University</organization>
            </author>
            <date year="2020" month="November"/>
          </front>
          <seriesInfo name="DOI" value="10.1145/3372297.3423350"/>
          <seriesInfo name="IACR ePrint" value="https://ia.cr/2020/534"/>
        </reference>
        <reference anchor="KEMTLSPDK">
          <front>
            <title>More Efficient KEMTLS with Pre-Shared Keys</title>
            <author initials="D." surname="Stebil" fullname="Douglas Stebila">
              <organization>University of Waterloo</organization>
            </author>
            <author initials="P." surname="Schwabe" fullname="Peter Schwabe">
              <organization>Radboud University and Max Planck Institute for Security and Privacy</organization>
            </author>
            <author initials="T." surname="Wiggers" fullname="Thom Wiggers">
              <organization>Radboud University</organization>
            </author>
            <date year="2021" month="May"/>
          </front>
          <seriesInfo name="DOI" value="10.1007/978-3-030-88418-5_1"/>
          <seriesInfo name="IACR ePrint" value="https://ia.cr/2021/779"/>
        </reference>
        <reference anchor="NISTPQC">
          <front>
            <title>Post-Quantum Cryptography Standardization</title>
            <author initials="." surname="NIST">
              <organization>National Institute for Standards and Technology</organization>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="KW16" target="https://eprint.iacr.org/2015/978">
          <front>
            <title>The OPTLS Protocol and TLS 1.3</title>
            <author initials="H." surname="Krawczyk" fullname="Hugo Krawczyk">
              <organization>IBM Research</organization>
            </author>
            <author initials="H." surname="Wee" fullname="Hoeteck Wee">
              <organization>ENS, CNRS, INRIA and Columbia University</organization>
            </author>
            <date year="2016"/>
          </front>
          <seriesInfo name="Proceedings of Euro S&quot;P 2016" value=""/>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
      <t>This work has been supported by the European Research Council through
Starting Grant No. 805031 (EPOQUE).</t>
    </section>
    <section anchor="open-points-of-discussion" numbered="true" toc="default">
      <name>Open points of discussion</name>
      <t>The following are open points for discussion.
The corresponding Github issues will be linked.</t>
      <section anchor="authentication-concerns-for-client-authentication-requests" numbered="true" toc="default">
        <name>Authentication concerns for client authentication requests.</name>
        <t>Tracked by <eref target="https://github.com/claucece/draft-celi-wiggers-tls-authkem/issues/16">Issue #16</eref>.</t>
        <t>The certificate request message from the server can not be authenticated by the AuthKEM mechanism.
This is already somewhat discussed above and under security considerations.
We might want to allow clients to refuse client auth for scenarios where this is a concern.</t>
      </section>
      <section anchor="interaction-with-signing-certificates" numbered="true" toc="default">
        <name>Interaction with signing certificates</name>
        <t>Tracked by <eref target="https://github.com/claucece/draft-celi-wiggers-tls-authkem/issues/20">Issue #20</eref>.</t>
        <t>In the current state of the draft, we have not yet discussed combining
traditional signature-based authentication with KEM-based authentication.
One might imagine that the Client has a sigining certificate and the server has
a KEM public key.</t>
        <t>In the current draft, clients MUST use a KEM certificate algorithm if the server negotiated AuthKEM.</t>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAKotJmIAA+1d63LbVpL+j6c4q1RNJA1Ji/IljnLZKJIyVjm2NZayri2X
RwTJQxJrEOAAoGSuo3mWfYF9id0X276dGwBStJOdmh+jqsQSCZxLnz7dX/fp
7tPtdqMqqVJ9pJ6fvegO41KP1fGymumsSkZxleSZmuSFuvr5UvV7D6N4OCz0
zRE9Ai9E43yUxXN4e1zEk6o70mnSvU2mU12U3SotuzE8917Puwf9CFrT07xY
Hakkm+RRlCyKI1UVy7I6PDj4+uAwigsdH6k/6UwXcRrd5sX7aZEvF0fU+Rv4
M8mm6k/4UfRer+D78ZE6zypdZLrqnmL/UVRWcTa+jtM8gzGtdBmV87iorv+6
zCtdHqksjxbJkXpb5aOOKvOiKvSkhN9Wc/zlXRThePPiKFLdSMFPksFLlz11
AvOiD3iyl/nkf/87dp/mxfRInaT5cjxJYRb0mZ7HSXqkRjNd6Ox9fvNDkZR6
uejBYKOg+YueuhzNbuOh9nq40DCv4HPqY+d1PB5CN+qXLLkBGifVSv1Bvbg4
V5d/uNjx+11gAz+MitWiyv9Dj5MevB/2ewr9VnqYpLHX72m+nKZxGXxDPXsd
5hP1BtaySPPc73Fc8js/LG/l294oDrt8CV0u0zS5iTOvz5fJ6H34+QZ6ZvDw
DyP7VW+Uz8M+rnrqDTOg18XVLJ8HH1MPTWL6PQEjzH/A/wk/97I0irK8mMOu
uNHAIur1TydPHz16Ir9+3X96cARsDcwdPvP46ZOvj6Iv+PdDfEjhZgOuPqL+
ZP/tXORl1f3zMs6q5Zx4/jaB7peVegY8Xc7i91pdJtMsrpaFLnmxx0DpI3V4
cHjQ7ffpE8vA9NNtXerNy73NktuWa8y7iYE3MjHMUL2IP6iLNM6AG86zEqiy
rDQJn0s9WhbmqYsC2GS02gnHUVv1DSu/aRjcaKmLRJe4joaMp6/Oj1T/oNfv
P3r84OHDrw4Pv/6q9/DR4cOHjw/kkZ3z45PXSsPosmrnSM2qalEePXiQxL1R
8QAX6MHjh4/swl+cPg/X/kVeaHU2mSSjBCSvPEUMABPW3csZ8PpYPder+sL3
uwePt1j4f677b1r3g4OvHnz91dPuw+7Bw4Pu06eP+k+7j6/7W659/8FXX30N
z748v7y6+PNJsPLBpj8hcT0t4sVsBWsD046LcfKfpIZr+339mmMv4YxfUgNx
WievdFASfa/0aJblaT5FIfj8Tf+Jadby6NVMq1cXyJcXRQ4aNE/5RYYGZmHs
GPtPzCceYfHVkQZ9lE1L5K6zZZGD7kL9/M1F8FIVF1NdOWrqBZK3l8SjAnUZ
0LX/GNfEPB/SQjQC/RBVnvXU8yK+Hf3n6r37hlnl2XKat3xJpDv/8YV6rUsd
F6PZhqbfaN1oNYedACwdfEVtnr287KiTl6/h/+cvX58fExVP8nQ5Hyaxr4yi
qNvtqnhYVkU8AtRwNUtKBYhrOUcZMYXnYOnUKIdVLZYji9VilBPqLBvFi3KZ
MoZ7AasbZ0k5V7sgW/YY6BHa8YDe3D6UZGZZe4p6XRT5Ii+BhbxXoPeFhqGq
Gxh2rACTRfoDtjDV+DxxSEctS4Rt8FJSKIBl0y7IBxmFWiyHaTLCN8seT3ae
jMepjkBbArIr8jFPK4pOzy9Pfj4+f3H2+ogHlODUESN2k6wLvU1BJ5aMQntb
U8pB3holeP4Rzb+GhmfxYqEzmTQAx7muCpjDyN+6wxVOGKYeAynySQT9QP9j
WNcqod5K+t6RAx7wiYH94wMn+MKEaI2T4hXBqcP3MF2djTRMqwRQAI3Ci6pB
f7WbTGQJRq6x1uXfa0zVcQGRezRL9A10BLPDLmVZgSCCTiJg06wcFcmiYs01
TqZJBTxTWtSi4hRMAPhuXvbWUx8Gf5OMAbzXPoeOxyBKbrBnmDbrxFKPCl3B
SOIKR6kt22O70xh2KH6pI0de5IMKvoAHWuisXmUpL98sT6E7lFL41wL1D0hO
ZPNRXsBkFnk2JiLk9IBH3y9L5XcXZzxuTc+VIB7CwUcoAKrZElhWEx+ppPrS
bK45LDSwUWm4GtivyGEtlPkdBhaLRNfZeJGDlCyZHLMYuqyxFu5nUP6zqJJd
BCoWDJQK5lzAkDr+NEoa+lDDY+USRkuLunt2snf6LODWGMyshR7BW/AQjgOJ
HiNzAn0/fvwXwsn9g7u7DghA4cYY5prqKas2K3jAFFvC1OLSfAsNAoXGyARx
WmJj593TXqKrCZmX5XKI4y3v7oA857iYnqzqqFvcg0z102fCa7QXJwWgAx4Z
wnZ4HeR0NAR7TjPJYFIAyDRNK06BOCBqiKPL0bKkCQjrIC/pD5XhEtwvZu9B
e6MY+0eNLLuWOQlUYEnqr7Q6HptcIBb4q2ABXDe3W4DJokIv0hiIujMC6FYm
o51wy+/y/GCfaDClFhUKpWUB0wGaT5IsgW0PC5SOo9MEcKbuPoPH5nG2p94K
LnlnWMwKexCntzjscpEU4gsQwoWroOcJzAR67I5nuMq3s4QZNMki2PfAQ2Zo
lcUQthPPvaDeIvB41wPleQsLUXTw+VLbZ0ugwV+XSYFSL8szEP0gPUE14tby
aYHGG+1z0KgZr/8oRWAdbkzk54i2pAY6FfClk8jwvai+ZA59o+gCwn4AEadk
DKhaqCOlFzP4q4gJD0VMCd4ZL36BlTcsSBvfLqmhUhVSPIeesrwynfSi4/E4
YfiWrogeOHv4L8tDfrE0EgzQQh+nnt2mR50IsraQnVuGoJMGmSKBbmh+dmfw
Uka38QqY5osv1KtiChtYkGp0PEEjIFZDwH0TYAKnyVFYYiO0N2+TNLXfMo3E
r1TTCE5A9NRPMErYAGgXUCOyJdUyS1Doyyqo+bJahnAFey/1IgZO1ikM+yWs
JrUQjoA9XAmJHjMaq+I61HYCAjZfLEAiQKeAqEcRc1e9N2/U58z6BfoWMk+r
EGBxxJDJEFNmGqVEXKyQA1Nit6DZUemk5Sgfwy4h0d9BLgWAAk/C75m+jSwW
MKpEsb7BLm5pI5SjmR4vUwQZXwDctexdqpd5JWuK6J82TY4Www5y9k6H/1Uv
X9Hvr8/+/Mv567NT/P3y2fHPP9tfInni8tmrX34+db+5N09evXhx9vKUX4ZP
VfBRtPPi+N93mPo7ID/OX708/nmHBaqP9JA1gcOGtKi6WIByJbgVAZoAYDJk
lf/jycX//Ff/kSiAw37/67s7o6f6Xz2CP25hGbm3HNEA/4kyJUL0F6OGg52c
gn5cIMIBQsMilLP8FvChxl2LhLwCOZKISUXkm+Rpmt8SZICveCMtHR5c0Qee
ynz05O4uEt46UgqbMBpeoUAHJjUgDAUobGXgGVwt6N/9AW8eK4JmyLHdNF4B
+7mvgVjVrdZAydvcAQhowfwO758lKHc8OYo6hYWmYeSgc7tfsO9MxpoCu01z
GrTXq9k52dg0iNAFLCYNoggkdQkKgLUmbNw5OhdK6RLsCVD/JXCrJnqIqAO2
h7dRtDN8heEgkOKRmDn1lHoDa+rr8xh7gK0L0NEBKeBFfBlt20JPsG8Be3Yd
DO5EmS0wcY57Fob2H0APRP/KdkPEKWBfo4kXjsg2xF/jiOA33GvwCiD98doX
aGnnSVXV3ym4k6vGcAW7AuPJbAwzwbp4OMZfUjB1e4CNaYbaW3VaPVYBG4zO
ElRCWdN0BYKtErZLfJPAFoPHRS+QVmQNh3wGNgTpvoh2CpgAMDQnMMVUsLom
hznfJCDWaIDUXwK0AXr3olfExJ6hBlo6X2hGNiW3N7QKBTojfQKTO77foGZ7
NGzbds1UH2tAYZplOzDyLAcxOhi4VvVgQNtgMDjV3meiO5LS0xUk4ccMjqJg
CoBRDSIVXUdqD0zUbFoeRVHQ4e7i/euOef6aH9obDI7QU3EFuxen5OASy8MF
q8qyYYDhl9onUQ9786ayC9+Cxqp1yf1xb7yxfCobReUZXz1QUIgp+fFgDNDj
G+20pYBHQ+tqVqDhQ68RjuEFGTuJy6ZABJtCf0BZGbbeNLfYkiGiY6PPnp/+
5NnMQO2//e1voHkmKqR5g+TotCLijKoP6jv17OL5We8SJrn4EWDzJb2xAzi7
/5AARve9nqsd9cd6K9AIwKDvsJHeGY1/dwdUJo6q97POptVsj8QYAXJZjHKP
fFM0yJalah2ptBCO8jW/4jxd9R9sbP23203P+1k7QyR59JysUhAhUzpMJAzA
7JmPBeiK1CSh7CtmVmU3iOJwR9V4gwDST0sQFP3e4+7rqysLEd0ZjXGORtFP
yXQJg+iDVIHmCR8w14I5BHsK/R81xIiypItN7nmYMzLnQK0ok9kMZi2UOeGH
tvm5JBVB5FLqL/ImmoV5dAaWgvoVVgF23DVtA27/Bj6y7pxrZ5+uX1rVlZ/v
NzyzdnA0GhwcjPHT3veGjsPGCW3TwLewV1GK6/GZhdGfNPJvPWfS9zBy8+63
sLSBCvneI017U7+adz/+BBoakND4zn1537vEmaaBt8eLRWqY7DSu4nfbd946
SfOy+8gf4020qeNvXcfNr+2bsICg+cbiiAIsoMkFs/LMGxDMhPzIFPVGt0AD
Ll+WACvwvbExfHr2oW+/99q2ZhEaSgB44AWW7GjC++2yE2/MTpBYvWVY9u7a
btVrkCp4hndt9JElzt1v78//xnbtu+PHWwzk7bvfPBDXt1u7Wn/XL3t2HY0Q
PALIRN2pn1AYGvf78ToB2GQ/J2I3CsSeyEP2ZbGotYRBi4090Szp0ZUxMUK8
F+EBmY7H+JlxU1pph2DZJ3fo/O54eDjynNBNoCSY2/qcPIerh7YArho/tGcX
kU+6rEMidZ8/WtqNtvJG95hw4aDhg3nygcCSNG9nDlMIfQhXzky07ixyRcOb
t3FSsf71STAYGOEBGFi4EpTmBJcnqSIcMjIdHi3GQfvvM1apaAlVlqFpjmS4
I5zXIs9VMvHJeQtGNxiYGuGeR4+6wyigQnC4IN7cwaAu2N0cCAI3p8bYhIRX
XHqIkRG2nLOoCcIMAKKwcEmTx9HiOmljf4Ad5CFr+arjzx8JWsoMPJWF3h8w
vb11iAUFWZeEMIhPbFziYUA8R6CGE+2o1d2FsF3GWTJg6pHVGPbdwaWglXnU
e9Q77OCiWjdN4hulYkjrcs38OhFQlbxXxFpx+Ji/hudBs7MYORrs+wT9E8E2
g9Fs1WQkB1C4WaEp/8TF9iarhBsRaFLS0Yq1NMTqHW/ofBiP3kfxRu7sKG8c
TdvLiBHjOB/5h5FX5MyEZ8nrcJ+sqMsHOqcr+UAwW7ltQVvCqaBQ7yTs3huh
ic+egOZ+7bGjrcFyYhm3emlhMHhATMedoqwOe/8E1a0/vyeoxgEIsbbp+tvm
Jv4ex3CBfsFNpNrYkkPof2lF6Pf8CEj+VX302jQg/V6AjWwK77aO0QHsj/Vh
3YXo/uazzIP/b8vA++iflsE/LYMNlsHh720Z3GMWNBQsgpcWJdum+ErWssf/
DlCNIGeEEAbmRegKoCb6okHpoWJNsiWdvVd0DNQwGIAOv2CocLXM6ECyY7VW
u5qSA2H/HDpfZuNuVSSLXsRqRqAwouIQYLtzbbEwsB/UyjAVNZrleUnDNifV
G89AGW/5x58UIFGKR9oM3zc/EGqrA/SXddPkvXa77k0IBNnPbdzuX+BZZKpv
YkJdpnfDmuaUmdy56J43Z9s4PNYrrBv4zGgBuI1sPRNqEFpuUfMcyh6WMzJN
8LQ8BLguNGdtKNOyFFOT7SxNgSJ2d+GpOsCYZM5HBFEjRKsFq2RaA/LrgS7n
kBui/lEU7dfRphz9+Osgpzb2NIjMDQBgC110veciJ0h7SgVgH37N8azJATAh
XGhcjZMxbqtIcHBTddsGdynuKWHJw0A0rvyGS7D0U24tsL5pn8b+9PY4OEAY
tqMCcjA0TrJRuhwTk0frou96/nAlhGPIGzdlqyYe4SEbBjiRa3aDfQL/objb
vkG1TYP7rbD+SB1zEEx4guJC4GoRag2ZQGc8fPy2wkAhEjVrmb9+8oJBIN7h
G45knEwmmP2Cx0U0L5mVzSaCmbyEx6vVQtOp7mDQBoPBYhGdADttX12EcZJB
vBri0jBwSrpoyI9WEsLDVzVzhUwZG7pVOxAirddmhXA7dfMvEVyiDRo2TJwF
I5SvcfXIEcSNme1AZnvgVRBHidt+4SulvIPOk+azZM/SqPw2eT3P58b5gIcn
7Z4INrio7frORd1iDqdDr5cZxiw2B92aUARuy3anEEd2CtUknjVZzECygx2O
gYozUGFhnFlkFbgT6l8GYbgLOtNn/rTeHM9gsweyntnkeXHYCl7zLblFZhzG
1u4e8ZaizUkUWeZySAX+oSDLHi0vOYgCt4k59MZt4I6xBQbbbIoTCfmSl0ob
tvHLgnCGiT8IQFAjtIlpELiUxAcpmx3RUdvE7BE/+7nK9T6ulvFsdBn6Pthm
81G9+ddey56Kg52NAbZ4cM/xcZMEg3VCn2140G9gBrJhMqJYXdg+PoCFTppK
MIoaUqLpflvrXhsvC0OVBkb7JiKHWGwRUquHtc5hKAqGGJQjEap6THCXg4Ax
jAy9JLHHC8yHpWGsLXjRYLv9fRPFD4rfsunbPwHjLIccb6y+6D95t2vSP6b0
Dab7PRil8XIEa/dgc87pA2qlfNB/ssdAk3DErU6hDZg7wCj0kXFEZW9/P7IY
OsTETMjRSC8qDrj0gHDD9/Tq9NWRumTEUmFElwAbTbT4V1J8P6Xx9F/xHPm4
BWXTzgG51BVNE8J1AL0UtuSzeVroeLyitdsM+Vm9M0ONc9A6cxA/kbY5Z55l
4ukbgucW27d6CDd2SfCmIVYtwOxFx1ktaOc+86PFX/eQgnRkxKSGDFnMAYEZ
ZQf0+XSG35d58JA5RDBhQCbSmGKkYEHYW99i3PRsPgoIGjaVOQLRBY9j6BII
axwwj6Jb5V3jhh/pLC6SvOS95E/dYzQMT6DYM1GCUf2Ah1UcxaYqMrF0XADf
8oHJZ/sylXVnbufN/AO+gR+VFfDWmHwQ1xh4LJ6uTW5O/JYGTW/t1z/EmdgP
dz2Jub9nP627jPb38IuGN2udE7TdE9f2E7hBf93+7QZhPultbsGjEb6Gq9D5
vDaIpMaXqP6wXSMfW1y55JD0Xbn3j6Th1NynRnxn7rpG7o092PLthodx/53l
pLNs/GpyhlTCL/Y2OVp9X/wm3+Y/hHdz3287X0haKAbzJtWSRtMd6wV68bLK
b9nAvQfeIFjOSpxmnN7GKx7Y7+tL9b9h4XvN3Hu/R3N3b9vuTZ9+Z+LKDfr8
uztx/wHdtkblHrXiF8+rRlDG8FjDZxs4EO/x2AKWfumFjn/8AgZlK4ssxu+7
XmD5XR0JMAKI21BK6Pep4b64qvR8Ud0PSOjINpFYhzJ357Ceswk9G6Hk90HQ
OuPTbt/ABUdty8ltW8is5/BZ6+KKTjW8npbWI2iHQnDdJkvIOfxV3fXhnf1a
IyIchncIbHAiydNLfh8w+GJZ+We2ntMg9lKevBURZ6IPewIECgshlCdAd4ur
HzgJPFOHAX3pgkzM8pnV5G4JcwFY9pfVguHBwOniYDlro1rjCqp5gbjFrUQc
+Weu3GSIZmyhfBK3ujlhauHKeKM28mrA7ST5t+y4E2aGmtxIsMvDICFsr7R5
FhTZNKoM2+E2jbMVWi5u8Jgt5CaAQQ/18fvDv/JsgYSmYnhhiynUuTPyZr8u
fkRtQfB2RupFYewJek5yiRvavEodG/1CMSChh8pEz93Tghsqb1acobeFXUNR
uPtbfMNhBI2dQCu9XMfjIl+wDA8cFhjo5TLNA2OVXkMV4g7ghMTkK2vZDKhb
6GCK2PM2LmTUIy46Qim3K6NOrbvTk1UkDagFMrY6zXAp+Xaej3W7LDAHAkQX
zyvoWu1J/kxzCRIXJEOOCkEt4TkAm6Sxpw54ZTrBRqbdVyOCO1hk0qIxyonj
GZ9yOkeiHbmfjuSmgCATwYBkTudioHqKH/oKXPkBXdUcloGM9qGWVdFjk6/c
zNyBLmjFl5RrucbzScH850FupUsiN6cut40TSl3PxxyLLjXJmA4jU2J/PcEy
BDMu+tQ5oCQvVjxH5ZKgkkRNol7FZM/hyqXTIU05lHCCQW23lCLsBa5i73Ot
djHBzWj89pMWN/Y9zIhXeDgXgcCTVBo8p2g0exOnS1ivXX1DninMseFcSWsc
2FcifqXcsyGgmxJxcN2IRl/1+j3MRJVTUrMkQ80871cYoTTAjDOVAesdX5zb
1ivJzERIqbPlXH3EzDzEkNeLw8dP0JyHfwCafve9uvrxtOO+ffj0EX4L/7R9
+/iwj98+7h+2fPvh8PHj/tem7ca3jx49bb57x0ks5OkznieDEO9ZNZMwL2ti
echIPsNLFnG4ug1BLQErrFxbVtW6DNjW0VwjPht0OKc18XaD7UuAmJQQ8Woc
DFdyNNA40+MSJ37UK7tv3Fk//+1tPbQDYJWHnKxoCGAtJAug42k3pdyhLk3U
Jgn55jYVjcFwRXIk44AQBBDTITb1jWKGLQPrHLlaLfRApWDmsGw2ZXVqfNjr
oUlX9w7tAj/sdeqmk3qwjyepyCxq/wHmjln0sO6N1td2nzx+/PDxXnSngtF+
E0n0PGw3inDl7KXEWpnVzEVhYGo0SRt2ybrFBnktudKSB/fH7nY/4XN/jH51
o2uflvyQw8fECKlff0N/9VV4C1QDor1r6U+pk2cddfkM+tvW+xY+h+95y7em
r9+zv8+li1jiX6hLIg87DdF3Gl3l3jHvzLieaweGNesw2wZth7n9kj8rx+We
tQU8q3YbYJa3wmCwR2YhNLQUYLBJfgTFdryNTb5SReVT7MGWJ3SxPoAx9+15
q9dPp2m0D5iM56ZaZJ4NnJwR6cB/k3zAn1KnaArt4oT37KdKjTCySaoEeH6W
fBH/dUnBDNdAuClWQwDt+G2/1wOd9P03zSfZVsacS3roL/0n3f73YS+SVO69
e0wGkB7T8gHVv+x/aZq+U8N8vPoG5EtjrpFL0HEL2aDRJJeszMS92aT1Gq9J
STFRHloPBZjn96kDZVBDaGN4RKuFYCyH80TsRUez0CIPHAVuinTiGFNgDfyW
5bepHk8JSjYyGegoiqsf5BbqMYy5z8LnYhNu+LB26chsvQUX4BPtfBtj7BjA
K8DGbORh+5fPjruIV2ZxOTOAMcnga7ZGHBYTG53eZO8pv5LRyfkNFUwI3nU8
rnZxtuRByFa8ibF6DrbB+jhYdRkElzdQVMMCNvYhjPsXiVkEQxQ7kQf9GRgD
NGA2ifsUfBVGDsiy+WuJwMcuwtZrwK2PbOCdvyZ8DglN6DgNphoP0TgnslHd
Ky7D6Q2oHmcDcxQXIR2nGxtosiwQ8ooN9HaNEfRul7ypgSlX7lEBE5D1Zy2i
nAS+d64dHhUbt+maXIut5D4uQJgjhnvAdsk+l1joKh3aMI51NXg6aDewDhFL
ehDgptMf92p+rs/RGoHYvmP6Uai+E3gJh/DCmFehq8dzZxlvgERV3uM9DliZ
QfJFveYPM6Q7UrZFgcwcfSkjlBeGcZVXIqS3VxekE+av9dR5VYt4dXFCfDoe
mXU1XjRaQtWMxXPpZ5j3Z3wU0Dh5m3wPyr9hUNRqAEKnYd0ZXK0UWlsBBNmt
huO9TvDMLuhFPOq7c/HkjIdDRRx8qebl9BqF1zf4FSBsR2ESaQS0lVrCjj98
JILtmwCRwTtcFQo5eLiqOBbNzF7eN6rf9t0z/fpAwEzEquvGrKm0h6oT+5tG
C3eotW1nYhE0eCr0XMneBvmMAcDOpL+08atgkVHxGDbybH5e3BKdiVEjGYgu
G1PBzWKHEQjIggVgLb8L3thxr1xLWztgYgK3iEiuz92PbDaDjkupCFEetQAx
g5YcB14XHLV1LSUrvj1A+PTUoCd5IVgIfoQQFpK6uSLWBguBM0PQpBRtiIcw
soP8QjIg+zMO6kPcUiv6gmLOfC8yG/1q0hiF64RnPbuDsrwcoAMPfjkZdCI+
IkZ+lYp+uKp7ruqfkSdeWu3g+Jk08QL+lfhZ5xnesP9N0Cygstg67qtGzG1k
/QiWK0EgAG0mlC2Y+EFTGD7Y6khxge/AeikeQ2Q5+j+SINNSgUbBwGOujSkF
ccbWG77MxMuCnOTKndJc3UyMR785E/eSVT7GX8JOtHB+4oNoOIrMGK7bZ+rZ
Mve7lYxJ0xap6OU6n2dWrN8zMTMFhI7wHXoZrEsK1NtuuReZadPZ9Jd4XDbu
ChwKMlElFZVrat2rTajjhS4QbvHU2yoU7Q1cVSVcLuthtPHbm2sU2Zqx1siI
vLBje2zbNiEOoeDw8fah2c0bNTZvfv/mVY3NK7kyeSEWKyw7aH7jVS4ojI2D
YT9viw82SMoBFwkVYw4PKVDsGqifLPgYPxckPKGMkyiIe5PTblNLsy4vMcvf
FgEifOJ0lglKj9jxZ3ZOkDVi+AZLF2zowphA4qEMooO9o+5yXXpyWOyu0MZk
MokGtihaJDVNiVjwnbVGRlTu8lZuSQGOw3/mGG2bYCVcqqiLxxT2UJ80A2Vp
aGJcaxuWtCJ5AeKDrOVhLhszHJJh+7byz2CWORPRnPSGCturFS3rLzoNnsjn
kTidbXBBCLQ7ZDOyy9HHALAd6BTLJJ5USg7OIxl1R9EphUlWQoRam5WUZOyx
/fPczwRB6Np+jojJaPJZCH+xNFX37APVbyeKyQcLMnFkH5e8Oow9hqvIVoNA
jsRSW+47PlfEC0WoFpWtcxXE82Ahx3BWTn7VBxSd0ptdCcuwQ+px8hhvnRRM
gArPVbi0LLu+2Q0nBayT0qQPBh1YmX4Zp8gINquAy88aGYUVc3VkGOqchv6c
OfiFcLDaPX/+Ys9rwnUu4bYwLDkRpEMn8lz7CUhAJusR8o0Ptq+8WH0go3fh
ijlopVQ56VWqOgbMjFxWy9wpTR4OMXgZ9Hd5WbrskssR/F6vNVcqmDHODXra
cnyDwYuYATd91gmEt3iFkH+D/CbrD2qgXt9KOQj+CjPAOeLy4vK56n4frv93
4kDgEW1o4o8YFRmw4m6vo3awjOGQ6uXuqF/VDma/yp/w5U6YCNziD/9OnqYQ
5E/uHJbTLCx059n/W/S7IWrwM6iAtjPI8rKiiX/aSHgIXM8QKMGttA3lJvir
OQoRMW2Ur7XDFeLPWrihzrefsyiz0q3KfdP3SAWWreey2X4J18VgffrQy7/b
0NlK2m7on7Ts0Pb42eW9ogCEW8vibxZhn8MK8ecTtG4hrKNqCx+EhRV+O1f8
XWbRYImtZ/HJDHJ8D4eAuvv11wO138Iinvr6LH5YfC4hxctswvu3Fw8bQqY3
qcz1zPB3nILwxO87BV9V/X9PYAutttWYEVe0jrnlJxyznHK0j7nl5zuy1OcE
EWujjvaP0C5pPzdBG1NMZ0zK5ANkgI0cnGNqJGDvQ7FfFFW7vk1KyYodHJiH
xXrvuRP9tkB+HyMydNyclSfQkfrygx/DXHoMEByleUkXMLwhTxqGG7lTxDiE
5WGwo0OoUilvTPHg3otgn0RbB1EffQbKbVdtW6Jc3z+/gR3/YYAnDsRXTr9l
LFuBESQQx75tYo2amRMYLvUV/e2A5jerKzsp3GonnjMI50JBeYHlF/Fu86q6
U6StRGCj3Ug+Ntr91j1ipAbZuNgZPNep+am+7YZ1yMk3eU2JjOxVv094wc+O
SZ8IxNNOQ+7B6LC/mgPTDaZjvKXUv/jCt+m/VTzu7Lnjkk+jm5mOpVtjHuUn
zKPctprdWjLC6LZftt+LbHTQb2ow1KpuvXDVlrzYAlerShxEFIVLR3k2VB+v
I2uvvHBk9aXLkXDuQhP7syRnnq2Bbi8GuqdqhLuwxV9gV+x0grdJtNalwFJE
LliolECcdeVvTA+ryIT5JEVrlYU9usAhXpPZjYG2QQ0NM79o3fyo41Jc+Ou7
Vbt4PORKhEUohhM8pjN+NnMCJV7GjpuSumdKUa1tZdrucW38cX6bTYt4TCeU
CXYz0iaow88uiPxbBfOsdgWUV7M5x4D7yoblIaYwBxAjL2yplQ7+URO66O3m
j1iPWDXCTlK6TKBeW4vOgGl9HohSm0hHFGn4HWxBz7Hb/Tke6nTXNd6+RcMG
U3yn/UG64wDjmFK540CAO70CakguTxAGMiPbifyW3WPC4O4xKzoHA6ovw4nh
Aw8uWtI1D8aDOXivE03w59mL45Pd9bQLZnxlzwS6OF8X7YAxS3hctFHW+TUB
Nj7YSD3f+LRhqf39PXQf8/WQLv5w4uJu9tnbi1kWK8rUSgHgh6InkHq08+gi
KAACkxTjwShJNzgPySmGi9r8smwKTl69S80b4O1mjO7fvyT5LRL+tSaZlvM0
pI5FmO5T2git+wLhjrOVuZbIu2gjbszF7lSv0BOFrlEn3tUrnsFqPe+UGFiq
4JovG2oP8tfd7SRhxZbIeJJEASIuzsATx0kmVY04BVU2Tz2Di53v6ystc6rR
ugJMH1si8O7sUcUI5OgcZohHe+b6JCSgIfUu3xW+ZyNnYxg0ZvHj0Qve6YxS
LPLvoKJDcjrOgNbgdxtdKMOTv1tixcK6+5Gq66a3PJZ3fH6NI/YGjG3exLCE
WeVafGvvQ8fiC7b6DQwWFMuQhI5/0+juvQy3RwczpZ0ccimdYLr7AdOVd0Ng
Q7G7Qz2qtPdG85EitVa20Uruascm+dcuzIb4L57DdOnyrHAlC7yLc7mwkeQY
h4u0SugElm4ypr7rRSKYQWEX5BQQuaYyFkkdC70aaxSgnfoe3DNRLeb6Msob
tMsdxClgTrWn6uOqikfvt0QAmOsiaZatGKBd9/tR2LWLExK8hGBhTxQ5DZIv
vsyHTJpStnak/CNv42ow/rw1VXPFZ2Bql5nq5XJXXW6uasD0M7pYTcQHUhNr
DIXBRyaulxmsVtCpvbJqSSHp9XLvEvlpBSYMhUVmbAjdJU6Vi7O4UhEV/Evm
Cd5zVxPpBA1x2br5ZEL3+io/C1VJKjPddWaSMIPia+5uUhu4h13QHX0jjc2R
QjG7R2pWzWPk1XxZmkYLPss3Zc/wKJdiTawZJOtYzzOGLRPUftialnIbpVRQ
ilSzRKML9FemUlS9tpQE01F0su9/g+ZMXalJnKSWkVFMeCFWHOKSNPMTgtgT
7xaCIG+B72DncHdZaI4tx6IGFOZQjzDnNo2eM6HmYR/YVv22X11mSbePt2Ri
Tu5MpwuM2mGBTPKsXjyyFj3+o8SDEG4q5DLv/oN+7zEymlfnK3PpXLb4sTe8
Ko9kvaxv1MbKYewFIypnCgZZ8H54oSk/STdCmHJ7Ky0Z0UaSNhSFW3h3X3Hk
XzLXOPZvSzYJRbdJ0I5MgjZXn8tc19aiZZdvuD3o7vBKbr2zyMO/TNkWMJNp
0hRt/U0pdijQyqQZmOFFUt2Q97C9+d4FPfAtqDajNNlAd4zGL3StkmCpXT2h
gNRL+C3lxqyFFxQF8G5xhibIwSd12ThvHIPKkIoYhEdX6lJZD6Oj6GUzHxdI
WnbUEDNKSLjnXE8kdBHgnpYbd8y2xyBPygPPRCNG+QiknRTKrAUrUexeRiVC
4SUMvUK3x8oqPcUpMpw5I2UYGaSiqq3XVaiKZSlpSW51vPTaMAQRt02QORV5
gpzu/zF1l4nJkDdAZGY9J2JdRjAXwQAkHa0pjFkGlQZMYRwZBd6aG4zEDyld
dyIipxidtX4g2tgxnjxIZYKIkL4HqbheA+Ym8vW2jattUTV2gitWKcKoAcsa
aRsWonl+Gou1HJ31B6ZbbdOYgPnD3kOUHP7NO8pPg6ebub31t+UoGgO8BzJG
AWSsuwDtcJF+YwtDY1GEch1x2Yk4OKuUkM1NtaMxXrxZI5UFpWdZKVsn9XRp
a/0k7XolzJH60quF5eqkRu3Re3JAtm0Z1iici1ewI7x4aFyvqGxcV/Y4bLqE
/QGIUYCkDyVMd03wGIS/WjAf+5lfoN9v0O94nBkM7Ak+7CiyiIt8GSVZv/F9
JHAiK/KTBeZJCRoDw4IzP6oToYi29/nSu6z3o1AQwrIKKvL1VKFJcuOGwisV
9GQCm8LUyLST4Ry6VMcFq6uohpDCYlEA/9kWMPwveYbCOTZTykZgyyBM2REc
SVdG0vHKe1JdT1M/TzLio1BRgFk3X4jG171pj/0ZN3RWiwJnmaU5Zob64404
58uDolhChSK851jIYwTwHvP0ut0u3/aEJWXDpNLSFEhB69JW93XpCeLrOFuC
ka6B416DCo4LWK6TfJmNSOUSnIkuK/SfANn+hAwLQqinnh48PnjYV7tnF6/+
/MvZHnk4Xi2wZAVdII5UdS6H+v3nqOZz72FEFP4l2WTnBZfa+ZWBXcUX0L7v
TdR1TZSIvuK211+pASxObuUCKMgUeXv+u1cf5vl4rFjUbkGoH0itLfosK+bK
WUh2o0sANUVtEfUTZKnJBcIUbCVaO2xUq4vzRsvWuo1FmBOCMvXkSZFMlqX2
6cqo0FSzlboQxr3h4APbBu6ydravTDEQv/BH66IcHvwei3J4sNeTUj9eMHLl
XZHh7tomhGwsAkdLjsOHMWPYuykI5pJ02q/voLmuuysEb3w0dE/m8ZQTVUUt
nPhCrcQ70Wvkqmctw5NR3Cj7V5+zTNMsLAEZXFd+M2je5u6EN314menClL3o
/wAYLRx5VZYAAA==

-->

</rfc>
