<?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-kex-sha2-20" indexInclude="true" ipr="trust200902" number="9142" prepTime="2022-01-13T21:17:40" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="4" tocInclude="true" updates="4250, 4253, 4432, 4462" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-curdle-ssh-kex-sha2-20" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9142" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="KEX Method Updates for SSH">Key Exchange (KEX) Method Updates and Recommendations for Secure Shell (SSH)</title>
    <seriesInfo name="RFC" value="9142" stream="IETF"/>
    <author initials="M." surname="Baushke" fullname="Mark D. Baushke">
      <address>
        <email>mbaushke.ietf@gmail.com</email>
      </address>
    </author>
    <date month="01" year="2022"/>
    <area>Security</area>
    <workgroup>CURDLE</workgroup>
    <keyword>3DES</keyword>
    <keyword>AES</keyword>
    <keyword>Advanced Encryption Standard</keyword>
    <keyword>Curve25519</keyword>
    <keyword>Curve448</keyword>
    <keyword>DH</keyword>
    <keyword>Diffie-Hellman</keyword>
    <keyword>Digital Encryption Standard</keyword>
    <keyword>ECC</keyword>
    <keyword>ECDH</keyword>
    <keyword>Elliptic Curve Cryptography</keyword>
    <keyword>Elliptic Curve Diffie-Hellman</keyword>
    <keyword>FFC</keyword>
    <keyword>Finite Field Cryptography</keyword>
    <keyword>IFC</keyword>
    <keyword>Integer Factorization Cryptography</keyword>
    <keyword>MODP</keyword>
    <keyword>MTI</keyword>
    <keyword>Mandatory to Implement</keyword>
    <keyword>Modular Exponential</keyword>
    <keyword>Modular Exponentiation</keyword>
    <keyword>Public Key Exchange</keyword>
    <keyword>RSA</keyword>
    <keyword>SHA-2</keyword>
    <keyword>Secure Shell Key Exchange</keyword>
    <keyword>Secure Shell</keyword>
    <keyword>Security Strength</keyword>
    <keyword>Triple-DES</keyword>
    <keyword>sha1</keyword>
    <keyword>sha256</keyword>
    <keyword>sha384</keyword>
    <keyword>sha512</keyword>
    <keyword>SHA-1</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">
        This document updates the recommended set of key exchange methods for
        use in the Secure Shell (SSH) protocol to meet evolving needs for
        stronger security.  It updates RFCs 4250, 4253, 4432, and 4462.
      </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 indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" 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 indent="0" 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/rfc9142" 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 indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2022 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" 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 Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised 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 indent="0" 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-overview-and-rationale">Overview and Rationale</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-selecting-an-appropriate-ha">Selecting an Appropriate Hashing Algorithm</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.2">
                <t indent="0" pn="section-toc.1-1.1.2.2.1"><xref derivedContent="1.2" format="counter" sectionFormat="of" target="section-1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-selecting-an-appropriate-pu">Selecting an Appropriate Public Key Algorithm</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2.2.2">
                  <li pn="section-toc.1-1.1.2.2.2.1">
                    <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.2.2.1.1"><xref derivedContent="1.2.1" format="counter" sectionFormat="of" target="section-1.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-elliptic-curve-cryptography">Elliptic Curve Cryptography (ECC)</xref></t>
                  </li>
                  <li pn="section-toc.1-1.1.2.2.2.2">
                    <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.2.2.2.1"><xref derivedContent="1.2.2" format="counter" sectionFormat="of" target="section-1.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-finite-field-cryptography-f">Finite Field Cryptography (FFC)</xref></t>
                  </li>
                  <li pn="section-toc.1-1.1.2.2.2.3">
                    <t indent="0" pn="section-toc.1-1.1.2.2.2.3.1"><xref derivedContent="1.2.3" format="counter" sectionFormat="of" target="section-1.2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-integer-factorization-crypt">Integer Factorization Cryptography (IFC)</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" 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 indent="0" 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 indent="0" 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-elliptic-curve-cryptography-">Elliptic Curve Cryptography (ECC)</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.1.2">
                  <li pn="section-toc.1-1.3.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.1.2.1.1"><xref derivedContent="3.1.1" format="counter" sectionFormat="of" target="section-3.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-curve25519-sha256-and-gss-c">curve25519-sha256 and gss-curve25519-sha256-*</xref></t>
                  </li>
                  <li pn="section-toc.1-1.3.2.1.2.2">
                    <t indent="0" pn="section-toc.1-1.3.2.1.2.2.1"><xref derivedContent="3.1.2" format="counter" sectionFormat="of" target="section-3.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-curve448-sha512-and-gss-cur">curve448-sha512 and gss-curve448-sha512-*</xref></t>
                  </li>
                  <li pn="section-toc.1-1.3.2.1.2.3">
                    <t indent="0" pn="section-toc.1-1.3.2.1.2.3.1"><xref derivedContent="3.1.3" format="counter" sectionFormat="of" target="section-3.1.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ecdh-ecmqv-sha2-and-gss-nis">
            ecdh-*, ecmqv-sha2, and gss-nistp*
                      </xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-finite-field-cryptography-ff">Finite Field Cryptography (FFC)</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.2.2">
                  <li pn="section-toc.1-1.3.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.2.2.1.1"><xref derivedContent="3.2.1" format="counter" sectionFormat="of" target="section-3.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ffc-diffie-hellman-using-ge">FFC Diffie-Hellman Using Generated MODP Groups</xref></t>
                  </li>
                  <li pn="section-toc.1-1.3.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.3.2.2.2.2.1"><xref derivedContent="3.2.2" format="counter" sectionFormat="of" target="section-3.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ffc-diffie-hellman-using-na">FFC Diffie-Hellman Using Named MODP Groups</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.3.2.3">
                <t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent="3.3" format="counter" sectionFormat="of" target="section-3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-integer-factorization-crypto">Integer Factorization Cryptography (IFC)</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.4">
                <t indent="0" pn="section-toc.1-1.3.2.4.1"><xref derivedContent="3.4" format="counter" sectionFormat="of" target="section-3.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-kdfs-and-integrity-hashing">KDFs and Integrity Hashing</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.5">
                <t indent="0" pn="section-toc.1-1.3.2.5.1"><xref derivedContent="3.5" format="counter" sectionFormat="of" target="section-3.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-secure-shell-extension-nego">Secure Shell Extension Negotiation</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" 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-summary-guidance-for-implem">
        Summary Guidance for Implementation of Key Exchange Method Names
              </xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" 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-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" 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-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <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.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.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.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-overview-and-rationale">Overview and Rationale</name>
      <t indent="0" pn="section-1-1">
        Secure Shell (SSH) is a common protocol for secure
        communication on the Internet.

        In <xref target="RFC4253" format="default" sectionFormat="of" derivedContent="RFC4253"/>,
        SSH originally defined two Key Exchange (KEX) Method Names that
        <bcp14>MUST</bcp14> be implemented.

        Over time, what was once considered secure is no longer considered
        secure.

        The purpose of this RFC is to recommend that some published key
        exchanges be deprecated or disallowed as well as to recommend some
        that <bcp14>SHOULD</bcp14> and one that <bcp14>MUST</bcp14> be
        adopted.
      </t>
      <t indent="0" pn="section-1-2">
        This document updates

        <xref target="RFC4250" format="default" sectionFormat="of" derivedContent="RFC4250"/>, <xref target="RFC4253" format="default" sectionFormat="of" derivedContent="RFC4253"/>, <xref target="RFC4432" format="default" sectionFormat="of" derivedContent="RFC4432"/>, and
        <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/>

        by changing the requirement level ("<bcp14>MUST</bcp14>" moving to
        "<bcp14>SHOULD</bcp14>", "<bcp14>MAY</bcp14>", or "<bcp14>SHOULD NOT</bcp14>", and "<bcp14>MAY</bcp14>" moving to
        "<bcp14>MUST</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", or "<bcp14>MUST NOT</bcp14>") of various key exchange
        mechanisms.

        Some recommendations will be unchanged but are included for
        completeness.
      </t>
      <t indent="0" pn="section-1-3">
