<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wiggers-tls-authkem-psk-02" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="AuthKEM-PSK">KEM-based pre-shared-key handshakes for TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-wiggers-tls-authkem-psk-02"/>
    <author initials="T." surname="Wiggers" fullname="Thom Wiggers">
      <organization>PQShield</organization>
      <address>
        <postal>
          <city>Nijmegen</city>
          <country>The Netherlands</country>
        </postal>
        <email>thom@thomwiggers.nl</email>
      </address>
    </author>
    <author initials="S." surname="Celi" fullname="Sofía Celi">
      <organization>Brave Software</organization>
      <address>
        <postal>
          <city>Lisbon</city>
          <country>Portugal</country>
        </postal>
        <email>cherenkov@riseup.net</email>
      </address>
    </author>
    <author initials="P." surname="Schwabe" fullname="Peter Schwabe">
      <organization>Radboud University and MPI-SP</organization>
      <address>
        <email>peter@cryptojedi.org</email>
      </address>
    </author>
    <author initials="D." surname="Stebila" fullname="Douglas Stebila">
      <organization>University of Waterloo</organization>
      <address>
        <postal>
          <city>Waterloo, ON</city>
          <country>Canada</country>
        </postal>
        <email>dstebila@uwaterloo.ca</email>
      </address>
    </author>
    <author initials="N." surname="Sullivan" fullname="Nick Sullivan">
      <organization/>
      <address>
        <email>nicholas.sullivan+ietf@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="17"/>
    <area>SECAREA</area>
    <workgroup>TLS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 168?>

