<?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.23 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-rosomakho-quic-extended-key-update-00" category="std" consensus="true" submissionType="IETF" updates="9001" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title>Extended Key Update for QUIC</title>
    <seriesInfo name="Internet-Draft" value="draft-rosomakho-quic-extended-key-update-00"/>
    <author initials="Y." surname="Rosomakho" fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yrosomakho@zscaler.com</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization abbrev="H-BRS">University of Applied Sciences Bonn-Rhein-Sieg</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>Hannes.Tschofenig@gmx.net</email>
      </address>
    </author>
    <date year="2025" month="February" day="23"/>
    <keyword>quic</keyword>
    <keyword>extended key update</keyword>
    <keyword>forward secrecy</keyword>
    <abstract>
      <?line 46?>

<t>This document specifies an Extended Key Update mechanism for the QUIC protocol, building on the
foundation of the TLS Extended Key Update. The TLS Extended Key Update specification enhances the
TLS protocol by introducing key updates with forward secrecy, eliminating the need to perform a
full handshake. This feature is particularly beneficial for maintaining security in scenarios
involving long-lived connections.</t>
      <t>This specification replaces the QUIC Key Update mechanism described in the "Using TLS to
Secure QUIC" specification.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://yaroslavros.github.io/quic-extended-key-update/draft-rosomakho-quic-extended-key-update.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-rosomakho-quic-extended-key-update/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/yaroslavros/quic-extended-key-update"/>.</t>
    </note>
  </front>
  <middle>
    <?line 57?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The QUIC protocol <xref target="QUIC"/> provides a secure, versatile transport for various applications, suitable for long-lived sessions
in environments like industrial IoT, telecommunication networks or Virtual Private Networks (VPN), as specified in <xref target="RFC9484"/>.</t>
      <t>The TLS Extended Key Update <xref target="I-D.ietf-tls-extended-key-update"/> introduces a mechanism to enhance the security and flexibility
of encrypted communication protocols by enabling frequent key updates without requiring a full handshake renegotiation. This
approach allows applications to refresh their encryption keys more often, improving forward secrecy and reducing the risk of
key compromise over long-lived connections. By separating key updates from the computationally expensive handshake process,
the specification provides a lightweight method for maintaining robust encryption in scenarios where connections need to
remain secure for extended periods.</t>
      <t>This new TLS capability is particularly valuable in environments where interruptions to perform a full key exchange would cause
significant disruption. Other encrypted communication protocols, such as IPsec <xref target="IKEv2"/> and SSH <xref target="SSH-TRANSPORT"/>,
include mechanisms for re-exchanging keys without interrupting active sessions. The TLS Extended Key Update specification ensures
that even in the face of potential key compromise, sensitive data remains protected due to frequent key rotation and the use
of forward secrecy.</t>
      <t>This specification builds on concepts from <xref target="I-D.ietf-tls-extended-key-update"/> and applies them to the QUIC protocol context.
It thereby replaces the QUIC Key Update mechanism described in <xref section="6" sectionFormat="of" target="QUIC-TLS"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>Readers are assumed to be familiar with <xref target="I-D.ietf-tls-extended-key-update"/>.</t>
    </section>
    <section anchor="extended-key-update-negotiation">
      <name>Extended Key Update Negotiation</name>
      <t>QUIC peers negotiate Extended Key Update through the TLS handshake process, as outlined in <xref section="4" sectionFormat="of" target="I-D.ietf-tls-extended-key-update"/>.
Extended Key Update <bcp14>MUST NOT</bcp14> be used unless both QUIC peers include the TLS flags extension <xref target="I-D.ietf-tls-tlsflags"/> in the handshake and
set the "Extended_Key_Update" flag.</t>
      <t>Once Extended Key Update has been succesfully negotiated, QUIC peers <bcp14>MUST</bcp14> only use the Extended Key Update process defined in this document.
