<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-curdle-ssh-curves-12" indexInclude="true" ipr="trust200902" number="8731" prepTime="2020-02-28T14:18:24" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="4" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-curdle-ssh-curves-12" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8731" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="Curve25519/448 for SSH">Secure Shell (SSH) Key Exchange Method Using Curve25519 and Curve448</title>
    <seriesInfo name="RFC" value="8731" stream="IETF"/>
    <author initials="A." surname="Adamantiadis" fullname="Aris Adamantiadis">
      <organization showOnFrontPage="true">libssh</organization>
      <address>
        <email>aris@badcode.be</email>
      </address>
    </author>
    <author initials="S." surname="Josefsson" fullname="Simon Josefsson">
      <organization showOnFrontPage="true">SJD AB</organization>
      <address>
        <email>simon@josefsson.org</email>
      </address>
    </author>
    <author initials="M." surname="Baushke" fullname="Mark D. Baushke">
      <organization showOnFrontPage="true">Juniper Networks, Inc.</organization>
      <address>
        <email>mdb@juniper.net</email>
      </address>
    </author>
    <date month="02" year="2020"/>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>Elliptic</keyword>
    <keyword>Curve</keyword>
    <keyword>Diffie</keyword>
    <keyword>Hellman</keyword>
    <keyword>ECDH</keyword>
    <abstract pn="section-abstract">
      <t pn="section-abstract-1">
        This document describes the specification for using Curve25519
        and Curve448 key exchange methods in the Secure Shell (SSH)
        protocol.
      </t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc8731" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t pn="section-boilerplate.2-1">
            Copyright (c) 2020 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-language">Requirements Language</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-key-exchange-methods">Key Exchange Methods</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-shared-secret-encoding">Shared Secret Encoding</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t keepWithNext="true" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t keepWithNext="true" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t keepWithNext="true" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t keepWithNext="true" pn="section-toc.1-1.7.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t keepWithNext="true" pn="section-toc.1-1.8.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t pn="section-1-1">
        Secure Shell (SSH) <xref target="RFC4251" format="default" sectionFormat="of" derivedContent="RFC4251"/> is a secure remote
        login protocol. The key exchange protocol described in <xref target="RFC4253" format="default" sectionFormat="of" derivedContent="RFC4253"/> supports an extensible set of
	methods. 
        <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/> defines how elliptic curves are
        integrated into this extensible SSH framework, and this
        document reuses the Elliptic Curve Diffie-Hellman (ECDH) key
        exchange protocol messages defined in Section
        <xref target="RFC5656" sectionFormat="bare" section="7.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5656#section-7.1" derivedContent="RFC5656">ECDH Message
	Numbers</xref> of <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>. Other parts of
        <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>, such as Elliptic Curve
        Menezes-Qu-Vanstone (ECMQV) key agreement and Elliptic Curve
        Digital Signature Algorithm (ECDSA), are not considered in this
        document.
      </t>
      <t pn="section-1-2">
        This document describes how to implement key exchange based on
        Curve25519 and Curve448 <xref target="RFC7748" format="default" sectionFormat="of" derivedContent="RFC7748"/> in SSH. For
        Curve25519 with SHA-256 <xref target="RFC6234" format="default" sectionFormat="of" derivedContent="RFC6234"/><xref target="SHS" format="default" sectionFormat="of" derivedContent="SHS"/>, the algorithm described is equivalent
	to the 
        privately defined algorithm "curve25519-sha256@libssh.org",
        which at the time of publication was implemented and widely
        deployed in libssh <xref target="libssh" format="default" sectionFormat="of" derivedContent="libssh"/> and
	OpenSSH <xref target="OpenSSH" format="default" sectionFormat="of" derivedContent="OpenSSH"/>. The Curve448 key
	exchange method is 
        similar but uses SHA-512 <xref target="RFC6234" format="default" sectionFormat="of" derivedContent="RFC6234"/><xref target="SHS" format="default" sectionFormat="of" derivedContent="SHS"/>. 
      </t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-requirements-language">Requirements Language</name>
      <t pn="section-2-1">
    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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here. 
      </t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-key-exchange-methods">Key Exchange Methods</name>
      <t pn="section-3-1">
        The key exchange procedure is similar to the ECDH method
        described in <xref target="RFC5656" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5656#section-4" derivedContent="RFC5656"/>, though
        with a different wire encoding used for public values and the
        final shared secret. Public ephemeral keys are encoded for
        transmission as standard SSH strings.
      </t>
      <t pn="section-3-2">
        The protocol flow, the SSH_MSG_KEX_ECDH_INIT and
        SSH_MSG_KEX_ECDH_REPLY messages, and the structure of the
        exchange hash are identical to <xref target="RFC5656" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5656#section-4" derivedContent="RFC5656"/>.
      </t>
      <t pn="section-3-3">
        The method names registered by this document are
        "curve25519-sha256" and "curve448-sha512".
      </t>
      <t pn="section-3-4">
        The methods are based on Curve25519 and Curve448 scalar
        multiplication, as described in <xref target="RFC7748" format="default" sectionFormat="of" derivedContent="RFC7748"/>.
        Private and public keys are generated as described therein.
        Public keys are defined as strings of 32 bytes for Curve25519
        and 56 bytes for Curve448.
      </t>
      <t pn="section-3-5">
        The key-agreement schemes "curve25519-sha256" and
        "curve448-sha512" perform the Diffie-Hellman protocol using
        the functions X25519 and X448, respectively. Implementations
        <bcp14>SHOULD</bcp14> compute these functions using the algorithms described
        in <xref target="RFC7748" format="default" sectionFormat="of" derivedContent="RFC7748"/>. When they do so,
	implementations <bcp14>MUST</bcp14> check
        whether the computed Diffie-Hellman shared secret is the
        all-zero value and abort if so, as described in <xref target="RFC7748" sectionFormat="of" section="6" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7748#section-6" derivedContent="RFC7748"/>.
	Alternative implementations of these functions
        <bcp14>SHOULD</bcp14> abort when either the client or the server input
   forces the shared secret to one of a small set of values, as
   described in Sections <xref target="RFC7748" section="6" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7748#section-6" derivedContent="RFC7748"/> and <xref target="RFC7748" section="7" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7748#section-7" derivedContent="RFC7748"/> of <xref target="RFC7748" format="default" sectionFormat="of" derivedContent="RFC7748"/>. Clients and servers <bcp14>MUST</bcp14> also abort if
        the length of the received public keys are not the expected
        lengths. An abort for these purposes is defined as a
        disconnect (SSH_MSG_DISCONNECT) of the session and <bcp14>SHOULD</bcp14> use
        the SSH_DISCONNECT_KEY_EXCHANGE_FAILED reason for the message
        <xref target="IANA-REASON" format="default" sectionFormat="of" derivedContent="IANA-REASON"/>.
        No further validation is required beyond what is described in
        <xref target="RFC7748" format="default" sectionFormat="of" derivedContent="RFC7748"/>. The derived shared secret is 32
        bytes when "curve25519-sha256" is used and 56 bytes when
        "curve448-sha512" is used. The encodings of all values are
        defined in <xref target="RFC7748" format="default" sectionFormat="of" derivedContent="RFC7748"/>. The hash used is SHA-256
        for "curve25519-sha256" and SHA-512 for "curve448-sha512".
      </t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-shared-secret-encoding">Shared Secret Encoding</name>
        <t pn="section-3.1-1">
          The following step differs from <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>,
          which uses a different conversion. This is not intended to
          modify that text generally, but only to be applicable to the
          scope of the mechanism described in this document.
        </t>
        <t pn="section-3.1-2">
          The shared secret, K, is defined in <xref target="RFC4253" format="default" sectionFormat="of" derivedContent="RFC4253"/>
          and <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/> as an integer encoded
          as a multiple precision integer (mpint). Curve25519/448
          outputs a binary string X, which is the 32- or 56-byte point
          obtained by scalar multiplication of the other side's public
          key and the local private key scalar. The 32 or 56 bytes of
          X are converted into K by interpreting the octets as an
          unsigned fixed-length integer encoded in network byte order.
        </t>
        <t pn="section-3.1-3">
          The mpint K is then encoded using the process
          described in <xref target="RFC4251" sectionFormat="of" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4251#section-5" derivedContent="RFC4251"/>, and the
          resulting bytes are fed as described in <xref target="RFC4253" format="default" sectionFormat="of" derivedContent="RFC4253"/> to the key exchange method's hash
          function to generate encryption keys.
        </t>
        <t pn="section-3.1-4">
          When performing the X25519 or X448 operations, the integer
          values there will be encoded into byte strings by doing a
          fixed-length unsigned little-endian conversion, per <xref target="RFC7748" format="default" sectionFormat="of" derivedContent="RFC7748"/>. It is only later when these
	  byte strings 
          are then passed to the ECDH function in SSH that the bytes
          are reinterpreted as a fixed-length unsigned big-endian
          integer value K, and then later that K value is encoded as a
          variable-length signed "mpint" before being fed to the hash
          algorithm used for key generation. The mpint K is then fed
          along with other data to the key exchange method's hash
          function to generate encryption keys.
        </t>
      </section>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t pn="section-4-1">
        The security considerations of <xref target="RFC4251" format="default" sectionFormat="of" derivedContent="RFC4251"/>, <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>, and <xref target="RFC7748" format="default" sectionFormat="of" derivedContent="RFC7748"/> are
        inherited.
      </t>
      <t pn="section-4-2">
        Curve25519 with SHA-256 provides strong (~128 bits) security,
        is efficient on a wide range of architectures, and has
        characteristics that allow for better implementation properties
        compared to traditional elliptic curves. Curve448 with SHA-512
        provides stronger (~224 bits) security with similar
        implementation properties; however, it has not received the same
        cryptographic review as Curve25519.  It is also slower (larger key
        material and larger secure hash algorithm), but it is provided
        as a hedge to combat unforeseen analytical advances against
        Curve25519 and SHA-256 due to the larger number of security
        bits.
      </t>
      <t pn="section-4-3">
        The way the derived mpint binary secret string is encoded 
        before it is hashed (i.e., adding or removing zero bytes
        for encoding) raises the potential for a side-channel attack,
        which could determine the length of what is hashed. This
        would leak the most significant bit of the derived secret
        and/or allow detection of when the most significant bytes are
        zero. For backwards-compatibility reasons, it was decided not
        to address this potential problem.
      </t>
      <t pn="section-4-4">
        This document provides "curve25519-sha256" as the preferred
        choice but suggests that the "curve448-sha512" be implemented
        to provide more than 128 bits of security strength should that
        become a requirement.
      </t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t pn="section-5-1">
        IANA has added "curve25519-sha256" and
        "curve448-sha512" to the "Key Exchange Method Names" registry
        for SSH <xref target="IANA-KEX" format="default" sectionFormat="of" derivedContent="IANA-KEX"/> that was created in
	<xref target="RFC4250" sectionFormat="of" section="4.10" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4250#section-4.10" derivedContent="RFC4250"/>.
      </t>
    </section>
  </middle>
  <back>
    <references pn="section-6">
      <name slugifiedName="name-references">References</name>
      <references pn="section-6.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <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="RFC4250" target="https://www.rfc-editor.org/info/rfc4250" quoteTitle="true" derivedAnchor="RFC4250">
          <front>
            <title>The Secure Shell (SSH) Protocol Assigned Numbers</title>
            <author initials="S." surname="Lehtinen" fullname="S. Lehtinen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Lonvick" fullname="C. Lonvick" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="January"/>
            <abstract>
              <t>This document defines the instructions to the IANA and the initial state of the IANA assigned numbers for the Secure Shell (SSH) protocol.  It is intended only for the initialization of the IANA registries referenced in the set of SSH documents.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4250"/>
          <seriesInfo name="DOI" value="10.17487/RFC4250"/>
        </reference>
        <reference anchor="RFC4251" target="https://www.rfc-editor.org/info/rfc4251" quoteTitle="true" derivedAnchor="RFC4251">
          <front>
            <title>The Secure Shell (SSH) Protocol Architecture</title>
            <author initials="T." surname="Ylonen" fullname="T. Ylonen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Lonvick" fullname="C. Lonvick" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="January"/>
            <abstract>
              <t>The Secure Shell (SSH) Protocol is a protocol for secure remote login and other secure network services over an insecure network.  This document describes the architecture of the SSH protocol, as well as the notation and terminology used in SSH protocol documents.  It also discusses the SSH algorithm naming system that allows local extensions.  The SSH protocol consists of three major components: The Transport Layer Protocol provides server authentication, confidentiality, and integrity with perfect forward secrecy.  The User Authentication Protocol authenticates the client to the server.  The Connection Protocol multiplexes the encrypted tunnel into several logical channels.  Details of these protocols are described in separate documents.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4251"/>
          <seriesInfo name="DOI" value="10.17487/RFC4251"/>
        </reference>
        <reference anchor="RFC4253" target="https://www.rfc-editor.org/info/rfc4253" quoteTitle="true" derivedAnchor="RFC4253">
          <front>
            <title>The Secure Shell (SSH) Transport Layer Protocol</title>
            <author initials="T." surname="Ylonen" fullname="T. Ylonen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Lonvick" fullname="C. Lonvick" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="January"/>
            <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>
        <reference anchor="RFC5656" target="https://www.rfc-editor.org/info/rfc5656" quoteTitle="true" derivedAnchor="RFC5656">
          <front>
            <title>Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer</title>
            <author initials="D." surname="Stebila" fullname="D. Stebila">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Green" fullname="J. Green">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2009" month="December"/>
            <abstract>
              <t>This document describes algorithms based on Elliptic Curve Cryptography (ECC) for use within the Secure Shell (SSH) transport protocol.  In particular, it specifies Elliptic Curve Diffie-Hellman (ECDH) key agreement, Elliptic Curve Menezes-Qu-Vanstone (ECMQV) key agreement, and Elliptic Curve Digital Signature Algorithm (ECDSA) for use in the SSH Transport Layer protocol.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5656"/>
          <seriesInfo name="DOI" value="10.17487/RFC5656"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <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="SHS" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf" quoteTitle="true" derivedAnchor="SHS">
          <front>
            <title>Secure Hash Standard (SHS)</title>
            <author>
              <organization showOnFrontPage="true">National Institute of Standards and Technology</organization>
            </author>
            <date month="August" year="2015"/>
          </front>
          <seriesInfo name="FIPS PUB" value="180-4"/>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.180-4"/>
        </reference>
      </references>
      <references pn="section-6.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="IANA-KEX" target="https://www.iana.org/assignments/ssh-parameters/" quoteTitle="true" derivedAnchor="IANA-KEX">
          <front>
            <title>Secure Shell (SSH) Protocol Parameters: Key Exchange Method Names</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="IANA-REASON" target="https://www.iana.org/assignments/ssh-parameters/" quoteTitle="true" derivedAnchor="IANA-REASON">
          <front>
            <title>Secure Shell (SSH) Protocol Parameters: Disconnection Messages Reason Codes and Descriptions</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="libssh" target="https://www.libssh.org/" quoteTitle="true" derivedAnchor="libssh">
          <front>
            <title>The SSH Library</title>
            <author>
              <organization showOnFrontPage="true">libssh</organization>
            </author>
            <date month="" year=""/>
          </front>
        </reference>
        <reference anchor="OpenSSH" target="https://www.openssh.com/" quoteTitle="true" derivedAnchor="OpenSSH">
          <front>
            <title>The OpenSSH Project</title>
            <author>
              <organization showOnFrontPage="true">OpenSSH group of OpenBSD</organization>
            </author>
            <date month="" year=""/>
          </front>
        </reference>
        <reference anchor="RFC6234" target="https://www.rfc-editor.org/info/rfc6234" quoteTitle="true" derivedAnchor="RFC6234">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author initials="D." surname="Eastlake 3rd" fullname="D. Eastlake 3rd">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Hansen" fullname="T. Hansen">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="May"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="RFC7748" target="https://www.rfc-editor.org/info/rfc7748" quoteTitle="true" derivedAnchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author initials="A." surname="Langley" fullname="A. Langley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Hamburg" fullname="M. Hamburg">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Turner" fullname="S. Turner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="January"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS).  These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
      </references>
    </references>
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t pn="section-appendix.a-1">
        The "curve25519-sha256" key exchange method is identical to
        the "curve25519-sha256@libssh.org" key exchange method created
        by <contact fullname="Aris Adamantiadis"/> and implemented in libssh and OpenSSH.
      </t>
      <t pn="section-appendix.a-2">
        Thanks to the following people for review and comments: <contact fullname="Denis         Bider"/>, <contact fullname="Damien Miller"/>, <contact fullname="Niels Moeller"/>, <contact fullname="Matt Johnston"/>, <contact fullname="Eric         Rescorla"/>, <contact fullname="Ron Frederick"/>, and <contact fullname="Stefan Buehler"/>.
      </t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author initials="A." surname="Adamantiadis" fullname="Aris Adamantiadis">
        <organization showOnFrontPage="true">libssh</organization>
        <address>
          <email>aris@badcode.be</email>
        </address>
      </author>
      <author initials="S." surname="Josefsson" fullname="Simon Josefsson">
        <organization showOnFrontPage="true">SJD AB</organization>
        <address>
          <email>simon@josefsson.org</email>
        </address>
      </author>
      <author initials="M." surname="Baushke" fullname="Mark D. Baushke">
        <organization showOnFrontPage="true">Juniper Networks, Inc.</organization>
        <address>
          <email>mdb@juniper.net</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