<xref target="RFC4253" sectionFormat="of" section="7.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4253#section-7.2" derivedContent="RFC4253"/> says the following:
      </t>
      <blockquote pn="section-1-4">
        The key exchange produces two values: a shared secret K, and
        an exchange hash H.

        Encryption and authentication keys are derived from these.

        The exchange hash H from the first key exchange is
        additionally used as the session identifier, which is a unique
        identifier for this connection.

        It is used by authentication methods as a part of the data
        that is signed as a proof of possession of a private key.

        Once computed, the session identifier is not changed, even if
        keys are later re-exchanged.
      </blockquote>
      <t indent="0" pn="section-1-5">
        The security strength of the public key exchange algorithm and
        the hash used in the Key Derivation Function (KDF) both impact
        the security of the shared secret K being used.
      </t>
      <t indent="0" pn="section-1-6">
        The hashing algorithms used by key exchange methods described
        in this document are: sha1, sha256, sha384, and sha512.

        In many cases, the hash name is explicitly appended to the
        public key exchange algorithm name.

        However, some of them are implicit and defined in the RFC that
        defines the key exchange algorithm name.
      </t>
      <t indent="0" pn="section-1-7">
        Various RFCs use different spellings and capitalizations for
        the hashing function and encryption function names.

        For the purpose of this document, the following are equivalent names:
        sha1, SHA1, and SHA-1; sha256, SHA256, SHA-256, and SHA2-256; sha384,
        SHA384, SHA-384, and SHA2-384; and sha512, SHA512, SHA-512, and
        SHA2-512.
      </t>
      <t indent="0" pn="section-1-8">
        For the purpose of this document, the following are equivalent:
        aes128, AES128, AES-128; aes192, AES192, and AES-192; and aes256,
        AES256, and AES-256.
      </t>
      <t indent="0" pn="section-1-9">
        It is good to try to match the security strength of the public
        key exchange algorithm with the security strength of the symmetric
        cipher.
      </t>
      <t indent="0" pn="section-1-10">
        There are many possible symmetric ciphers available with multiple
        modes.

        The list in <xref target="sym_ci_sec" format="default" sectionFormat="of" derivedContent="Table 1"/> is intended as a representative sample
        of those that appear to be present in most SSH implementations.

        The security strength estimates are generally available in <xref target="RFC4086" format="default" sectionFormat="of" derivedContent="RFC4086"/> for triple-DES and AES, as well as
        Section 5.6.1.1 of <xref target="NIST.SP.800-57pt1r5" format="default" sectionFormat="of" derivedContent="NIST.SP.800-57pt1r5"/>.
      </t>
      <table align="center" anchor="sym_ci_sec" pn="table-1">
        <name slugifiedName="name-symmetric-cipher-security-s">Symmetric Cipher Security Strengths</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Cipher Name (modes)</th>
            <th align="left" colspan="1" rowspan="1">Estimated Security Strength</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">3des (cbc)</td>
            <td align="left" colspan="1" rowspan="1">112 bits</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">aes128 (cbc, ctr, gcm)</td>
            <td align="left" colspan="1" rowspan="1">128 bits</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">aes192 (cbc, ctr, gcm)</td>
            <td align="left" colspan="1" rowspan="1">192 bits</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">aes256 (cbc, ctr, gcm)</td>
            <td align="left" colspan="1" rowspan="1">256 bits</td>
          </tr>
        </tbody>
      </table>
      <t indent="0" pn="section-1-12">
        The following subsections describe how to select each
        component of the key exchange.
      </t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-selecting-an-appropriate-ha">Selecting an Appropriate Hashing Algorithm</name>
        <t indent="0" pn="section-1.1-1">
          The SHA-1 hash is in the process of being deprecated for
          many reasons.
        </t>
        <t indent="0" pn="section-1.1-2">
          There have been attacks against SHA-1, and it is no longer
          strong enough for SSH security requirements.

          Therefore, it is desirable to move away from using it before
          attacks become more serious.
        </t>
        <t indent="0" pn="section-1.1-3">
          The SHA-1 hash provides for approximately 80 bits of
          security strength.

          This means that the shared key being used has at most 80
          bits of security strength, which may not be sufficient for
          most users.
        </t>
        <t indent="0" pn="section-1.1-4">
          For purposes of key exchange methods, attacks against SHA-1 are
          collision attacks that usually rely on human help rather than a
          pre-image attack.

          The SHA-1 hash resistance against a second pre-image is still at 160
          bits, but SSH does not depend on second pre-image
          resistance but rather on chosen-prefix collision
          resistance.
        </t>
        <t indent="0" pn="section-1.1-5">
          Transcript Collision attacks are documented in

          <xref target="TRANSCRIPTION" format="default" sectionFormat="of" derivedContent="TRANSCRIPTION"/>.

          This paper shows that an on-path attacker does not tamper
          with the Diffie-Hellman values and does not know the
          connection keys.

          The attack could be used to tamper with both I_C and I_S (as defined
          in <xref target="RFC4253" sectionFormat="of" section="7.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4253#section-7.3" derivedContent="RFC4253"/>) and might potentially be able to downgrade the
          negotiated ciphersuite to a weak cryptographic algorithm that the
          attacker knows how to break.
        </t>
        <t indent="0" pn="section-1.1-6">
          These attacks are still computationally very difficult to
          perform, but it is desirable that any key exchange using
          SHA-1 be phased out as soon as possible.
        </t>
        <t indent="0" pn="section-1.1-7">
          If there is a need for using SHA-1 in a key exchange for
          compatibility, it would be desirable to list it last in
          the preference list of key exchanges.
        </t>
        <t indent="0" pn="section-1.1-8">
          Use of the SHA-2 family of hashes found in

          <xref target="RFC6234" format="default" sectionFormat="of" derivedContent="RFC6234"/>

          rather than the SHA-1 hash is strongly advised.
        </t>
        <t indent="0" pn="section-1.1-9">
          When it comes to the SHA-2 family of secure hashing
          functions, SHA2-256 has 128 bits of security strength;
          SHA2-384 has 192 bits of security strength; and SHA2-512 has
          256 bits of security strength.

          It is suggested that the minimum secure hashing function
          used for key exchange methods should be SHA2-256
          with 128 bits of security strength.

          Other hashing functions may also have the same number of
          bits of security strength, but none are as yet defined in
          any RFC for use in a KEX for SSH.
        </t>
        <t indent="0" pn="section-1.1-10">
          To avoid combinatorial explosion of key exchange names,
          newer key exchanges are generally restricted to *-sha256 and
          *-sha512.

          The exceptions are ecdh-sha2-nistp384 and gss-nistp384-sha384-*,
          which are defined to use SHA2-384 (also known as SHA-384) defined in
          <xref target="RFC6234" format="default" sectionFormat="of" derivedContent="RFC6234"/> for the hash algorithm.
        </t>
        <t indent="0" pn="section-1.1-11">
          <xref target="sec_strength" format="default" sectionFormat="of" derivedContent="Table 2"/> provides a summary of security
          strength for hashing functions for collision resistance. You may
          consult

          <xref target="NIST.SP.800-107r1" format="default" sectionFormat="of" derivedContent="NIST.SP.800-107r1"/>

          for more information on hash algorithm security strength.
        </t>
        <table anchor="sec_strength" align="center" pn="table-2">
          <name slugifiedName="name-hashing-function-security-s">Hashing Function Security Strengths</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Hash Name</th>
              <th align="left" colspan="1" rowspan="1">Estimated Security Strength</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">sha1</td>
              <td align="left" colspan="1" rowspan="1">80 bits (before attacks)</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">sha256</td>
              <td align="left" colspan="1" rowspan="1">128 bits</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">sha384</td>
              <td align="left" colspan="1" rowspan="1">192 bits</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">sha512</td>
              <td align="left" colspan="1" rowspan="1">256 bits</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-1.2">
        <name slugifiedName="name-selecting-an-appropriate-pu">Selecting an Appropriate Public Key Algorithm</name>
        <t indent="0" pn="section-1.2-1">
          SSH uses mathematically hard problems for doing key
          exchanges:
        </t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-1.2-2">
          <li pn="section-1.2-2.1">
            Elliptic Curve Cryptography (ECC) has families of curves
            for key exchange methods for SSH.

            NIST prime curves with names and other curves are
            available using an object identifier (OID) with Elliptic
            Curve Diffie-Hellman (ECDH) via

            <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>.

            Curve25519 and curve448 key exchanges are used with ECDH
            via

            <xref target="RFC8731" format="default" sectionFormat="of" derivedContent="RFC8731"/>.
          </li>
          <li pn="section-1.2-2.2">
            Finite Field Cryptography (FFC) is used for Diffie-Hellman
            (DH) key exchange with "safe primes" either from a
            specified list found in

            <xref target="RFC3526" format="default" sectionFormat="of" derivedContent="RFC3526"/>

            or generated dynamically via

            <xref target="RFC4419" format="default" sectionFormat="of" derivedContent="RFC4419"/>

            as updated by

            <xref target="RFC8270" format="default" sectionFormat="of" derivedContent="RFC8270"/>.
          </li>
          <li pn="section-1.2-2.3">
            Integer Factorization Cryptography (IFC) using the RSA
            algorithm is provided for in

            <xref target="RFC4432" format="default" sectionFormat="of" derivedContent="RFC4432"/>.
          </li>
        </ul>
        <t indent="0" pn="section-1.2-3">
          It is desirable that the security strength of the key
          exchange be chosen to be comparable with the security
          strength of the other elements of the SSH handshake.

          Attackers can target the weakest element of the SSH
          handshake.
        </t>
        <t indent="0" pn="section-1.2-4">
          It is desirable that a minimum of 112 bits of security 
          strength be selected to match the weakest of the symmetric cipher
          (3des-cbc) available.

          Based on implementer security needs, a stronger minimum may
          be desired.
        </t>
        <t indent="0" pn="section-1.2-5">
          The larger the Modular Exponentiation (MODP) group, the ECC curve size, or the RSA
          key length, the more computation power will be required to
          perform the key exchange.
        </t>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-1.2.1">
          <name slugifiedName="name-elliptic-curve-cryptography">Elliptic Curve Cryptography (ECC)</name>
          <t indent="0" pn="section-1.2.1-1">
            For ECC, across all of the named curves, the minimum security
            strength is approximately 128 bits.

            The
            <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>
            key exchanges for the named curves use a hashing function with a
            matching security strength.

            Likewise, the

            <xref target="RFC8731" format="default" sectionFormat="of" derivedContent="RFC8731"/>

            key exchanges use a hashing function that has more security
            strength than the curves.

            The minimum strength will be the security strength of the
            curve.

            <xref target="ecc_sec_strengths" format="default" sectionFormat="of" derivedContent="Table 3"/> contains a breakdown of just
            the ECC security strength by curve name; it does include the
            hashing algorithm used.

            The curve25519 and curve488 security-level numbers are in
            <xref target="RFC7748" format="default" sectionFormat="of" derivedContent="RFC7748"/>.

            The nistp256, nistp384, and nistp521 (NIST prime curves) are
            provided in <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>.

            The hashing algorithm designated for use with the
            individual curves have approximately the same number of
            bits of security as the named curve.
          </t>
          <table align="center" anchor="ecc_sec_strengths" pn="table-3">
            <name slugifiedName="name-ecc-security-strengths">ECC Security Strengths</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Curve Name</th>
                <th align="left" colspan="1" rowspan="1">Estimated Security Strength</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">nistp256</td>
                <td align="left" colspan="1" rowspan="1">128 bits</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">nistp384</td>
                <td align="left" colspan="1" rowspan="1">192 bits</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">nistp521</td>
                <td align="left" colspan="1" rowspan="1">512 bits</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">curve25519</td>
                <td align="left" colspan="1" rowspan="1">128 bits</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">curve448</td>
                <td align="left" colspan="1" rowspan="1">224 bits</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-1.2.2">
          <name slugifiedName="name-finite-field-cryptography-f">Finite Field Cryptography (FFC)</name>
          <t indent="0" pn="section-1.2.2-1">
            For FFC, it is recommended to use a modulus with a minimum
            of 2048 bits (approximately 112 bits of security strength)
            with a hash that has at least as many bits of security as
            the FFC.

            The security strength of the FFC and the hash together
            will be the minimum of those two values.

            This is sufficient to provide a consistent security
            strength for the 3des-cbc cipher.

            <xref target="RFC3526" sectionFormat="of" section="1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3526#section-1" derivedContent="RFC3526"/> notes that the Advanced Encryption Standard
            (AES) cipher, which has more strength, needs stronger groups.

            For the 128-bit AES, we need about a 3200-bit group.

            The 192- and 256-bit keys would need groups that are about
            8000 and 15400 bits, respectively.

            <xref target="fcc_modp_sec" format="default" sectionFormat="of" derivedContent="Table 4"/> provides the security strength of the MODP group.

            When paired with a hashing algorithm, the security
            strength will be the minimum of the two algorithms.
          </t>
          <table align="center" anchor="fcc_modp_sec" pn="table-4">
            <name slugifiedName="name-ffc-modp-security-strengths">FFC MODP Security Strengths</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Prime Field Size</th>
                <th align="left" colspan="1" rowspan="1">Estimated Security Strength</th>
                <th align="left" colspan="1" rowspan="1">Example MODP Group</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">2048-bit</td>
                <td align="left" colspan="1" rowspan="1">112 bits</td>
                <td align="left" colspan="1" rowspan="1">group14</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">3072-bit</td>
                <td align="left" colspan="1" rowspan="1">128 bits</td>
                <td align="left" colspan="1" rowspan="1">group15</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">4096-bit</td>
                <td align="left" colspan="1" rowspan="1">152 bits</td>
                <td align="left" colspan="1" rowspan="1">group16</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">6144-bit</td>
                <td align="left" colspan="1" rowspan="1">176 bits</td>
                <td align="left" colspan="1" rowspan="1">group17</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">8192-bit</td>
                <td align="left" colspan="1" rowspan="1">200 bits</td>
                <td align="left" colspan="1" rowspan="1">group18</td>
              </tr>
            </tbody>
          </table>
          <t indent="0" pn="section-1.2.2-3">
            The minimum MODP group is the 2048-bit MODP group14.

            When used with a SHA-1 hash, this group provides approximately 80
            bits of security.

            When used with a SHA2-256 hash, this group provides approximately
            112 bits of security.

            The 3des-cbc cipher itself provides at most 112 bits of
            security, so the group14-sha256 key exchanges is
            sufficient to keep all of the 3des-cbc key, for 112 bits of
            security.
          </t>
          <t indent="0" pn="section-1.2.2-4">
            A 3072-bit MODP group when used with a SHA2-256 hash will provide
            approximately 128 bits of security.

            This is desirable when using a cipher such as aes128 or
            chacha20-poly1305 that provides approximately 128 bits of
            security.
          </t>
          <t indent="0" pn="section-1.2.2-5">
            The 8192-bit group18 MODP group when used with sha512
            provides approximately 200 bits of security, which is
            sufficient to protect aes192 with 192 bits of security.
          </t>
        </section>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-1.2.3">
          <name slugifiedName="name-integer-factorization-crypt">Integer Factorization Cryptography (IFC)</name>
          <t indent="0" pn="section-1.2.3-1">
            The only IFC algorithm for key exchange is the RSA
            algorithm specified in

            <xref target="RFC4432" format="default" sectionFormat="of" derivedContent="RFC4432"/>.

            RSA 1024-bit keys have approximately 80 bits of security
            strength.

            RSA 2048-bit keys have approximately 112 bits of security
            strength.

            It is worth noting that the IFC types of key exchange do
            not provide Forward Secrecy, which both FFC and ECC do
            provide.
          </t>
          <t indent="0" pn="section-1.2.3-2">
            In order to match the 112 bits of security strength needed
            for 3des-cbc, an RSA 2048-bit key matches the security
            strength.

            The use of a SHA-2 family hash with RSA 2048-bit keys has
            sufficient security to match the 3des-cbc symmetric cipher.

            The rsa1024-sha1 key exchange has approximately 80 bits of
            security strength and is not desirable.
          </t>
          <t indent="0" pn="section-1.2.3-3">
            <xref target="ifc_sec" format="default" sectionFormat="of" derivedContent="Table 5"/> summarizes the security strengths of
            these key exchanges without including the hashing algorithm
            strength. Guidance for these strengths can be found in Section
            5.6.1.1 of <xref target="NIST.SP.800-57pt1r5" format="default" sectionFormat="of" derivedContent="NIST.SP.800-57pt1r5"/>.
          </t>
          <table anchor="ifc_sec" align="center" pn="table-5">
            <name slugifiedName="name-ifc-security-strengths">IFC Security Strengths</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Key Exchange Method</th>
                <th align="left" colspan="1" rowspan="1">Estimated Security Strength</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">rsa1024-sha1</td>
                <td align="left" colspan="1" rowspan="1">80 bits</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">rsa2048-sha256</td>
                <td align="left" colspan="1" rowspan="1">112 bits</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-requirements-language">Requirements Language</name>
      <t indent="0" 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 indent="0" pn="section-3-1">
        This document adopts the style and conventions of

        <xref target="RFC4253" format="default" sectionFormat="of" derivedContent="RFC4253"/>

        in specifying how the use of data key exchange is indicated in
        SSH.
      </t>
      <t indent="0" pn="section-3-2">
        This RFC also collects key exchange method names in various
        existing RFCs

        (<xref target="RFC4253" format="default" sectionFormat="of" derivedContent="RFC4253"/>, <xref target="RFC4419" format="default" sectionFormat="of" derivedContent="RFC4419"/>, <xref target="RFC4432" format="default" sectionFormat="of" derivedContent="RFC4432"/>, <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/>, <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>, <xref target="RFC8268" format="default" sectionFormat="of" derivedContent="RFC8268"/>, <xref target="RFC8308" format="default" sectionFormat="of" derivedContent="RFC8308"/>, <xref target="RFC8731" format="default" sectionFormat="of" derivedContent="RFC8731"/>, and <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/>) and
        provides a suggested suitability for implementation of
        <bcp14>MUST</bcp14>, <bcp14>SHOULD</bcp14>, <bcp14>MAY</bcp14>,
        <bcp14>SHOULD NOT</bcp14>, and <bcp14>MUST NOT</bcp14>.

        Any method not explicitly listed <bcp14>MAY</bcp14> be implemented.
      </t>
      <t indent="0" pn="section-3-3">
        <xref target="RFC4253" sectionFormat="of" section="7.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4253#section-7.2" derivedContent="RFC4253"/> defines the generation of a shared secret K (really
        the output of the KDF) and an exchange key hash H.  Each key exchange
        method uses a specified HASH function, which must be the same for both
        key exchange and Key Derivation.

        H is used for key exchange integrity across the SSH session as
        it is computed only once.
	
        It is noted at the end of <xref target="RFC4253" section="7.2" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4253#section-7.2" derivedContent="RFC4253"/> that:
      </t>
      <blockquote pn="section-3-4">This process will lose entropy if the
        amount of entropy in K is larger than the internal state size of
        HASH.</blockquote>
      <t indent="0" pn="section-3-5">
	So, care must be taken that the hashing algorithm used is well
        chosen ("reasonable") for the key exchange algorithms being used.