The standard QUIC Key Update mechanism from <xref section="6" sectionFormat="of" target="QUIC-TLS"/> <bcp14>MUST NOT</bcp14> be used for the duration of the session, as both
Key Update and Extended Key Update use the Key Phase bit to signal the use of updated keys. The Key Phase bit is initially set to 0 and
toggled to indicate a key update following the succesful post-handshake exchange of Extended Key Update messsages.</t>
    </section>
    <section anchor="extended-key-update-messages">
      <name>Extended Key Update Messages</name>
      <t>Either party <bcp14>MAY</bcp14> initiate the Extended Key Update process by sending an ExtendedKeyUpdateRequest TLS handshake message in a QUIC CRYPTO frame.
This message <bcp14>MUST NOT</bcp14> be sent before the QUIC handshake is confirmed, as described in <xref section="4.1.2" sectionFormat="of" target="QUIC-TLS"/>, or before previous Extended
Key Update process is complete. If a QUIC endpoints receives an ExtendedKeyUpdateRequest message before the QUIC handshake is complete or during ongoing
prior Extended Key Update, it <bcp14>MUST</bcp14> terminate the connection with an error of type 0x010a, equivalent to TLS unexpected_message alert as specified
in <xref section="4.8" sectionFormat="of" target="QUIC-TLS"/>.</t>
      <t>Upon receiving an ExtendedKeyUpdateRequest, the recipient <bcp14>MUST</bcp14> respond with an ExtendedKeyUpdateResponse TLS handshake message within a QUIC CRYPTO frame.
If a QUIC endpoint receives an unexpected ExtendedKeyUpdateResponse message from its peer, it <bcp14>MUST</bcp14> treat this as a TLS protocol error and terminate
the connection.</t>
      <t>Specifications of the ExtendedKeyUpdateRequest and ExtendedKeyUpdateResponse messages are provided in <xref section="5" sectionFormat="of" target="I-D.ietf-tls-extended-key-update"/>.
Any mismatch between the negotiated NamedGroup during the initial handshake and the group used in the Extended Key Update message, or an incorrect length
of the encapsulated key <bcp14>MUST</bcp14> result in connection termination with error of type 0x012f, equivalend to TLS illegal_parameter alert.</t>
      <t>If the Extended Key Update initiator receives a retry or rejected status in the ExtendedKeyUpdateResponse message, it <bcp14>MAY</bcp14> terminate the connection with
error of type 0x01TBD, equivalent to TLS extended_key_update_required alert.</t>
    </section>
    <section anchor="updating-the-traffic-secrets">
      <name>Updating the Traffic Secrets</name>
      <t>After sending an ExtendedKeyUpdateResponse with accepted status, the responder derives new packet protection traffic secrets. The responder <bcp14>MUST</bcp14> continue
using the previous secrets until it has received a packet with the Key Phase bit flipped and has successfully unprotected it using the new keys.</t>
      <t>After recieving and succesfully processing an ExtendedKeyUpdateResponse with accepted status, the initiator derives new packet protection traffic secrets,
flips the Key Phase bit for new packets, and uses the new write secret to protect them. The initiator <bcp14>MUST</bcp14> retain the old read secret until
it has received a packet with a flipped Key Phase bit from the responder and succesfully unprotected it using the new read secret.</t>
      <t>Both endpoints <bcp14>SHOULD</bcp14> retain old read secrets for some time after unprotecting a packet encrypted with the new keys. Discarding old secret too early may