<t>This document gives a construction in which (long-term) KEM public keys are
used in the place of TLS PSK keys, avoiding concerns that may affect
systems that use symmetric-key-based PSK, such as requiring key diversification
and protection of symmetric-keys' confidentiality.</t>
      <t>This mechanism is inspired by AuthKEM (and could use AuthKEM certificate public
keys for resumption), but can be independently implemented.</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-wiggers-tls-authkem-psk/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        tlswg Working Group mailing list (<eref target="mailto:tls@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tls/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/tls/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/kemtls/draft-celi-wiggers-tls-authkem"/>.</t>
    </note>
  </front>
  <middle>
    <?line 178?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><strong>Note:</strong> This is a work-in-progress draft. We welcome discussion, feedback and
contributions through the IETF TLS working group mailing list or directly on
GitHub.</t>
      <t>This document gives a construction for KEM-based, PSK-style abbreviated TLS 1.3
<xref target="RFC8446"/> handshakes. It is similar in spirit to
<xref target="I-D.celi-wiggers-tls-authkem"/>, but can be independently implemented.</t>
      <t>The abbreviated handshake is appropriate for endpoints that have KEM public
keys, and where the client has the server's public key before initiation of the
connection. Though this is currently rare, certificates can be issued with
(EC)DH public keys as specified for instance in <xref target="RFC8410"/>, or using a
delegation mechanism, such as delegated credentials <xref target="I-D.ietf-tls-subcerts"/>.
The public keys need not necessarily be certificates, however. The client might
be provided with the public key as a matter of configuration.</t>
      <t>In this proposal, we build on <xref target="RFC9180"/>. This standard currently only covers
Diffie-Hellman based KEMs, but the first post-quantum algorithms have already
been put forward <xref target="I-D.westerbaan-cfrg-hpke-xyber768d00"/>. This proposal
uses ML-KEM <xref target="FIPS203"/> <xref target="I-D.cfrg-schwabe-kyber"/>, the first selected
algorithm for key exchange in the NIST post-quantum standardization project
<xref target="NISTPQC"/>.</t>
      <section anchor="revision-history">
        <name>Revision history</name>
        <t><strong>This section should be removed prior to publication of a final version of this
document.</strong></t>
        <ul spacing="normal">
          <li>
            <t>Revision draft-wiggers-tls-authkem-psk-02
            </t>
            <ul spacing="normal">
              <li>
                <t>Fixing a few links</t>
              </li>
              <li>
                <t>Update to ML-KEM/FIPS203</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Revision draft-wiggers-tls-authkem-psk-01
            </t>
            <ul spacing="normal">
              <li>
                <t>Revised abstract</t>
              </li>
              <li>
                <t>Minor edits</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Revision draft-wiggers-tls-authkem-psk-00
            </t>
            <ul spacing="normal">
              <li>
                <t>Split PSK mechanism off from <xref target="I-D.celi-wiggers-tls-authkem"/></t>
              </li>
            </ul>
          </li>
          <li>
            <t>Revision draft-celi-wiggers-tls-authkem-01
            </t>
            <ul spacing="normal">
              <li>
                <t>Significant Editing</t>
              </li>
              <li>
                <t>Use HPKE context</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Revision draft-celi-wiggers-tls-authkem-00
            </t>
            <ul spacing="normal">
              <li>
                <t>Initial version</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="related-work">
        <name>Related work</name>
        <t>This proposal draws inspiration from <xref target="I-D.ietf-tls-semistatic-dh"/>, which is
in turn based on the OPTLS proposal for TLS 1.3 <xref target="KW16"/>. 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>
      <section anchor="organization">
        <name>Organization</name>
        <t>After covering preliminaries, we introduce the abbreviated AuthKEM-PSK
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="conventions-and-definitions">
      <name>Conventions and definitions</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 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?>
      </t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The following terms are used as they are in <xref target="RFC8446"/></t>
        <dl>
          <dt>client:</dt>
          <dd>
            <t>The endpoint initiating the TLS connection.</t>
          </dd>
          <dt>connection:</dt>
          <dd>
            <t>A transport-layer connection between two endpoints.</t>
          </dd>
          <dt>endpoint:</dt>
          <dd>
            <t>Either the client or server of the connection.</t>
          </dd>
          <dt>handshake:</dt>
          <dd>
            <t>An initial negotiation between client and server that establishes the
parameters of their subsequent interactions within TLS.</t>
          </dd>
          <dt>peer:</dt>
          <dd>
            <t>An endpoint.  When discussing a particular endpoint, "peer" refers to the
endpoint that is not the primary subject of discussion.</t>
          </dd>
          <dt>receiver:</dt>
          <dd>
            <t>An endpoint that is receiving records.</t>
          </dd>
          <dt>sender:</dt>
          <dd>
            <t>An endpoint that is transmitting records.</t>
          </dd>
          <dt>server:</dt>
          <dd>
            <t>The endpoint that responded to the initiation of the TLS connection. i.e. the
peer of the client.</t>
          </dd>
        </dl>
      </section>
      <section anchor="key-encapsulation-mechanisms">
        <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>This definition matches the one from <xref target="I-D.celi-wiggers-tls-authkem"/>.</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>
        <dl newline="true">
          <dt><tt>Encapsulate(pkR, context_string)</tt>:</dt>
          <dd>
            <t>Takes a public key, and produces a shared secret and encapsulation.</t>
          </dd>
          <dt><tt>Decapsulate(enc, skR, context_string)</tt>:</dt>
          <dd>
            <t>Takes the encapsulation and the private key. Returns the shared secret.</t>
          </dd>
        </dl>
        <t>We implement these methods through the KEMs defined in <xref target="RFC9180"/> to export
shared secrets appropriate for using with key schedule in TLS 1.3:</t>
        <artwork><![CDATA[
def Encapsulate(pk, context_string):
  enc, ctx = HPKE.SetupBaseS(pk, "tls13 auth-kem")
  ss = ctx.Export(context_string, HKDF.Length)
  return (enc, ss)

def Decapsulate(enc, sk, context_string):
  return HPKE.SetupBaseR(enc, sk, "tls13 auth-kem")
             .Export(context_string, HKDF.Length)
]]></artwork>
        <t>Keys are generated and encoded for transmission following the conventions in
<xref target="RFC9180"/>. The values of <tt>context_string</tt> are defined in
<xref target="kem-computations"/>.</t>
        <t><strong>Open question:</strong> Should we keep using HPKE, or just use "plain" KEMs, as in
the original KEMTLS works? Please see the discussion at <eref target="https://github.com/kemtls/draft-celi-wiggers-tls-authkem/issues/32">Issue
#32</eref>.</t>
      </section>
    </section>
    <section anchor="psk-protocol">
      <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 similarly to early data.</t>
      <artwork><![CDATA[
       Client                                        Server
Key  ^ ClientHello
Exch | + key_share
&    | + stored_auth_key
Auth | + signature_algorithms
     | + early_auth*
     | + early_data*
     | (Certificate*)
     | (Application Data*)    -------->        ServerHello  ^
     |                                         + key_share  |
     |                                   + stored_auth_key  | 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">
        <name>Negotiation</name>
        <t><strong>In an <xref target="psk-variant"/>, we sketch a variant based on the PSK extension.</strong></t>
        <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 <tt>EarlySecret</tt> 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">
        <name>0-RTT, forward secrecy and replay protection</name>
        <t>The client MAY send 0-RTT data, as in <xref target="RFC8446"/> 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">
      <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-algorithms">
        <name>Negotiation of AuthKEM algorithms</name>
        <t>Clients and servers indicate support for AuthKEM authentication 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"/> Section 7.1. Note
that we will be only using their internal KEM's API defined there.</t>
        <artwork><![CDATA[
enum {
  dhkem_p256_sha256   => TBD,
  dhkem_p384_sha384   => TBD,
  dhkem_p521_sha512   => TBD,
  dhkem_x25519_sha256 => TBD,
  dhkem_x448_sha512   => TBD,
  kem_x25519kyber768  => TBD, /*draft-westerbaan-cfrg-hpke-xyber768d00*/
}
]]></artwork>
        <t>This matches the definition in <xref target="I-D.celi-wiggers-tls-authkem"/>.</t>
        <t><strong>Please give feedback on which KEMs should be included</strong></t>
        <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">
        <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><![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><![CDATA[
+---------------------------------------+-------------+
| Extension                             |    KEM-Auth |
+---------------------------------------+-------------+
| stored_auth_key [RFCTBD]              |      CH, SH |
|                                       |             |
| early_auth  [RFCTBD]                  |      CH, SH |
|                                       |             |
+---------------------------------------+-------------+
]]></artwork>
        <section anchor="stored-auth-key">
          <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 <tt>ClientHello</tt> and <tt>ServerHello</tt>
messages.</t>
          <t>The <tt>extension_data</tt> field of this extension, when included in the
<tt>ClientHello</tt>, MUST contain the <tt>StoredInformation</tt> structure.</t>
          <artwork><![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 following information when included in
<tt>ClientHello</tt> messages:</t>
          <ul spacing="normal">
            <li>
              <t>The client indicates the public key encapsulated to by its fingerprint</t>
            </li>
            <li>
              <t>The client submits the ciphertext</t>
            </li>
          </ul>
          <t>The server MUST send the extension back as an acknowledgement, if and only if it
wishes to negotiate the abbreviated AuthKEM handshake.</t>
          <t>The fingerprint calculation proceeds this way:</t>
          <ol spacing="normal" type="1"><li>
              <t>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).</t>
            </li>
            <li>
              <t>Use the output of the SHA-256 hash.</t>
            </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">Security
Considerations</xref>.</t>
        </section>
        <section anchor="early-authentication">
          <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)<tt>extension. It is
used in</tt>ClientHello<tt>and</tt>ServerHello`` messages.</t>
          <artwork><![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">
        <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, except
for the addition of a <tt>KEMEncapsulation</tt> message and does not use
the <tt>CertificateVerify</tt> one.</t>
        <t>Note that these definitions mirror <xref target="I-D.celi-wiggers-tls-authkem"/>.</t>
        <artwork><![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 <xref target="psk-protocol"/>. A peer
which receives a handshake message in an unexpected order MUST abort the
handshake with an "unexpected_message" alert.</t>
        <t>The <tt>KEMEncapsulation</tt> message is defined as follows:</t>
        <artwork><![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()</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()</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">
        <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="authkem-psk-key-schedule">
          <name>AuthKEM-PSK key schedule</name>
          <t>The AuthKEM-PSK handshake follows the <xref target="RFC8446"/> key schedule closely. We
change the computation of the <tt>EarlySecret</tt> as follows, and add a computation
for <tt>client_early_handshake_traffic_secret</tt>:</t>
          <artwork><![CDATA[
            0
            |
            v
    SSs -> HKDF-Extract = Early Secret
            |
            ...
            +--> Derive-Secret(., "c e traffic", ClientHello)
            |                  = client_early_traffic_secret
            |
            +--> Derive-Secret(., "c e hs traffic", ClientHello)
            |                  = client_early_handshake_traffic_secret
            ...
            |
            v
            Derive-Secret(., "derived", "") = dES
            ...
]]></artwork>
          <t>We change the computation of <tt>Main Secret</tt> as follows:</t>
          <artwork><![CDATA[
            Derive-Secret(., "derived", "") = dHS
            |
            v
SSc||0 * -> HKDF-Extract = Main Secret
            |
            ...
]]></artwork>
          <t><tt>SSc</tt> is included if client authentication is used; otherwise, the value <tt>0</tt> is
used.</t>
        </section>
        <section anchor="kem-computations">
          <name>Computations of KEM shared secrets</name>
          <t>As in <xref target="I-D.celi-wiggers-tls-authkem"/>, operations to compute <tt>SSs</tt> or
<tt>SSc</tt> from the client are:</t>
          <artwork><![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><![CDATA[
               SSs <- Decapsulate(encapsulation, private_key_server
                                  "server authentication")
SSc, encapsulation <- Encapsulate(public_key_client,
                                  "client authentication")
]]></artwork>
        </section>
        <section anchor="explicit-authentication-messages">
          <name>Explicit Authentication Messages</name>
          <t>AuthKEM upgrades implicit to explicit authentication through the <tt>Finished</tt>
message. With AuthKEM-PSK, the server achieves explicit authentication when
sending their <tt>Finished</tt> message and the client when they send their
<tt>Finished</tt> message.</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><![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><![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>These computations match <xref target="I-D.celi-wiggers-tls-authkem"/>.</t>
          <t>See <xref target="sec-authkem-pdk-negotiation"/> 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">
      <name>Security Considerations</name>
      <ul spacing="normal">
        <li>
          <t>Because the Main Secret is derived from both the ephemeral key exchange,
as well as from the key exchanges completed for server and (optionally) client
authentication, the MS secret always reflects the peers' views of the authentication
status correctly. This is an improvement over TLS 1.3 for client authentication.</t>
        </li>
        <li>
          <t>The academic works proposing AuthKEM (KEMTLS) contains an in-depth technical
discussion of and a proof of the security of the handshake protocol without
client authentication (<xref target="SSW20"/>, <xref target="Wig24"/>).</t>
        </li>
        <li>
          <t>The work proposing the variant protocol (<xref target="SSW21"/>, <xref target="Wig24"/>) with pre-distributed public
keys (the abbreviated AuthKEM handshake) has a proof for both unilaterally and
mutually authenticated handshakes.</t>
        </li>
        <li>
          <t>We have machine-verified proofs of the security of KEMTLS and KEMTLS-PDK in
Tamarin. <xref target="CHSW22"/></t>
        </li>
        <li>
          <t>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.</t>
        </li>
        <li>
          <t>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.</t>
        </li>
        <li>
          <t>If AuthKEM-PSK client authentication is used, the resulting shared secret is
included in the key schedule. This ensures that both peers have a consistent
view of the authentication status, unlike <xref target="RFC8446"/>.</t>
        </li>
      </ul>
      <section anchor="server-anonymity">
        <name>Server Anonymity</name>
        <t>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"/> may help alleviate this.</t>
        <t>An alternative approach could be the use of trial decryption. If the KEM used
has anonymity, the ciphertext that the client sends is not linkable to the
server public key. ML-KEM offers post-quantum anonymity <xref target="MX22"/>.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-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"/>
            <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"/>
            <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="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"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="SSW20">
          <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="ACM CCS 2020" value=""/>
          <seriesInfo name="DOI" value="10.1145/3372297.3423350"/>
          <seriesInfo name="IACR ePrint" value="https://ia.cr/2020/534"/>
        </reference>
        <reference anchor="SSW21">
          <front>
            <title>More Efficient KEMTLS with Pre-Shared Keys</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="2021" month="May"/>
          </front>
          <seriesInfo name="ESORICS 2021" value=""/>
          <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="CHSW22">
          <front>
            <title>A tale of two models: formal verification of KEMTLS in Tamarin</title>
            <author initials="S." surname="Celi" fullname="Sofía Celi">
              <organization>Brave Software</organization>
            </author>
            <author initials="J." surname="Hoyland" fullname="Jonathan Hoyland">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author initials="D." surname="Stebila" fullname="Douglas Stebila">
              <organization>University of Waterloo</organization>
            </author>
            <author initials="T." surname="Wiggers" fullname="Thom Wiggers">
              <organization>Radboud University</organization>
            </author>
            <date year="2022" month="August"/>
          </front>
          <seriesInfo name="ESORICS 2022" value=""/>
          <seriesInfo name="DOI" value="10.1007/978-3-031-17143-7_4"/>
          <seriesInfo name="IACR ePrint" value="https://ia.cr/2022/1111"/>
        </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="Wig24">
          <front>
            <title>Post-Quantum TLS</title>
            <author initials="T." surname="Wiggers" fullname="Thom Wiggers">
              <organization>Radboud University</organization>
            </author>
            <date year="2024" month="January" day="09"/>
          </front>
          <seriesInfo name="PhD thesis" value="https://thomwiggers.nl/publication/thesis/"/>
        </reference>
        <reference anchor="KW16" target="https://ia.cr/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&amp;P 2016" value=""/>
        </reference>
        <reference anchor="MX22">
          <front>
            <title>Post-Quantum Anonymity of Kyber</title>
            <author initials="V." surname="Maram" fullname="Varum Maram">
              <organization>ETH Zurich</organization>
            </author>
            <author initials="K." surname="Xagawa" fullname="Keita Xagawa">
              <organization>NTT Social Informatics Laboratories</organization>
            </author>
            <date year="2022"/>
          </front>
          <seriesInfo name="PKC" value="2023"/>
          <seriesInfo name="IACR ePrint" value="https://ia.cr/2022/1696"/>
        </reference>
        <reference anchor="FIPS203">
          <front>
            <title>Module-Lattice-Based Key-Encapsulation Mechanism Standard</title>
            <author initials="" surname="National Institute of Standards and Technology">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.203"/>
        </reference>
        <reference anchor="I-D.celi-wiggers-tls-authkem">
          <front>
            <title>KEM-based Authentication for TLS 1.3</title>
            <author fullname="Thom Wiggers" initials="T." surname="Wiggers">
              <organization>PQShield</organization>
            </author>
            <author fullname="Sofia Celi" initials="S." surname="Celi">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Peter Schwabe" initials="P." surname="Schwabe">
              <organization>Radboud University and MPI-SP</organization>
            </author>
            <author fullname="Douglas Stebila" initials="D." surname="Stebila">
              <organization>University of Waterloo</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
         </author>
            <date day="15" month="April" year="2024"/>
            <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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-celi-wiggers-tls-authkem-03"/>
        </reference>
        <reference anchor="I-D.ietf-tls-subcerts">
          <front>
            <title>Delegated Credentials for TLS and DTLS</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Subodh Iyengar" initials="S." surname="Iyengar">
              <organization>Facebook</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Mozilla</organization>
            </author>
            <date day="30" month="June" year="2022"/>
            <abstract>
              <t>The organizational separation between operators of TLS and DTLS endpoints 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 (CA).  This document describes a mechanism to overcome some of these limitations by enabling operators to delegate their own credentials for use in TLS and DTLS without breaking compatibility with peers that do not support this specification.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-subcerts-15"/>
        </reference>
        <reference anchor="I-D.westerbaan-cfrg-hpke-xyber768d00">
          <front>
            <title>X25519Kyber768Draft00 hybrid post-quantum KEM for HPKE</title>
            <author fullname="Bas Westerbaan" initials="B." surname="Westerbaan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="14" month="May" year="2024"/>
            <abstract>
              <t>   This memo defines X25519Kyber768Draft00, a hybrid post-quantum KEM,
   for HPKE (RFC9180).  This KEM does not support the authenticated
   modes of HPKE.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-westerbaan-cfrg-hpke-xyber768d00-03"/>
        </reference>
        <reference anchor="I-D.cfrg-schwabe-kyber">
          <front>
            <title>Kyber Post-Quantum KEM</title>
            <author fullname="Peter Schwabe" initials="P." surname="Schwabe">
              <organization>MPI-SP &amp; Radboud University</organization>
            </author>
            <author fullname="Bas Westerbaan" initials="B." surname="Westerbaan">
              <organization>Cloudflare</organization>
            </author>
            <date day="2" month="January" year="2024"/>
            <abstract>
              <t>   This memo specifies a preliminary version ("draft00", "v3.02") of
   Kyber, an IND-CCA2 secure Key Encapsulation Method.

About This Document

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

   The latest revision of this draft can be found at
   https://bwesterb.github.io/draft-schwabe-cfrg-kyber/draft-cfrg-
   schwabe-kyber.html.  Status information for this document may be
   found at https://datatracker.ietf.org/doc/draft-cfrg-schwabe-kyber/.

   Source for this draft and an issue tracker can be found at
   https://github.com/bwesterb/draft-schwabe-cfrg-kyber.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-cfrg-schwabe-kyber-04"/>
        </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" initials="E." surname="Rescorla">
              <organization>Mozilla</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>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="I-D.ietf-tls-esni">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Independent</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cryptography Consulting LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="15" month="September" year="2024"/>
            <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-22"/>
        </reference>
      </references>
    </references>
    <?line 769?>

<section anchor="open-points-of-discussion">
      <name>Open points of discussion</name>
      <t>The following are open points for discussion. The corresponding GitHub issues
will be linked.</t>
      <section anchor="psk-variant">
        <name>Alternative implementation based on the <tt>pre_shared_key</tt> extension</name>
        <t><strong>This is discussed in <eref target="https://github.com/kemtls/draft-celi-wiggers-tls-authkem/issues/25">Issue
#25</eref>.</strong></t>
        <t><xref target="RFC8446"/> defines a PSK handshake that can be used with symmetric keys from
e.g. session tickets. In this section, we sketch an alternative approach to
AuthKEM-PSK based on the <tt>pre_shared_key</tt> extension.</t>
        <t>A client needs to be set up with the following information:</t>
        <artwork><![CDATA[
struct {
    uint32 authkem_psk_config_version;
    uint32 config_lifetime;
    opaque KEMPublicKey;
} AuthKEMPSKConfig;
]]></artwork>
        <t>The client computes a KEM ciphertext and shared secret as follows:</t>
        <artwork><![CDATA[
SSs, encapsulation <- Encapsulate(public_key_server,
                                  "server authentication")
]]></artwork>
        <t><tt>SSs</tt> is used in place of <tt>PSK</tt> in the TLS 1.3 key schedule, and <tt>binder_key</tt> is
derived as follows:</t>
        <artwork><![CDATA[
          0
          |
          v
SSc ->  HKDF-Extract = Early Secret
          |
          +-----> Derive-Secret(., "ext binder" | "res binder", "")
          |                     = binder_key
          ...
]]></artwork>
        <t>In the <tt>pre_shared_key</tt> extension's <tt>identities</tt>, the client sends the following
data:</t>
        <artwork><![CDATA[
struct {
  uint32 authkem_psk_config_version;
  opaque KEMCiphertext;
} AuthKEMPSKIdentity
]]></artwork>
        <t>The server computes the shared secret <tt>SSs</tt> from
<tt>AuthKEMPSKIdentity.KEMCiphertext</tt> as follows:</t>
        <artwork><![CDATA[
SSs <- Decapsulate(encapsulation,
                   private_key_server
                   "server authentication")
]]></artwork>
        <t>The PSK binder value is computed as specified in <xref target="RFC8446"/>, section 4.2.11.2.
The server MUST verify the binder before continuing and abort the handshake if
verification fails.</t>
        <t><strong>To be determined: how to handle immediate client authentication.</strong></t>
      </section>
      <section anchor="interactions-with-dtls">
        <name>Interactions with DTLS</name>
        <t>It is currently open if there need to be made modifications to better support
integration with DTLS. Discussion is at <eref target="https://github.com/kemtls/draft-celi-wiggers-tls-authkem/issues/23">Issue
#23</eref>.</t>
      </section>
      <section anchor="interaction-with-signing-certificates">
        <name>Interaction with signing certificates</name>
        <t>Tracked by <eref target="https://github.com/kemtls/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 signing 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>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This work has been supported by the European Research Council through Starting
Grant No. 805031 (EPOQUE).</t>
      <t>Part of this work was supported by the NLNet NGI Assure theme fund project
<eref target="https://nlnet.nl/project/KEMTLS/">"Standardizing KEMTLS"</eref></t>
    </section>
  </back>
  <!-- ##markdown-source:
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
TecK3bVOM+Pm7Uq3OtO4Je8oIYb5547dSKT9/GYT1eb05mNJ6p4W0cuoGwms
cQzIWhiJDSQvCUbUvBNH2286xQho8Ojq3PZe8QYpZV9lNp+JL4CBRwhZb4q9
gxeYQYB/AAl/9724/vGkUz/df/Ucn8I/654e7HXx6UF3b83Tz3sHB93Xpu+V
p8+fv1rXtm55q6ux7FOxs60Ldx4p3treCe4508z40tkvcraRiOWPbxptb+sk
LSb86mrR3BQFkxjr2iqNjUeI1ylPavJ2BgqvVT7XObG+adUy6yIwa8Gsj7qI
xVYkeqUe1iTXfRlE4eynr6XmBmFov8Ob4omz5u1YGm9iwRIsQKf2brDUXPGq
KxF648tk1cBGOMEAGQE3CeYYGIh3QFcHvN1p5m/DShsoxJMwpd2FkOZptxGc
nrjOFo9D0tJGehDq0NJBBO5mEgykN19dLwvZ5/peckDXb3tBN9pvrqYowji4
mVbbAr2FWK/5s7ONRzxRqQXoqnDyaJtarG229eLgYP+gHdwLj9pvjO6DEYsH
qeRgx6oSC8/ykQtvY53PrmUNTkkrit7l+jp82o//3tfBrzV166elfyhLhjVA
nKD9B8ZrSuEjcA2Y9mnNeHiGriN6ZzDeU1OW/nvYzhHfhrF+z/H+Xr7o9MUz
0SP2cKYVk77BdW6RDQNegi8Nr9uIgrNNMYVbvuUXCumNcyziA2fqxJSgs8HW
CmTnpdDvt01duzle4SUTeKvdjQICo9o6kuzbkSjL3BdjvFfAVig4lhdLjqwB
NzlNb7QOG1E3SdFndtpzOHnWF9beaCvBv5OdwB+uBhZbOPG2/VaIIboZU21U
izwv4r/OaXP8Bhg4wRIr8PXfdqMI/OT336y+yZkB3Pikl/6j+yLsfu+PYqpT
6rZHFO7JEYkRuP9V9yvT9b0Y5KPlN2BnVubquNlaoCs8qjdwk7rpCruDDWki
rHfYdmMh35I5ia5mWADuCKsHHa75HdHlGTo8rpnmJyC8vEg9Rz4yQuWh8CnL
F6kcTQg4U+xty9gIlwYLXUSVW+S6sQTSC+GoaK2mHmSXDs0SLPhgn3bSi3gJ
bAKwCIEAhbTUf+/sKET0NY3V1MDfJMN6eAq9CFlyHMoZCWo50q8D+aQAXJjf
aFvrOJ8DonxJtqTFTLNnn+wJPB/z2bGp1HVSgirh2lGwB3T/outlIezGQTS1
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

-->

</rfc>
