<?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.8 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-connolly-tls-mlkem-key-agreement-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.1 -->
  <front>
    <title abbrev="connolly-tls-mlkem-key-agreement">ML-KEM Post-Quantum Key Agreement for TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-connolly-tls-mlkem-key-agreement-01"/>
    <author fullname="Deirdre Connolly">
      <organization>SandboxAQ</organization>
      <address>
        <email>durumcrustulum@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="March" day="22"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <keyword>mlkem</keyword>
    <keyword>tls</keyword>
    <keyword>post-quantum</keyword>
    <abstract>
      <?line 62?>

<t>This memo defines ML-KEM-768 and ML-KEM-1024 as a standalone
<tt>NamedGroup</tt> for use in TLS 1.3 to achieve post-quantum key agreement.</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-connolly-tls-mlkem-key-agreement/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Transport Layer Security 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/dconnolly/draft-connolly-tls-mlkem-key-agreement"/>.</t>
    </note>
  </front>
  <middle>
    <?line 67?>

<section anchor="introduction">
      <name>Introduction</name>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>FIPS 203 standard (ML-KEM) is a new FIPS standard for post-quantum
key agreement via lattice-based key establishment mechanism
(KEM). Having a fully post-quantum (not hybrid) key agreement
option for TLS 1.3 is necessary for migrating beyond hybrids and
for users that need to be fully post-quantum.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="kems">
      <name>Key encapsulation mechanisms</name>
      <t>This document models key agreement as key encapsulation mechanisms
(KEMs), which consist of three algorithms:</t>
      <ul spacing="normal">
        <li>
          <t><tt>KeyGen() -&gt; (pk, sk)</tt>: A probabilistic key generation algorithm,
which generates a public encapsulation key <tt>pk</tt> and a secret
decapsulation key <tt>sk</tt>.</t>
        </li>
        <li>
          <t><tt>Encaps(pk) -&gt; (ct, shared_secret)</tt>: A probabilistic encapsulation
algorithm, which takes as input a public encapsulation key <tt>pk</tt> and
outputs a ciphertext <tt>ct</tt> and shared secret <tt>shared_secret</tt>.</t>
        </li>
        <li>
          <t><tt>Decaps(sk, ct) -&gt; shared_secret</tt>: A decapsulation algorithm, which takes as
input a secret decapsulation key <tt>sk</tt> and ciphertext <tt>ct</tt> and outputs
a shared secret <tt>shared_secret</tt>.</t>
        </li>
      </ul>
      <t>ML-KEM-768 and ML-KEM-1024 conform to this API:</t>
      <ul spacing="normal">
        <li>
          <t>ML-KEM-768 has encapsulation keys of size 1184 bytes, decapsulation
keys of 2400 bytes, ciphertext size of 1088 bytes, and shared secrets
of size 32 bytes</t>
        </li>
        <li>
          <t>ML-KEM-1024 has encapsulation keys of size 1568 bytes, decapsulation
keys of 3168 bytes, ciphertext size of 1568 bytes, and shared secrets
of size 32 bytes</t>
        </li>
      </ul>
    </section>
    <section anchor="construction">
      <name>Construction</name>
      <t>We define the KEMs as <tt>NamedGroup</tt>s and sent in the <tt>supported_groups</tt>
extension.</t>
      <section anchor="negotiation">
        <name>Negotiation</name>
        <t>Each method is its own solely post-quantum key agreement method, which
are assigned their own identifiers, registered by IANA in the TLS
Supported Groups registry:</t>
        <artwork><![CDATA[
    enum {

         ...,

          /* ML-KEM Key Agreement Methods */
          mlkem768(0x0768),
          mlkem1024(0x1024)

         ...,

    } NamedGroup;
]]></artwork>
      </section>
      <section anchor="construction-transmitting">
        <name>Transmitting encapsulation keys and ciphertexts</name>
        <t>The encapsulation key and ciphertext values are directly encoded with