cause delayed packets to be discarded, which the peer may interpreted as packet loss, potentially impacting performance.</t>
      <t><xref target="fig-extended-key-update"/> shows this interaction graphically.</t>
      <figure anchor="fig-extended-key-update">
        <name>Extended Key Update Process in QUIC.</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="536" viewBox="0 0 536 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 232,80 L 296,80" fill="none" stroke="black"/>
              <path d="M 232,96 L 296,96" fill="none" stroke="black"/>
              <path d="M 232,144 L 296,144" fill="none" stroke="black"/>
              <path d="M 232,160 L 296,160" fill="none" stroke="black"/>
              <path d="M 232,192 L 296,192" fill="none" stroke="black"/>
              <path d="M 232,208 L 296,208" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="304,192 292,186.4 292,197.6" fill="black" transform="rotate(0,296,192)"/>
              <polygon class="arrowhead" points="304,144 292,138.4 292,149.6" fill="black" transform="rotate(0,296,144)"/>
              <polygon class="arrowhead" points="304,80 292,74.4 292,85.6" fill="black" transform="rotate(0,296,80)"/>
              <polygon class="arrowhead" points="240,208 228,202.4 228,213.6" fill="black" transform="rotate(180,232,208)"/>
              <polygon class="arrowhead" points="240,160 228,154.4 228,165.6" fill="black" transform="rotate(180,232,160)"/>
              <polygon class="arrowhead" points="240,96 228,90.4 228,101.6" fill="black" transform="rotate(180,232,96)"/>
              <g class="text">
                <text x="104" y="36">Initiator</text>
                <text x="416" y="36">Responder</text>
                <text x="8" y="68">[</text>
                <text x="52" y="68">packet</text>
                <text x="104" y="68">using</text>
                <text x="144" y="68">old</text>
                <text x="176" y="68">key</text>
                <text x="48" y="84">and</text>
                <text x="88" y="84">prior</text>
                <text x="128" y="84">Key</text>
                <text x="168" y="84">Phase</text>
                <text x="216" y="84">]</text>
                <text x="320" y="100">[</text>
                <text x="364" y="100">packet</text>
                <text x="416" y="100">using</text>
                <text x="456" y="100">old</text>
                <text x="488" y="100">key</text>
                <text x="360" y="116">and</text>
                <text x="400" y="116">prior</text>
                <text x="440" y="116">Key</text>
                <text x="480" y="116">Phase</text>
                <text x="520" y="116">]</text>
                <text x="264" y="132">...</text>
                <text x="108" y="148">[ExtendedKeyUpdateRequest]</text>
                <text x="424" y="164">[ExtendedKeyUpdateResponse]</text>
                <text x="8" y="180">[</text>
                <text x="52" y="180">packet</text>
                <text x="104" y="180">using</text>
                <text x="144" y="180">new</text>
                <text x="176" y="180">key</text>
                <text x="40" y="196">and</text>
                <text x="88" y="196">updated</text>
                <text x="136" y="196">Key</text>
                <text x="176" y="196">Phase</text>
                <text x="216" y="196">]</text>
                <text x="320" y="212">[</text>
                <text x="356" y="212">packet</text>
                <text x="408" y="212">using</text>
                <text x="448" y="212">new</text>
                <text x="480" y="212">key</text>
                <text x="344" y="228">and</text>
                <text x="392" y="228">updated</text>
                <text x="440" y="228">Key</text>
                <text x="480" y="228">Phase</text>
                <text x="512" y="228">]</text>
                <text x="264" y="244">...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
        Initiator                              Responder

[  packet using old key
    and prior Key Phase   ] -------->
                            <--------  [  packet using old key
                                           and prior Key Phase  ]
                               ...
[ExtendedKeyUpdateRequest]  -------->
                            <--------  [ExtendedKeyUpdateResponse]
[  packet using new key
   and updated Key Phase  ] -------->
                            <--------  [ packet using new key
                                         and updated Key Phase ]
                               ...
]]></artwork>
        </artset>
      </figure>
      <t>QUIC endpoints <bcp14>MUST NOT</bcp14> send NewKeyUpdate TLS handshake messages, defined in <xref target="I-D.ietf-tls-extended-key-update"/>, and
instead relies on the use of the Key Phase bit. Endpoints <bcp14>MUST</bcp14> treat the receipt of a TLS NewKeyUpdate message as a connection error
of type 0x010a. QUIC endpoints that have agreed to the Extended Key Update process <bcp14>MUST NOT</bcp14> change the Key Phase bit without a succesful exchange of
Extended Key Update TLS messages. Receiving a packet with the Key Phase bit changed without a success Extended Key Update exchange <bcp14>MUST</bcp14> be treated as
a connection error of type KEY_UPDATE_ERROR (0x0e).</t>
      <t>The design of the key derivation function for computing the next generation of secrets is corresponds to the one described in
<xref section="6" sectionFormat="of" target="I-D.ietf-tls-extended-key-update"/> with the exception of the use of a different label.</t>
      <sourcecode type="pseudocode"><![CDATA[
sk = HKDF-Extract(Transcript-Hash(ExtendedKeyUpdateRequest,
                                  ExtendedKeyUpdateResponse), secret)

secret_<n+1> = HKDF-Expand-Label(sk, "quic eku",
                                 secret_<n>, Hash.length)
]]></sourcecode>
      <t>The corresponding key and IV are derived from the new secret as defined in <xref section="5.1" sectionFormat="of" target="QUIC-TLS"/>. The header protection key is not updated.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This specification describes an update to the key schedule of QUIC. Therefore, implementations <bcp14>MUST</bcp14> ensure that peers adhere strictly to the process