</t>
      <t indent="0" pn="section-3-6">

        This document provides guidance as to what key
        exchange algorithms are to be considered for new or updated
        SSH implementations.
      </t>
      <t indent="0" pn="section-3-7">
        In general, key exchange methods that are considered "weak"
        are being moved to either deprecated ("<bcp14>SHOULD NOT</bcp14>") or
        disallowed ("<bcp14>MUST NOT</bcp14>").

        Methods that are newer or considered to be stronger usually
        require more device resources than many administrators and/or
        developers need are to be allowed ("<bcp14>MAY</bcp14>").

        (Eventually, some of these methods could be moved by consensus
        to "<bcp14>SHOULD</bcp14>" to increase interoperability and security.)

        Methods that are not "weak" and have implementation consensus
        are encouraged ("<bcp14>SHOULD</bcp14>").

        There needs to be at least one consensus method promoted to a status
        of mandatory to implement (MTI).
	
        This should help to provide continued interoperability even
        with the loss of one of the now disallowed MTI methods.
      </t>
      <t indent="0" pn="section-3-8">
        For this document, 112 bits of security strength is the
        minimum.

        Use of either or both of SHA-1 and RSA 1024 bits at an
        approximate 80 bits of security fall below this minimum and
        should be deprecated and moved to disallowed as quickly as
        possible in configured deployments of SSH.

        It seems plausible that this minimum may be increased over
        time, so authors and administrators may wish to prepare for a
        switch to algorithms that provide more security strength.
      </t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-elliptic-curve-cryptography-">Elliptic Curve Cryptography (ECC)</name>
        <t indent="0" pn="section-3.1-1">
          The Elliptic Curve (EC) key exchange algorithms used with SSH include the
          ECDH and EC Menezes-Qu-Vanstone (ECMQV).
        </t>
        <t indent="0" pn="section-3.1-2">
          The ECC curves defined for the key exchange algorithms above include
          the following: curve25519, curve448, the NIST prime curves
          (nistp256, nistp384, and nistp521), as well as other curves allowed
          for by <xref target="RFC5656" sectionFormat="of" section="6" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5656#section-6" derivedContent="RFC5656"/>.  There are key exchange mechanisms based on the
          Generic Security Service Application Program Interface (GSS-API) that
          use these curves as well that have a "gss-" prefix.
        </t>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-3.1.1">
          <name slugifiedName="name-curve25519-sha256-and-gss-c">curve25519-sha256 and gss-curve25519-sha256-*</name>
          <t indent="0" pn="section-3.1.1-1">
            Curve25519 is efficient on a wide range of architectures with
            properties that allow higher-performance implementations compared
            to the patented elliptic curve parameters purchased by NIST for
            the general public to use as described in
            <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>.

            The corresponding key exchange methods use SHA2-256 (also known as
            SHA-256) defined in

            <xref target="RFC6234" format="default" sectionFormat="of" derivedContent="RFC6234"/>.

            SHA2-256 is a reasonable hash for use in both the KDF and
            session integrity. It is reasonable for both gss and
            non-gss uses of curve25519 key exchange methods.

            These key exchange methods are described in

            <xref target="RFC8731" format="default" sectionFormat="of" derivedContent="RFC8731"/>

            and

            <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/>

            and are similar to the IKEv2 key agreement described in

            <xref target="RFC8031" format="default" sectionFormat="of" derivedContent="RFC8031"/>.

            The curve25519-sha256 key exchange method has multiple
            implementations and <bcp14>SHOULD</bcp14> be implemented.

            The gss-curve25519-sha256-* key exchange method <bcp14>SHOULD</bcp14>
            also be implemented because it shares the same performance
            and security characteristics as curve25519-sha256.
          </t>
          <t indent="0" pn="section-3.1.1-2">
            <xref target="curve25519" format="default" sectionFormat="of" derivedContent="Table 6"/> contains a summary of the
            recommendations for curve25519-based key exchanges.
          </t>
          <table align="center" anchor="curve25519" pn="table-6">
            <name slugifiedName="name-curve25519-implementation-g">Curve25519 Implementation Guidance</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Key Exchange Method Name</th>
                <th align="left" colspan="1" rowspan="1">Guidance</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">curve25519-sha256</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>SHOULD</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">gss-curve25519-sha256-*</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>SHOULD</bcp14></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-3.1.2">
          <name slugifiedName="name-curve448-sha512-and-gss-cur">curve448-sha512 and gss-curve448-sha512-*</name>
          <t indent="0" pn="section-3.1.2-1">
            Curve448 provides more security strength than curve25519
            at a higher computational and bandwidth cost.

            The corresponding key exchange methods use SHA2-512 (also known as
            SHA-512) defined in

            <xref target="RFC6234" format="default" sectionFormat="of" derivedContent="RFC6234"/>.

            SHA2-512 is a reasonable hash for use in both the KDF and
            session integrity. It is reasonable for both gss and
            non-gss uses of curve448 key exchange methods.

            These key exchange methods are described in

            <xref target="RFC8731" format="default" sectionFormat="of" derivedContent="RFC8731"/>

            and

            <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/>

            and are similar to the IKEv2 key agreement described in

            <xref target="RFC8031" format="default" sectionFormat="of" derivedContent="RFC8031"/>.

            The curve448-sha512 key exchange method <bcp14>MAY</bcp14> be
            implemented.

            The gss-curve448-sha512-* key exchange method <bcp14>MAY</bcp14> also be
            implemented because it shares the same performance and
            security characteristics as curve448-sha512.
          </t>
          <t indent="0" pn="section-3.1.2-2">
            <xref target="curve448" format="default" sectionFormat="of" derivedContent="Table 7"/> contains a summary of the
            recommendations for curve448-based key exchanges.
          </t>
          <table align="center" anchor="curve448" pn="table-7">
            <name slugifiedName="name-curve448-implementation-gui">Curve448 Implementation Guidance</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Key Exchange Method Name</th>
                <th align="left" colspan="1" rowspan="1">Guidance</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">curve448-sha512</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MAY</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">gss-curve448-sha512-*</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MAY</bcp14></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-3.1.3">
          <name slugifiedName="name-ecdh-ecmqv-sha2-and-gss-nis">
            ecdh-*, ecmqv-sha2, and gss-nistp*
          </name>
          <t indent="0" pn="section-3.1.3-1">
            The ecdh-sha2-* namespace allows for both the named NIST prime
            curves (nistp256, nistp384, and nistp521) as well as other curves
            to be defined for the ECDH key exchange.

            At the time of this writing, there are three named curves
            in this namespace that <bcp14>SHOULD</bcp14> be supported.

            They appear in <xref target="RFC5656" sectionFormat="of" section="10.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5656#section-10.1" derivedContent="RFC5656"/>.

            If implemented, the named curves <bcp14>SHOULD</bcp14> always be enabled
            unless specifically disabled by local security policy.

            In <xref target="RFC5656" sectionFormat="of" section="6.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5656#section-6.1" derivedContent="RFC5656"/>, the method to name other ECDH curves using
            OIDs is specified.

            These other curves <bcp14>MAY</bcp14> be implemented.
          </t>
          <t indent="0" pn="section-3.1.3-2">
              The GSS-API namespace with gss-nistp*-sha* mirrors the
              algorithms used by ecdh-sha2-* names.

              They are described in

              <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/>.
          </t>
          <t indent="0" pn="section-3.1.3-3">
              ECDH reduces bandwidth of key exchanges compared to
              FFC DH at a similar security strength.
          </t>
          <t indent="0" pn="section-3.1.3-4">
              <xref target="ecdh_guidance" format="default" sectionFormat="of" derivedContent="Table 8"/> lists algorithms as
              "<bcp14>SHOULD</bcp14>" where implementations may be more
              efficient or widely deployed.

              The items listed as "<bcp14>MAY</bcp14>" in <xref target="ecdh_guidance" format="default" sectionFormat="of" derivedContent="Table 8"/> are potentially less efficient.
          </t>
          <table anchor="ecdh_guidance" align="center" pn="table-8">
            <name slugifiedName="name-ecdh-implementation-guidanc">ECDH Implementation Guidance</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Key Exchange Method Name</th>
                <th align="left" colspan="1" rowspan="1">Guidance</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">ecdh-sha2-*</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MAY</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">ecdh-sha2-nistp256</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>SHOULD</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">gss-nistp256-sha256-*</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>SHOULD</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">ecdh-sha2-nistp384</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>SHOULD</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">gss-nistp384-sha384-*</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>SHOULD</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">ecdh-sha2-nistp521</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>SHOULD</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">gss-nistp521-sha512-*</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>SHOULD</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">ecmqv-sha2</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MAY</bcp14></td>
              </tr>
            </tbody>
          </table>
          <t indent="0" pn="section-3.1.3-6">
            It is advisable to match the Elliptic Curve Digital Signature
            Algorithm (ECDSA) and ECDH algorithm to use the same curve for
            both to maintain the same security strength in the connection.
          </t>
        </section>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-finite-field-cryptography-ff">Finite Field Cryptography (FFC)</name>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-3.2.1">
          <name slugifiedName="name-ffc-diffie-hellman-using-ge">FFC Diffie-Hellman Using Generated MODP Groups</name>
          <t indent="0" pn="section-3.2.1-1">
            <xref target="RFC4419" format="default" sectionFormat="of" derivedContent="RFC4419"/>

            defines two key exchange methods that use a random
            selection from a set of pre-generated moduli for key
            exchange:

            the diffie-hellman-group-exchange-sha1 method and the
            diffie-hellman-group-exchange-sha256 method.

            Per

            <xref target="RFC8270" format="default" sectionFormat="of" derivedContent="RFC8270"/>,

            implementations <bcp14>SHOULD</bcp14> use a MODP group whose modulus size
            is equal to or greater than 2048 bits.

            MODP groups with a modulus size less than 2048 bits are
            weak and <bcp14>MUST NOT</bcp14> be used.
          </t>
          <t indent="0" pn="section-3.2.1-2">
            The diffie-hellman-group-exchange-sha1 key exchange method
            <bcp14>SHOULD NOT</bcp14> be used.

            This method uses SHA-1, which is being deprecated.
          </t>
          <t indent="0" pn="section-3.2.1-3">
            The diffie-hellman-group-exchange-sha256 key exchange
            method <bcp14>MAY</bcp14> be used.

            This method uses SHA2-256, which is reasonable for MODP
            groups less than 4096 bits.
          </t>
          <t indent="0" pn="section-3.2.1-4">
            Care should be taken in the pre-generation of the moduli P
            and generator G such that the generator provides a
            Q-ordered subgroup of P.

            Otherwise, the parameter set may leak one bit of the
            shared secret.
          </t>
          <t indent="0" pn="section-3.2.1-5">
            <xref target="ffc_modp" format="default" sectionFormat="of" derivedContent="Table 9"/> provides a summary of the guidance for these
            exchanges.
          </t>
          <table anchor="ffc_modp" align="center" pn="table-9">
            <name slugifiedName="name-ffc-generated-modp-group-im">FFC Generated MODP Group Implementation Guidance</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Key Exchange Method Name</th>
                <th align="left" colspan="1" rowspan="1">Guidance</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">diffie-hellman-group-exchange-sha1</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>SHOULD NOT</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">diffie-hellman-group-exchange-sha256</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MAY</bcp14></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-3.2.2">
          <name slugifiedName="name-ffc-diffie-hellman-using-na">FFC Diffie-Hellman Using Named MODP Groups</name>
          <t indent="0" pn="section-3.2.2-1">

              The diffie-hellman-group14-sha256 key exchange method is
              defined in

              <xref target="RFC8268" format="default" sectionFormat="of" derivedContent="RFC8268"/>

              and represents a key exchange that has approximately
              112 bits of security strength that matches 3des-cbc
              symmetric cipher security strength.

              It is a reasonably simple transition from SHA-1 to SHA-2, and
              given that diffie-hellman-group14-sha1 and
              diffie-hellman-group14-sha256 share a MODP group and only differ
              in the hash function used for the KDF and integrity, it is a
              correspondingly simple transition from implementing
              diffie-hellman-group14-sha1 to implementing
              diffie-hellman-group14-sha256.

              Given that diffie-hellman-group14-sha1 is being removed
              from mandatory to implement (MTI) status, the
              diffie-hellman-group14-sha256 method <bcp14>MUST</bcp14> be
              implemented.

              The rest of the FFC MODP group from

              <xref target="RFC8268" format="default" sectionFormat="of" derivedContent="RFC8268"/>

              have a larger number of security bits and are suitable
              for symmetric ciphers that also have a similar number of
              security bits.
          </t>
          <t indent="0" pn="section-3.2.2-2">
              <xref target="ffc_named_group" format="default" sectionFormat="of" derivedContent="Table 10"/> provides explicit guidance by name.
          </t>
          <table anchor="ffc_named_group" align="center" pn="table-10">
            <name slugifiedName="name-ffc-named-group-implementat">FFC Named Group Implementation Guidance</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Key Exchange Method Name</th>
                <th align="left" colspan="1" rowspan="1">Guidance</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">diffie-hellman-group14-sha256</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MUST</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">gss-group14-sha256-*</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>SHOULD</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">diffie-hellman-group15-sha512</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MAY</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">gss-group15-sha512-*</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MAY</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">diffie-hellman-group16-sha512</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>SHOULD</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">gss-group16-sha512-*</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MAY</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">diffie-hellman-group17-sha512</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MAY</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">gss-group17-sha512-*</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MAY</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">diffie-hellman-group18-sha512</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MAY</bcp14></td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">gss-group18-sha512-*</td>
                <td align="left" colspan="1" rowspan="1">
                  <bcp14>MAY</bcp14></td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-3.3">
        <name slugifiedName="name-integer-factorization-crypto">Integer Factorization Cryptography (IFC)</name>
        <t indent="0" pn="section-3.3-1">
          The rsa1024-sha1 key exchange method is defined in

          <xref target="RFC4432" format="default" sectionFormat="of" derivedContent="RFC4432"/>

          and uses an RSA 1024-bit modulus with a SHA-1 hash.

          This key exchange does NOT meet security requirements.

          This method <bcp14>MUST NOT</bcp14> be implemented.
        </t>
        <t indent="0" pn="section-3.3-2">
          The rsa2048-sha256 key exchange method is defined in
          <xref target="RFC4432" format="default" sectionFormat="of" derivedContent="RFC4432"/>
          and uses an RSA 2048-bit modulus with a SHA2-256 hash.  This key
          exchange meets 112-bit minimum security strength.  This method
          <bcp14>MAY</bcp14> be implemented.
        </t>
        <t indent="0" pn="section-3.3-3">
          <xref target="ifc_guidance" format="default" sectionFormat="of" derivedContent="Table 11"/> provides a summary of the
          guidance for IFC key exchanges.
        </t>
        <table anchor="ifc_guidance" align="center" pn="table-11">
          <name slugifiedName="name-ifc-implementation-guidance">IFC Implementation Guidance</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Key Exchange Method Name</th>
              <th align="left" colspan="1" rowspan="1">Guidance</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">rsa1024-sha1</td>
              <td align="left" colspan="1" rowspan="1">
                <bcp14>MUST NOT</bcp14></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">rsa2048-sha256</td>
              <td align="left" colspan="1" rowspan="1">
                <bcp14>MAY</bcp14></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-3.4">
        <name slugifiedName="name-kdfs-and-integrity-hashing">KDFs and Integrity Hashing</name>
        <t indent="0" pn="section-3.4-1">
          The SHA-1 and SHA-2 family of hashing algorithms are
          combined with the FFC, ECC, and IFC algorithms to comprise a
          key exchange method name.
        </t>
        <t indent="0" pn="section-3.4-2">
          The selected hash algorithm is used both in the KDF as well
          as for the integrity of the response.
        </t>
        <t indent="0" pn="section-3.4-3">
          All of the key exchange methods using the SHA-1 hashing
          algorithm should be deprecated and phased out due to
          security concerns for SHA-1, as documented in

          <xref target="RFC6194" format="default" sectionFormat="of" derivedContent="RFC6194"/>.
        </t>
        <t indent="0" pn="section-3.4-4">
          Unconditionally deprecating and/or disallowing SHA-1
          everywhere will hasten the day when it may be simply removed
          from implementations completely.

          Leaving partially broken algorithms lying around is not a
          good thing to do.
        </t>
        <t indent="0" pn="section-3.4-5">
          The SHA-2 family of hashes

          <xref target="RFC6234" format="default" sectionFormat="of" derivedContent="RFC6234"/>

          is more secure than SHA-1. They have been standardized for
          use in SSH with many of the currently defined key exchanges.
        </t>
        <t indent="0" pn="section-3.4-6">
          Please note that at the present time, there is no key
          exchange method for Secure Shell that uses the SHA-3 family
          of secure hashing functions or the Extendable-Output
          Functions <xref target="NIST.FIPS.202" format="default" sectionFormat="of" derivedContent="NIST.FIPS.202"/>.
        </t>
        <t indent="0" pn="section-3.4-7">
          Prior to the changes made by this document,
          diffie-hellman-group1-sha1 and diffie-hellman-group14-sha1
          were MTI.

          diffie-hellman-group14-sha1 is the stronger of the two.

          Group14 (a 2048-bit MODP group) is defined in

          <xref target="RFC3526" format="default" sectionFormat="of" section="3" derivedLink="https://rfc-editor.org/rfc/rfc3526#section-3" derivedContent="RFC3526"/>.

          The SSH group1 is defined in <xref target="RFC4253" sectionFormat="of" section="8.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4253#section-8.1" derivedContent="RFC4253"/> as using the Oakley Group 2 provided in <xref target="RFC2409" sectionFormat="of" section="6.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2409#section-6.2" derivedContent="RFC2409"/> (a 1024-bit MODP group).  This
          group1 MODP group with approximately 80 bits of security is too weak
          to be retained.

          However, rather than jumping from the MTI status to making it
          disallowed, many implementers suggested that it should transition to
          deprecated first and be disallowed at a later time.

          The group14 MODP group using a SHA-1 hash for the KDF is not
          as weak as the group1 MODP group.

          There are some legacy situations where it will still provide
          administrators with value, such as small hardware Internet of Things
          (IOT) devices that have insufficient compute and memory resources to
          use larger MODP groups before a timeout of the session occurs.

          There was consensus to transition from MTI to a requirement status
          that provides for continued use with the expectation that it would
          be deprecated or disallowed in the future.

	  
          Therefore, it is considered reasonable to retain the
          diffie-hellman-group14-sha1 exchange for interoperability
          with legacy implementations.

          The diffie-hellman-group14-sha1 key exchange <bcp14>MAY</bcp14> be
          implemented, but should be put at the end of the list of
          negotiated key exchanges.
        </t>
        <t indent="0" pn="section-3.4-8">
          The diffie-hellman-group1-sha1 and
          diffie-hellman-group-exchange-sha1 <bcp14>SHOULD NOT</bcp14> be
          implemented.

          The gss-group1-sha1-*, gss-group14-sha1-*, and
          gss-gex-sha1-* key exchanges are already specified as <bcp14>SHOULD NOT</bcp14> be implemented by

          <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/>.
        </t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-3.5">
        <name slugifiedName="name-secure-shell-extension-nego">Secure Shell Extension Negotiation</name>
        <t indent="0" pn="section-3.5-1">
          There are two methods, ext-info-c and ext-info-s, defined in

          <xref target="RFC8308" format="default" sectionFormat="of" derivedContent="RFC8308"/>.

          They provide a mechanism to support other Secure Shell
          negotiations.

          Being able to extend functionality is desirable.

          Both ext-info-c and ext-info-s <bcp14>SHOULD</bcp14> be implemented.
        </t>
      </section>
    </section>
    <section numbered="true" toc="include" anchor="key_ex_method" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-summary-guidance-for-implem">
        Summary Guidance for Implementation of Key Exchange Method Names
      </name>
      <t indent="0" pn="section-4-1">
        <xref target="iana_key_exchange" format="default" sectionFormat="of" derivedContent="Table 12"/> provides the existing key exchange method names
        listed alphabetically.
        The Implement column contains the current recommendations of this RFC.
      </t>
      <table align="center" anchor="iana_key_exchange" pn="table-12">
        <name slugifiedName="name-iana-guidance-for-implement">IANA Guidance for Implementation of Key Exchange Method Names</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Key Exchange Method Name</th>
            <th align="left" colspan="1" rowspan="1">Reference</th>
            <th align="left" colspan="1" rowspan="1">Previous Recommendation</th>
            <th align="left" colspan="1" rowspan="1">RFC 9142 Implement</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">curve25519-sha256</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8731" format="default" sectionFormat="of" derivedContent="RFC8731"/></td>
            <td align="left" colspan="1" rowspan="1">none</td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">curve448-sha512</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8731" format="default" sectionFormat="of" derivedContent="RFC8731"/></td>
            <td align="left" colspan="1" rowspan="1">none</td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">diffie-hellman-group-exchange-sha1</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC4419" format="default" sectionFormat="of" derivedContent="RFC4419"/>, <xref target="RFC8270" format="default" sectionFormat="of" derivedContent="RFC8270"/></td>
            <td align="left" colspan="1" rowspan="1">none</td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD NOT</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">diffie-hellman-group-exchange-sha256</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC4419" format="default" sectionFormat="of" derivedContent="RFC4419"/>, <xref target="RFC8270" format="default" sectionFormat="of" derivedContent="RFC8270"/></td>
            <td align="left" colspan="1" rowspan="1">none</td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">diffie-hellman-group1-sha1</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC4253" format="default" sectionFormat="of" derivedContent="RFC4253"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MUST</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD NOT</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">diffie-hellman-group14-sha1</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC4253" format="default" sectionFormat="of" derivedContent="RFC4253"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MUST</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">diffie-hellman-group14-sha256</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8268" format="default" sectionFormat="of" derivedContent="RFC8268"/></td>
            <td align="left" colspan="1" rowspan="1">none</td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MUST</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">diffie-hellman-group15-sha512</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8268" format="default" sectionFormat="of" derivedContent="RFC8268"/></td>
            <td align="left" colspan="1" rowspan="1">none</td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">diffie-hellman-group16-sha512</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8268" format="default" sectionFormat="of" derivedContent="RFC8268"/></td>
            <td align="left" colspan="1" rowspan="1">none</td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">diffie-hellman-group17-sha512</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8268" format="default" sectionFormat="of" derivedContent="RFC8268"/></td>
            <td align="left" colspan="1" rowspan="1">none</td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">diffie-hellman-group18-sha512</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8268" format="default" sectionFormat="of" derivedContent="RFC8268"/></td>
            <td align="left" colspan="1" rowspan="1">none</td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">ecdh-sha2-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">ecdh-sha2-nistp256</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MUST</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">ecdh-sha2-nistp384</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MUST</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">ecdh-sha2-nistp521</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MUST</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">ecmqv-sha2</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">ext-info-c</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8308" format="default" sectionFormat="of" derivedContent="RFC8308"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">ext-info-s</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8308" format="default" sectionFormat="of" derivedContent="RFC8308"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/></td>
            <td align="left" colspan="1" rowspan="1">reserved</td>
            <td align="left" colspan="1" rowspan="1">reserved</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-curve25519-sha256-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-curve448-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-gex-sha1-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/>, <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD NOT</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD NOT</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group1-sha1-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/>, <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD NOT</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD NOT</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group14-sha1-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/>, <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD NOT</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD NOT</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group14-sha256-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group15-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group16-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group17-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group18-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-nistp256-sha256-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-nistp384-sha384-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-nistp521-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">rsa1024-sha1</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC4432" format="default" sectionFormat="of" derivedContent="RFC4432"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MUST NOT</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">rsa2048-sha256</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC4432" format="default" sectionFormat="of" derivedContent="RFC4432"/></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>MAY</bcp14></td>
          </tr>
        </tbody>
      </table>
      <t indent="0" pn="section-4-3">
        The full set of official

        <xref target="IANA-SSH" format="default" sectionFormat="of" derivedContent="IANA-SSH"/>

        "Key Exchange Method Names" not otherwise mentioned in this document
        <bcp14>MAY</bcp14> be implemented.
      </t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-5-1">
        This SSH protocol provides a secure encrypted channel over an
        insecure network.

        It performs server host authentication, key exchange,
        encryption, and integrity checks.

        It also derives a unique session ID that may be used by
        higher-level protocols.

        The key exchange itself generates a shared secret and uses
        the hash function for both the KDF and integrity.
      </t>
      <t indent="0" pn="section-5-2">
        Full security considerations for this protocol are provided in <xref target="RFC4251" format="default" sectionFormat="of" derivedContent="RFC4251"/> and continue to apply.  In addition,
        the security considerations provided in <xref target="RFC4432" format="default" sectionFormat="of" derivedContent="RFC4432"/> apply.

        Note that Forward Secrecy is NOT available with the
        rsa1024-sha1 or rsa2048-sha256 key exchanges.
      </t>
      <t indent="0" pn="section-5-3">
        It is desirable to deprecate or disallow key exchange methods
        that are considered weak so they are not still actively in
        operation when they are broken.
      </t>
      <t indent="0" pn="section-5-4">
        A key exchange method is considered weak when the security
        strength is insufficient to match the symmetric cipher or the
        algorithm has been broken.
      </t>
      <t indent="0" pn="section-5-5">
        The 1024-bit MODP group used by diffie-hellman-group1-sha1 is
        too small for the symmetric ciphers used in SSH.
      </t>
      <t indent="0" pn="section-5-6">
        MODP groups with a modulus size less than 2048 bits are too
        small for the symmetric ciphers used in SSH.

        If the diffie-hellman-group-exchange-sha256 or
        diffie-hellman-group-exchange-sha1 key exchange method is
        used, the modulus size of the MODP group used needs to be at
        least 2048 bits.
      </t>
      <t indent="0" pn="section-5-7">
        At this time, the rsa1024-sha1 key exchange is too small for
        the symmetric ciphers used in SSH.
      </t>
      <t indent="0" pn="section-5-8">
        The use of SHA-1 for use with any key exchange may not yet be
        completely broken, but it is time to retire all uses of this
        algorithm as soon as possible.
      </t>
      <t indent="0" pn="section-5-9">
        The diffie-hellman-group14-sha1 algorithm is not yet
        completely deprecated.

        This is to provide a practical transition from the MTI
        algorithms to a new one.

        However, it would be best to only be used as a last resort in key
        exchange negotiations.

        All key exchange methods using the SHA-1 hash are to be
        considered as deprecated.
      </t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-6-1">
        IANA has added a new column to the "Key Exchange Method Names"
        registry <xref target="IANA-SSH" format="default" sectionFormat="of" derivedContent="IANA-SSH"/> with the heading
        "OK to Implement" and annotated entries therein with the
        implementation guidance provided in <xref target="key_ex_method" format="default" sectionFormat="of" derivedContent="Section 4"/>,
        "Summary Guidance for Implementation of Key Exchange Method Names", in
        this document.  IANA also added entries for ecdh-sha2-nistp256, ecdh-sha2-nistp384, and ecdh-sha2-nistp521, and added references to <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/> and <xref target="RFC8732" format="default" sectionFormat="of" derivedContent="RFC8732"/> for gss-gex-sha1-*, gss-group1-sha1-*, gss-group14-sha1-*, diffie-hellman-group-exchange-sha1, and diffie-hellman-group-exchange-sha256.  A summary may be found in <xref target="iana_key_exchange" format="default" sectionFormat="of" derivedContent="Table 12"/> in <xref target="key_ex_method" format="default" sectionFormat="of" derivedContent="Section 4"/>.  IANA
        has also included this document as an additional registry reference
        for the suggested implementation guidance provided in <xref target="key_ex_method" format="default" sectionFormat="of" derivedContent="Section 4"/> of this document and added a note indicating the following:</t>
      <blockquote pn="section-6-2">OK to Implement guidance entries for registrations that pre-date [RFC9142] are found in Table 12 in Section 4 of [RFC9142].</blockquote>
      <t indent="0" pn="section-6-3">Registry entries
        annotated with "<bcp14>MUST NOT</bcp14>" are considered disallowed.
        Registry entries annotated with "<bcp14>SHOULD NOT</bcp14>" are
        deprecated and may be disallowed in the future.
      </t>
    </section>
  </middle>
  <back>
    <references pn="section-7">
      <name slugifiedName="name-references">References</name>
      <references pn="section-7.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 indent="0">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 indent="0">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="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 indent="0">The Secure Shell (SSH) is a protocol for secure remote login and other secure network services over an insecure network.</t>
              <t indent="0">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 indent="0">Key exchange method, public key algorithm, symmetric encryption algorithm, message authentication algorithm, and hash algorithm are all negotiated.</t>
              <t indent="0">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="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 indent="0">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="RFC8268" target="https://www.rfc-editor.org/info/rfc8268" quoteTitle="true" derivedAnchor="RFC8268">
          <front>
            <title>More Modular Exponentiation (MODP) Diffie-Hellman (DH) Key Exchange (KEX) Groups for Secure Shell (SSH)</title>
            <author initials="M." surname="Baushke" fullname="M. Baushke">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="December"/>
            <abstract>
              <t indent="0">This document defines added Modular Exponentiation (MODP) groups for the Secure Shell (SSH) protocol using SHA-2 hashes.  This document updates RFC 4250.  This document updates RFC 4253 by correcting an error regarding checking the Peer's DH Public Key.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8268"/>
          <seriesInfo name="DOI" value="10.17487/RFC8268"/>
        </reference>
        <reference anchor="RFC8270" target="https://www.rfc-editor.org/info/rfc8270" quoteTitle="true" derivedAnchor="RFC8270">
          <front>
            <title>Increase the Secure Shell Minimum Recommended Diffie-Hellman Modulus Size to 2048 Bits</title>
            <author initials="L." surname="Velvindron" fullname="L. Velvindron">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Baushke" fullname="M. Baushke">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="December"/>
            <abstract>
              <t indent="0">The Diffie-Hellman (DH) Group Exchange for the Secure Shell (SSH) transport-layer protocol specifies that servers and clients should support groups with a minimum modulus group size of 1024 bits. Recent security research has shown that the minimum value of 1024 bits is insufficient to protect against state-sponsored actors and any organization with enough computing resources.  This RFC updates RFC 4419, which allowed for DH moduli less than 2048 bits; now, 2048 bits is the minimum acceptable group size.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8270"/>
          <seriesInfo name="DOI" value="10.17487/RFC8270"/>
        </reference>
        <reference anchor="RFC8308" target="https://www.rfc-editor.org/info/rfc8308" quoteTitle="true" derivedAnchor="RFC8308">
          <front>
            <title>Extension Negotiation in the Secure Shell (SSH) Protocol</title>
            <author initials="D." surname="Bider" fullname="D. Bider">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="March"/>
            <abstract>
              <t indent="0">This memo updates RFCs 4251, 4252, 4253, and 4254 by defining a mechanism for Secure Shell (SSH) clients and servers to exchange information about supported protocol extensions confidentially after SSH key exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8308"/>
          <seriesInfo name="DOI" value="10.17487/RFC8308"/>
        </reference>
        <reference anchor="RFC8731" target="https://www.rfc-editor.org/info/rfc8731" quoteTitle="true" derivedAnchor="RFC8731">
          <front>
            <title>Secure Shell (SSH) Key Exchange Method Using Curve25519 and Curve448</title>
            <author initials="A." surname="Adamantiadis" fullname="A. Adamantiadis">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Josefsson" fullname="S. Josefsson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Baushke" fullname="M. Baushke">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2020" month="February"/>
            <abstract>
              <t indent="0">This document describes the specification for using Curve25519 and Curve448 key exchange methods in the Secure Shell (SSH) protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8731"/>
          <seriesInfo name="DOI" value="10.17487/RFC8731"/>
        </reference>
      </references>
      <references pn="section-7.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="IANA-SSH" target="https://www.iana.org/assignments/ssh-parameters/" quoteTitle="true" derivedAnchor="IANA-SSH">
          <front>
            <title>Secure Shell (SSH) Protocol Parameters</title>
            <author fullname="IANA">
              <organization showOnFrontPage="true">Internet Assigned Numbers Authority</organization>
            </author>
          </front>
        </reference>
        <reference anchor="NIST.FIPS.202" quoteTitle="true" target="https://doi.org/10.6028/NIST.FIPS.202" derivedAnchor="NIST.FIPS.202">
          <front>
            <title>SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions</title>
            <author>
              <organization showOnFrontPage="true">National Institute of Standards and Technology</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
          <refcontent>FIPS PUB 202</refcontent>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.202"/>
        </reference>
        <reference anchor="NIST.SP.800-107r1" quoteTitle="true" target="https://doi.org/10.6028/NIST.SP.800-107r1" derivedAnchor="NIST.SP.800-107r1">
          <front>
            <title>Recommendation for applications using approved hash algorithms</title>
            <author initials="Q" surname="Dang" fullname="Quynh Dang">
              <organization showOnFrontPage="true">National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2012" month="August"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/NIST.SP.800-107r1"/>
        </reference>
        <reference anchor="NIST.SP.800-57pt1r5" quoteTitle="true" target="https://doi.org/10.6028/NIST.SP.800-57pt1r5" derivedAnchor="NIST.SP.800-57pt1r5">
          <front>
            <title>Recommendation for Key Management: Part 1 - General</title>
            <author initials="E" surname="Barker" fullname="Elaine Barker">
              <organization showOnFrontPage="true">National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2020" month="may"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/NIST.SP.800-57pt1r5"/>
        </reference>
        <reference anchor="RFC2409" target="https://www.rfc-editor.org/info/rfc2409" quoteTitle="true" derivedAnchor="RFC2409">
          <front>
            <title>The Internet Key Exchange (IKE)</title>
            <author initials="D." surname="Harkins" fullname="D. Harkins">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D." surname="Carrel" fullname="D. Carrel">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1998" month="November"/>
            <abstract>
              <t indent="0">This memo describes a hybrid protocol. The purpose is to negotiate, and provide authenticated keying material for, security associations in a protected manner.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2409"/>
          <seriesInfo name="DOI" value="10.17487/RFC2409"/>
        </reference>
        <reference anchor="RFC3526" target="https://www.rfc-editor.org/info/rfc3526" quoteTitle="true" derivedAnchor="RFC3526">
          <front>
            <title>More Modular Exponential (MODP) Diffie-Hellman groups for Internet Key Exchange (IKE)</title>
            <author initials="T." surname="Kivinen" fullname="T. Kivinen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Kojo" fullname="M. Kojo">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2003" month="May"/>
            <abstract>
              <t indent="0">This document defines new Modular Exponential (MODP) Groups for the Internet Key Exchange (IKE) protocol.  It documents the well known and used 1536 bit group 5, and also defines new 2048, 3072, 4096, 6144, and 8192 bit Diffie-Hellman groups numbered starting at 14.  The selection of the primes for theses groups follows the criteria established by Richard Schroeppel.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3526"/>
          <seriesInfo name="DOI" value="10.17487/RFC3526"/>
        </reference>
        <reference anchor="RFC4086" target="https://www.rfc-editor.org/info/rfc4086" quoteTitle="true" derivedAnchor="RFC4086">
          <front>
            <title>Randomness Requirements for Security</title>
            <author initials="D." surname="Eastlake 3rd" fullname="D. Eastlake 3rd">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Schiller" fullname="J. Schiller">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Crocker" fullname="S. Crocker">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2005" month="June"/>
            <abstract>
              <t indent="0">Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts.  However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities.  The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t indent="0">Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult.  This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities.  It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications.  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="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </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 indent="0">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="RFC4419" target="https://www.rfc-editor.org/info/rfc4419" quoteTitle="true" derivedAnchor="RFC4419">
          <front>
            <title>Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer Protocol</title>
            <author initials="M." surname="Friedl" fullname="M. Friedl">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N." surname="Provos" fullname="N. Provos">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="W." surname="Simpson" fullname="W. Simpson">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="March"/>
            <abstract>
              <t indent="0">This memo describes a new key exchange method for the Secure Shell (SSH) protocol.  It allows the SSH server to propose new groups on which to perform the Diffie-Hellman key exchange to the client.  The proposed groups need not be fixed and can change with time.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4419"/>
          <seriesInfo name="DOI" value="10.17487/RFC4419"/>
        </reference>
        <reference anchor="RFC4432" target="https://www.rfc-editor.org/info/rfc4432" quoteTitle="true" derivedAnchor="RFC4432">
          <front>
            <title>RSA Key Exchange for the Secure Shell (SSH) Transport Layer Protocol</title>
            <author initials="B." surname="Harris" fullname="B. Harris">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="March"/>
            <abstract>
              <t indent="0">This memo describes a key-exchange method for the Secure Shell (SSH) protocol based on Rivest-Shamir-Adleman (RSA) public-key encryption. It uses much less client CPU time than the Diffie-Hellman algorithm specified as part of the core protocol, and hence is particularly suitable for slow client systems.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4432"/>
          <seriesInfo name="DOI" value="10.17487/RFC4432"/>
        </reference>
        <reference anchor="RFC4462" target="https://www.rfc-editor.org/info/rfc4462" quoteTitle="true" derivedAnchor="RFC4462">
          <front>
            <title>Generic Security Service Application Program Interface (GSS-API) Authentication and Key Exchange for the Secure Shell (SSH) Protocol</title>
            <author initials="J." surname="Hutzelman" fullname="J. Hutzelman">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Salowey" fullname="J. Salowey">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Galbraith" fullname="J. Galbraith">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="V." surname="Welch" fullname="V. Welch">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="May"/>
            <abstract>
              <t indent="0">The Secure Shell protocol (SSH) is a protocol for secure remote login and other secure network services over an insecure network.</t>
              <t indent="0">The Generic Security Service Application Program Interface (GSS-API) provides security services to callers in a mechanism-independent fashion.</t>
              <t indent="0">This memo describes methods for using the GSS-API for authentication and key exchange in SSH.  It defines an SSH user authentication method that uses a specified GSS-API mechanism to authenticate a user, and a family of SSH key exchange methods that use GSS-API to authenticate a Diffie-Hellman key exchange.</t>
              <t indent="0">This memo also defines a new host public key algorithm that can be used when no operations are needed using a host's public key, and a new user authentication method that allows an authorization name to be used in conjunction with any authentication that has already occurred as a side-effect of GSS-API-based key exchange.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4462"/>
          <seriesInfo name="DOI" value="10.17487/RFC4462"/>
        </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 indent="0">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="RFC6194" target="https://www.rfc-editor.org/info/rfc6194" quoteTitle="true" derivedAnchor="RFC6194">
          <front>
            <title>Security Considerations for the SHA-0 and SHA-1 Message-Digest Algorithms</title>
            <author initials="T." surname="Polk" fullname="T. Polk">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Chen" fullname="L. Chen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Turner" fullname="S. Turner">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="March"/>
            <abstract>
              <t indent="0">This document includes security considerations for the SHA-0 and SHA-1 message digest algorithm.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6194"/>
          <seriesInfo name="DOI" value="10.17487/RFC6194"/>
        </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 indent="0">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 indent="0">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>
        <reference anchor="RFC8031" target="https://www.rfc-editor.org/info/rfc8031" quoteTitle="true" derivedAnchor="RFC8031">
          <front>
            <title>Curve25519 and Curve448 for the Internet Key Exchange Protocol Version 2 (IKEv2) Key Agreement</title>
            <author initials="Y." surname="Nir" fullname="Y. Nir">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Josefsson" fullname="S. Josefsson">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="December"/>
            <abstract>
              <t indent="0">This document describes the use of Curve25519 and Curve448 for ephemeral key exchange in the Internet Key Exchange Protocol Version 2 (IKEv2).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8031"/>
          <seriesInfo name="DOI" value="10.17487/RFC8031"/>
        </reference>
        <reference anchor="RFC8732" target="https://www.rfc-editor.org/info/rfc8732" quoteTitle="true" derivedAnchor="RFC8732">
          <front>
            <title>Generic Security Service Application Program Interface (GSS-API) Key Exchange with SHA-2</title>
            <author initials="S." surname="Sorce" fullname="S. Sorce">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Kario" fullname="H. Kario">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2020" month="February"/>
            <abstract>
              <t indent="0">This document specifies additions and amendments to RFC 4462. It defines a new key exchange method that uses SHA-2 for integrity and deprecates weak Diffie-Hellman (DH) groups. The purpose of this specification is to modernize the cryptographic primitives used by Generic Security Service (GSS) key exchanges.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8732"/>
          <seriesInfo name="DOI" value="10.17487/RFC8732"/>
        </reference>
        <reference anchor="TRANSCRIPTION" quoteTitle="true" target="https://doi.org/10.14722/ndss.2016.23418" derivedAnchor="TRANSCRIPTION">
          <front>
            <title>Transcript Collision Attacks: Breaking Authentication in TLS, IKE, and SSH</title>
            <author fullname="Karthikeyan Bhargavan">
              </author>
            <author fullname="Gaeutan Leurent">
              </author>
            <date month="February" year="2016"/>
          </front>
          <refcontent>Network and Distributed System Security Symposium (NDSS)</refcontent>
          <seriesInfo name="DOI" value="10.14722/ndss.2016.23418"/>
        </reference>
      </references>
    </references>
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">
        Thanks to the following people for review and comments: <contact fullname="Denis Bider"/>, <contact fullname="Peter Gutmann"/>,
        <contact fullname="Damien Miller"/>, <contact fullname="Niels         Moeller"/>, <contact fullname="Matt Johnston"/>, <contact fullname="Iwamoto Kouichi"/>, <contact fullname="Simon Josefsson"/>,
        <contact fullname="Dave Dugal"/>, <contact fullname="Daniel         Migault"/>, <contact fullname="Anna Johnston"/>, <contact fullname="Tero Kivinen"/>, and <contact fullname="Travis         Finkenauer"/>.
      </t>
      <t indent="0" pn="section-appendix.a-2">
        Thanks to the following people for code to implement interoperable
        exchanges using some of these groups as found in this document: <contact fullname="Darren Tucker"/> for OpenSSH and <contact fullname="Matt         Johnston"/> for Dropbear.

        And thanks to <contact fullname="Iwamoto Kouichi"/> for information about RLogin,
        Tera Term (ttssh), and Poderosa implementations also adopting
        new Diffie-Hellman groups based on this document.
      </t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author initials="M." surname="Baushke" fullname="Mark D. Baushke">
        <address>
          <email>mbaushke.ietf@gmail.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