fixed lengths as in <xref target="FIPS203"/>; the representation and length of
elements <bcp14>MUST</bcp14> be fixed once the algorithm is fixed.</t>
        <t>In TLS 1.3 a KEM encapsulation key or KEM ciphertext is
represented as a <tt>KeyShareEntry</tt>:</t>
        <artwork><![CDATA[
    struct {
        NamedGroup group;
        opaque key_exchange<1..2^16-1>;
    } KeyShareEntry;
]]></artwork>
        <t>These are transmitted in the <tt>extension_data</tt> fields of
<tt>KeyShareClientHello</tt> and <tt>KeyShareServerHello</tt> extensions:</t>
        <artwork><![CDATA[
    struct {
        KeyShareEntry client_shares<0..2^16-1>;
    } KeyShareClientHello;

    struct {
        KeyShareEntry server_share;
    } KeyShareServerHello;
]]></artwork>
        <t>The client's shares are listed in descending order of client preference;
the server selects one algorithm and sends its corresponding share.</t>
        <t>For the client's share, the <tt>key_exchange</tt> value contains the <tt>pk</tt>
output of the corresponding ML-KEM <tt>NamedGroup</tt>'s <tt>KeyGen</tt> algorithm.</t>
        <t>For the server's share, the <tt>key_exchange</tt> value contains the <tt>ct</tt>
output of the corresponding ML-KEM <tt>NamedGroup</tt>'s <tt>Encaps</tt> algorithm.</t>
      </section>
      <section anchor="construction-shared-secret">
        <name>Shared secret calculation</name>
        <t>The shared secret output from the ML-KEM <tt>Encaps</tt> and <tt>Decaps</tt>