described in this document. Packets with higher packet numbers <bcp14>MUST NOT</bcp14> be protected using an older generation of secrets, as this could compromise key
synchronization and security.</t>
      <t>As key exchange may be computationally intensive, responders <bcp14>SHOULD</bcp14> consider rate-limiting Extended Key Exchange requests. This can be done by responding
with retry status as outlined in <xref section="5" sectionFormat="of" target="I-D.ietf-tls-extended-key-update"/> and terminating connections for initiators that violate the back-off timer.
This approach helps prevent excessive load on endpoints and mitigates the risk of denial-of-service attacks.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="I-D.ietf-tls-extended-key-update">
          <front>
            <title>Extended Key Update for Transport Layer Security (TLS) 1.3</title>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>Siemens</organization>
            </author>
            <author fullname="Michael Tüxen" initials="M." surname="Tüxen">
              <organization>Münster Univ. of Applied Sciences</organization>
            </author>
            <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
              <organization>Nokia</organization>
            </author>
            <author fullname="Steffen Fries" initials="S." surname="Fries">
              <organization>Siemens</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   The Transport Layer Security (TLS) 1.3 specification offers a
   dedicated message to update cryptographic keys during the lifetime of
   an ongoing session.  The traffic secret and the initialization vector
   are updated directionally but the sender may trigger the recipient,
   via the request_update field, to transmit a key update message in the
   reverse direction.

   In environments where sessions are long-lived, such as industrial IoT
   or telecommunication networks, this key update alone is insufficient
   since forward secrecy is not offered via this mechanism.  Earlier
   versions of TLS allowed the two peers to perform renegotiation, which
   is a handshake that establishes new cryptographic parameters for an
   existing session.  When a security vulnerability with the
   renegotiation mechanism was discovered, RFC 5746 was developed as a
   fix.  Renegotiation has, however, been removed from version 1.3
   leaving a gap in the feature set of TLS.

   This specification defines an extended key update that supports
   forward secrecy.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-extended-key-update-03"/>
        </reference>
        <reference anchor="QUIC-TLS">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </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>
        <reference anchor="I-D.ietf-tls-tlsflags">
          <front>
            <title>A Flags Extension for TLS 1.3</title>
            <author fullname="Yoav Nir" initials="Y." surname="Nir">
              <organization>Dell Technologies</organization>
            </author>
            <date day="13" month="September" year="2024"/>
            <abstract>
              <t>   A number of extensions are proposed in the TLS working group that
   carry no interesting information except the 1-bit indication that a
   certain optional feature is supported.  Such extensions take 4 octets
   each.  This document defines a flags extension that can provide such
   indications at an average marginal cost of 1 bit each.  More
   precisely, it provides as many flag extensions as needed at 4 + the
   order of the last set bit divided by 8.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-tlsflags-14"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9484">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="A. Chernyakhovsky" initials="A." surname="Chernyakhovsky"/>
            <author fullname="M. Kühlewind" initials="M." surname="Kühlewind"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document describes how to proxy IP packets in HTTP. This protocol is similar to UDP proxying in HTTP but allows transmitting arbitrary IP packets. More specifically, this document defines a protocol that allows an HTTP client to create an IP tunnel through an HTTP server that acts as an IP proxy. This document updates RFC 9298.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9484"/>
          <seriesInfo name="DOI" value="10.17487/RFC9484"/>
        </reference>
        <reference anchor="IKEv2">
          <front>
            <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author fullname="C. Kaufman" initials="C." surname="Kaufman"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>This document describes version 2 of the Internet Key Exchange (IKE) protocol. IKE is a component of IPsec used for performing mutual authentication and establishing and maintaining Security Associations (SAs). This document obsoletes RFC 5996, and includes all of the errata for it. It advances IKEv2 to be an Internet Standard.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="79"/>
          <seriesInfo name="RFC" value="7296"/>
          <seriesInfo name="DOI" value="10.17487/RFC7296"/>
        </reference>
        <reference anchor="SSH-TRANSPORT">
          <front>
            <title>The Secure Shell (SSH) Transport Layer Protocol</title>
            <author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
            <author fullname="C. Lonvick" initials="C." role="editor" surname="Lonvick"/>
            <date month="January" year="2006"/>
            <abstract>
              <t>The Secure Shell (SSH) is a protocol for secure remote login and other secure network services over an insecure network.</t>
              <t>This document describes the SSH transport layer protocol, which typically runs on top of TCP/IP. The protocol can be used as a basis for a number of secure network services. It provides strong encryption, server authentication, and integrity protection. It may also provide compression.</t>
              <t>Key exchange method, public key algorithm, symmetric encryption algorithm, message authentication algorithm, and hash algorithm are all negotiated.</t>
              <t>This document also describes the Diffie-Hellman key exchange method and the minimal set of algorithms that are needed to implement the SSH transport layer protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4253"/>
          <seriesInfo name="DOI" value="10.17487/RFC4253"/>
        </reference>
      </references>
    </references>
    <?line 201?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>We would like to thank Martin Thomson and Sean Turner for their early review of this design and their invaluable feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA6Va63LbNhb+z6fAKn+SXUmx07RNPWlaJ3ZqTxLbazvtZDsZ
D0SCEtYUyAKgHNWTPss+yz7ZfgcXXnRx3K5nbEskgXPOd+4HHI1GiZW2EHts
cPjJCpWJjL0RS/a+yrgVLC81++f741eDJMXXaamXe8zYLEmyMlV8jmWZ5rkd
6dKUc349K0e/1TIdibDV6FosR7XbarSzk5h6MpfGyFLZZYW1x4eXrxl7wHhh
SjAgsaSidcoOhmwgMmlLLXlBX473X+IfuBkcn1++HiSqnk+E3kto670V5jxB
s8e+29nZTdJSGaFMje9W1yJZ7LGvEtDUgu+xS82VqUptceWm1NdTXdbVnhM5
Ae+4lO0lbMRIKvofBWO4yTwdugyYbrjOmBGpFukyWQhVg60HjHU3xFcv9y+g
JNWU/UQ36fKcy2LPEflRCpuPSz2ly1ynM+Ays7Yye48f01N0SS7EOD72mC48
nujyxojHtMHjQQKq0s7qCZYuOTRT8AX+Pt6mGVpQEGC2Q6uzcOx3G8ty6xaP
72sF45mdF4Mk4bWdlZqgBXHGpIJ2Bh/G7DzuMHDX87oovJl9CPy0T7gHgABX
8nduYVN77F8m5YXQ7o7wmC4bnn783d8dp+W8R/dozC5NOitzoeTUXfYkj7hS
wqze45OJFrCho9HL84sNPLxXUI820i5ZmbP9qiokzOUilUKl2O1lqdTofCak
Gl1I4bdMy1pZMt6fhJ5ztezy75kYt0z8OJ1/Githk0SVeNqC2l6SSJV3viWj
0QiMGqt5igcvZ9IwOGw9h2cxU4lU5hK8cMU2+fxcpDMIZObO++1MOOtllS5t
mZbFkE1qWWRkv6Wi20kO/jMnPolMCy7fXmzaGkBvvxkZS/1OQoEJQowo0JJI
n02W0JvVZVanxETriYbdwFJXnXHIRCHnUmFbPE3cKQHCtmSV0IQa4wnZGQO9
zMz4tWMTiOWC21oLho8V11amNbyvWLKJUAJsIjA5gKAnZfFLu4NkrUn1UjGT
CsW1LA2UsyiLBd0vSjUdFVBSBqVDsSmJasZBRX0AtKgKHgDwGtioo0yYVMsJ
dpROG2zw3hApgsyWyQVx5NcP+gTG3kzmMssKkSDcHAdQ6SZxtKJ3dnv7N7rw
/fnrVwisO58/062FzMiSvORiyMj2sX0hEGxDaHUoLQiKGk+SQ3gGzJCZWlo+
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

-->

</rfc>