algorithms over the appropriate keypair and ciphertext results in the
same shared secret <tt>shared_secret</tt>, which is inserted into the TLS 1.3
key schedule in place of the (EC)DHE shared secret, as shown in
<xref target="fig-key-schedule"/>.</t>
        <figure anchor="fig-key-schedule">
          <name>Key schedule for key agreement</name>
          <artwork><![CDATA[
                                    0
                                    |
                                    v
                      PSK ->  HKDF-Extract = Early Secret
                                    |
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    |
                                    v
                              Derive-Secret(., "derived", "")
                                    |
                                    v
             shared_secret -> HKDF-Extract = Handshake Secret
             ^^^^^^^^^^^^^          |
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    |
                                    v
                              Derive-Secret(., "derived", "")
                                    |
                                    v
                         0 -> HKDF-Extract = Master Secret
                                    |
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="discussion">
      <name>Discussion</name>
      <t><strong>Larger encapsulation keys and/or ciphertexts</strong>  The <tt>HybridKeyExchange</tt>
struct in <xref target="construction-transmitting"/> limits public keys and
ciphertexts to 2^16-1 bytes; this is bounded by the same (2^16-1)-byte
limit on the <tt>key_exchange</tt> field in the <tt>KeyShareEntry</tt> struct. All
defined parameter sets for ML-KEM have encapsulation keys and
ciphertexts that fall within the TLS constraints.</t>
      <t><strong>Failures</strong>  Some post-quantum key exchange algorithms, including
ML-KEM, have non-zero probability of failure, meaning two honest parties
may derive different shared secrets.  This would cause a handshake
failure. ML-KEM has a cryptographically small failure rate; implementers
should be aware of the potential of handshake failure. Clients can retry
if a failure is encountered.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t><strong>IND-CCA</strong> The main security property for KEMs is indistinguishability under
adaptive chosen ciphertext attack (IND-CCA2), which means that shared
secret values should be indistinguishable from random strings even given
the ability to have other arbitrary ciphertexts decapsulated.  IND-CCA2
corresponds to security against an active attacker, and the public key /
secret key pair can be treated as a long-term key or reused.  A common
design pattern for obtaining security under key reuse is to apply the
Fujisaki-Okamoto (FO) transform <xref target="FO"/> or a variant thereof <xref target="HHK"/>.</t>
      <t>Key exchange in TLS 1.3 is phrased in terms of Diffie-Hellman key
exchange in a group.  DH key exchange can be modeled as a KEM, with
<tt>KeyGen</tt> corresponding to selecting an exponent <tt>x</tt> as the secret key
and computing the public key <tt>g^x</tt>; encapsulation corresponding to
selecting an exponent <tt>y</tt>, computing the ciphertext <tt>g^y</tt> and the shared
secret <tt>g^(xy)</tt>, and decapsulation as computing the shared secret
<tt>g^(xy)</tt>. See <xref target="HPKE"/> for more details of such Diffie-Hellman-based key
encapsulation mechanisms. Diffie-Hellman key exchange, when viewed as a
KEM, does not formally satisfy IND-CCA2 security, but is still safe to
use for ephemeral key exchange in TLS 1.3, see e.g. <xref target="DOWLING"/>.</t>
      <t>TLS 1.3 does not require that ephemeral public keys be used only in a
single key exchange session; some implementations may reuse them, at the
cost of limited forward secrecy.  As a result, any KEM used in the
manner described in this document <bcp14>MUST</bcp14> explicitly be designed to be
secure in the event that the public key is reused.  Finite-field and
elliptic-curve Diffie-Hellman key exchange methods used in TLS 1.3
satisfy this criteria.  For generic KEMs, this means satisfying IND-CCA2
security or having a transform like the Fujisaki-Okamoto transform
<xref target="FO"/> <xref target="HHK"/> applied.  While it is recommended that implementations
avoid reuse of KEM public keys, implementations that do reuse KEM public
keys <bcp14>MUST</bcp14> ensure that the number of reuses of a KEM public key abides by
any bounds in the specification of the KEM or subsequent security
analyses.  Implementations <bcp14>MUST NOT</bcp14> reuse randomness in the generation
of KEM ciphertexts.</t>
      <t><strong>Binding properties</strong> TLS 1.3's key schedule commits to the the ML-KEM
encapsulation key and the encapsulated shared secret ciphertext as the
<tt>key_exchange</tt> field as part of the <tt>key_share</tt> extension are populated
with those values are included as part of the handshake messages,
providing resilience against re-encapsulation attacks against KEMs used
for key agreement.</t>
      <t>ML-KEM is MAL-BIND-K-PK-secure but only LEAK-BIND-K-CT and
LEAK-BIND-K,PK-CT-secure, but because of the inclusion of the ML-KEM
ciphertext in the TLS 1.3 key schedule there is no concern of malicious
tampering (MAL) adversaries, not just honestly-generated but leaked key
pairs (LEAK adversaries). The same is true of other KEMs with weaker
binding properties, even if they were to have more constraints for
secure use in contexts outside of TLS 1.3 handshake key agreement.These
computational binding properties for KEMs were formalized in <xref target="CDM23"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests/registers two new entries to the TLS Supported
Groups registry, according to the procedures in <xref section="6" sectionFormat="of" target="tlsiana"/>.</t>
      <dl>
        <dt>Value:</dt>
        <dd>
          <t>0x0768 (please)</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>MLKEM768</t>
        </dd>
        <dt>DTLS-OK:</dt>
        <dd>
          <t>Y</t>
        </dd>
        <dt>Recommended:</dt>
        <dd>
          <t>N</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This document</t>
        </dd>
        <dt>Comment:</dt>
        <dd>
          <t>FIPS 203 version of ML-KEM-768</t>
        </dd>
        <dt>Value:</dt>
        <dd>
          <t>0x1024 (please)</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>MLKEM1024</t>
        </dd>
        <dt>DTLS-OK:</dt>
        <dd>
          <t>Y</t>
        </dd>
        <dt>Recommended:</dt>
        <dd>
          <t>N</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This document</t>
        </dd>
        <dt>Comment:</dt>
        <dd>
          <t>FIPS 203 version of ML-KEM-1024</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="FIPS203">
          <front>
            <title>*** BROKEN REFERENCE ***</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </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="CDM23" target="https://eprint.iacr.org/2023/1933.pdf">
          <front>
            <title>Keeping Up with the KEMs: Stronger Security Notions for KEMs and automated analysis of KEM-based protocols</title>
            <author initials="C." surname="Cremers" fullname="Cas Cremers">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <author initials="A." surname="Dax" fullname="Alexander Dax">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <author initials="N." surname="Medinger" fullname="Niklas Medinger">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="DOWLING">
          <front>
            <title>A Cryptographic Analysis of the TLS 1.3 Handshake Protocol</title>
            <author fullname="Benjamin Dowling" initials="B." surname="Dowling">
              <organization/>
            </author>
            <author fullname="Marc Fischlin" initials="M." surname="Fischlin">
              <organization/>
            </author>
            <author fullname="Felix Günther" initials="F." surname="Günther">
              <organization/>
            </author>
            <author fullname="Douglas Stebila" initials="D." surname="Stebila">
              <organization/>
            </author>
            <date month="July" year="2021"/>
          </front>
          <seriesInfo name="Journal of Cryptology" value="vol. 34, no. 4"/>
          <seriesInfo name="DOI" value="10.1007/s00145-021-09384-1"/>
          <refcontent>Springer Science and Business Media LLC</refcontent>
        </reference>
        <reference anchor="FO">
          <front>
            <title>Secure Integration of Asymmetric and Symmetric Encryption Schemes</title>
            <author fullname="Eiichiro Fujisaki" initials="E." surname="Fujisaki">
              <organization/>
            </author>
            <author fullname="Tatsuaki Okamoto" initials="T." surname="Okamoto">
              <organization/>
            </author>
            <date month="December" year="2011"/>
          </front>
          <seriesInfo name="Journal of Cryptology" value="vol. 26, no. 1, pp. 80-101"/>
          <seriesInfo name="DOI" value="10.1007/s00145-011-9114-1"/>
          <refcontent>Springer Science and Business Media LLC</refcontent>
        </reference>
        <reference anchor="HHK">
          <front>
            <title>A Modular Analysis of the Fujisaki-Okamoto Transformation</title>
            <author fullname="Dennis Hofheinz" initials="D." surname="Hofheinz">
              <organization/>
            </author>
            <author fullname="Kathrin Hövelmanns" initials="K." surname="Hövelmanns">
              <organization/>
            </author>
            <author fullname="Eike Kiltz" initials="E." surname="Kiltz">
              <organization/>
            </author>
            <date year="2017"/>
          </front>
          <seriesInfo name="Theory of Cryptography" value="pp. 341-371"/>
          <seriesInfo name="DOI" value="10.1007/978-3-319-70500-2_12"/>
          <seriesInfo name="ISBN" value="[&quot;9783319704999&quot;, &quot;9783319705002&quot;]"/>
          <refcontent>Springer International Publishing</refcontent>
        </reference>
        <reference anchor="HPKE">
          <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="hybrid">
          <front>
            <title>Hybrid key exchange in TLS 1.3</title>
            <author fullname="Douglas Stebila" initials="D." surname="Stebila">
              <organization>University of Waterloo</organization>
            </author>
            <author fullname="Scott Fluhrer" initials="S." surname="Fluhrer">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Shay Gueron" initials="S." surname="Gueron">
              <organization>University of Haifa</organization>
            </author>
            <date day="7" month="September" year="2023"/>
            <abstract>
              <t>   Hybrid key exchange refers to using multiple key exchange algorithms
   simultaneously and combining the result with the goal of providing
   security even if all but one of the component algorithms is broken.
   It is motivated by transition to post-quantum cryptography.  This
   document provides a construction for hybrid key exchange in the
   Transport Layer Security (TLS) protocol version 1.3.

   Discussion of this work is encouraged to happen on the TLS IETF
   mailing list tls@ietf.org or on the GitHub repository which contains
   the draft: https://github.com/dstebila/draft-ietf-tls-hybrid-design.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-hybrid-design-09"/>
        </reference>
        <reference anchor="tlsiana">
          <front>
            <title>IANA Registry Updates for TLS and DTLS</title>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>Venafi</organization>
            </author>
            <author fullname="Sean Turner" initials="S." surname="Turner">
              <organization>sn3rd</organization>
            </author>
            <date day="23" month="January" year="2024"/>
            <abstract>
              <t>   This document updates the changes to TLS and DTLS IANA registries
   made in RFC 8447.  It adds a new value "D" for discouraged to the
   recommended column of the selected TLS registries.

   This document updates the following RFCs: 3749, 5077, 4680, 5246,
   5705, 5878, 6520, 7301, and 8447.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-rfc8447bis-08"/>
        </reference>
      </references>
    </references>
    <?line 342?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Douglas Stebila for consultation on the
draft-ietf-tls-hybrid-design design.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1a6XLjRpL+X09Ry/4xUi9BkZLcrZbsnqF1WAqdbrbX4dhY
N4tAkawRLqMASWyN/Cz7LPtk+2UWAAIU+5hZ70ZsxHQ4TAF15J35ZRU8zxO5
yUO9LzuXF9758aW8SWzu/VioOC8iea4XcjjLtI50nMtpksn3FyM56O10hJpM
Mn23L/0kjpMwXHh5aL0ovNWRd6sXnqpWCV/lepZki31p4mkiRJD4sYpAMcjU
NPe+tN7rD4QtJpGx1iRxvkix8uz4/YmUL6QKbQLOTRzoVON/cd7pyo4OTJ5k
RoX0cDb8Hj9gvHP27v1JR8RFNNHZvgjA1b4AcatjW9h9mWeFFpBnR4D8fZIF
+0J6khmiP8Ad/aSknd+cdoRQmVagP9J+kZl80RFYdzvLkiLF2/eZim2aZLm8
UAudyeWsOx0XIC7ll6dK6STu/IydTTyTP9ASeh8pE+I9+PqL0fm0l2Qzeq0y
f47X8zxP7f7WFs2iV+ZO96ppW/Ria5Il91ZvYf0WrZuZfF5MsDKoDLL1dfbp
QA1FPk8y0hc2knJahKGz8JE2WZBpeVjuwcPgQMXmo8phzn05UnEwSR6GP/KY
dlIFRVZEflbYvAiL6C8zetvzE2g8TrIIK+9Yfe9ODt8M9vr058nZzWi7vwOS
12e9Qb/3qr+9t3V1Nnrfo5EehoQg92usPjy63N7ZZ7JVCJxrnZKSf0rlPfQh
87mWiAl4xyjPknjWMI28SkgAy0FBcyQEkdBEAgoaf8UqXFhjZTKlYW+iLN6m
WZInfhLajqOrspnO92VlLZ1mJs57RvkZG2q7v72zNXizs9NLgymvYLeV9J4f
a83zP6/8lYg08HzYk4cZbJTZ+r0zy6Gyz0ZADgNno5uhPNVhNE/C/KM8hH0h
M4l4VikviWsdrCc77Mkj9bBCchjqBygImzXH/jiiVz15ibgnE61QvjK3IeR9
NvoP0cbqo+ufL86ufqg9bdDvv96y/f5g9xuvvz3w+m929na9Afnk9fpJg4H3
ZjBwc05Pz9uT3rze83a8ncEb73X/m37f2/4w2KZ5N+fH+5XD43m+mGQmQCb0
jjiuOTrdSy/Q1sxiSh2hNfDDlVnZ1N/b3X09MVYIz/Okmtg8U34uxPs5/DXS
USIDPTWxhta4JnivX+2xe5ePg/72roROlbQ5XqswibUYX0HdAaenMSuwsBq2
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
U9YbB2Pch7rrPwMs4UpP/DcqJe796y0AAA==

-->

</rfc>
