<?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-gss-keyex-sha2-10" indexInclude="true" ipr="trust200902" number="8732" prepTime="2020-02-28T14:18:32" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" updates="4462" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-curdle-gss-keyex-sha2-10" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8732" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="GSS Keyex SHA-2">Generic Security Service Application Program Interface (GSS-API) Key Exchange with SHA-2</title>
    <seriesInfo name="RFC" value="8732" stream="IETF"/>
    <author fullname="Simo Sorce" initials="S." surname="Sorce">
      <organization showOnFrontPage="true">Red Hat, Inc.</organization>
      <address>
        <postal>
          <street>140 Broadway, 24th Floor</street>
          <city>New York</city>
          <region>NY</region>
          <code>10025</code>
          <country>United States of America</country>
        </postal>
        <email>simo@redhat.com</email>
      </address>
    </author>
    <author fullname="Hubert Kario" initials="H." surname="Kario">
      <organization showOnFrontPage="true">Red Hat, Inc.</organization>
      <address>
        <postal>
          <street>Purkynova 115</street>
          <city>Brno</city>
          <code>612 00</code>
          <country>Czech Republic</country>
        </postal>
        <email>hkario@redhat.com</email>
      </address>
    </author>
    <date month="02" year="2020"/>
    <area>Security</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>SSH</keyword>
    <abstract pn="section-abstract">
      <t pn="section-abstract-1">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>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc8732" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t pn="section-boilerplate.2-1">
            Copyright (c) 2020 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-rationale">Rationale</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-document-conventions">Document Conventions</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t keepWithNext="true" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-new-diffie-hellman-key-exch">New Diffie-Hellman Key Exchange Methods</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t keepWithNext="true" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-new-elliptic-curve-diffie-h">New Elliptic Curve Diffie-Hellman Key Exchange Methods</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-generic-gss-api-key-exchang">Generic GSS-API Key Exchange with ECDH</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ecdh-key-exchange-methods">ECDH Key Exchange Methods</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t keepWithNext="true" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-deprecated-algorithms">Deprecated Algorithms</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t keepWithNext="true" 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-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t keepWithNext="true" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2">
              <li pn="section-toc.1-1.8.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.8.2.1.1"><xref derivedContent="8.1" format="counter" sectionFormat="of" target="section-8.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-new-finite-field-dh-mechani">New Finite Field DH Mechanisms</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.8.2.2.1"><xref derivedContent="8.2" format="counter" sectionFormat="of" target="section-8.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-new-elliptic-curve-dh-mecha">New Elliptic Curve DH Mechanisms</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.3">
                <t keepWithNext="true" pn="section-toc.1-1.8.2.3.1"><xref derivedContent="8.3" format="counter" sectionFormat="of" target="section-8.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-gss-api-delegation">GSS-API Delegation</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.9">
            <t keepWithNext="true" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <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.9.2">
              <li pn="section-toc.1-1.9.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.9.2.1.1"><xref derivedContent="9.1" format="counter" sectionFormat="of" target="section-9.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.9.2.2.1"><xref derivedContent="9.2" format="counter" sectionFormat="of" target="section-9.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.10">
            <t keepWithNext="true" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t pn="section-1-1">Secure Shell (SSH) Generic Security Service Application Program Interface (GSS-API)
      methods <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/>
      allow the use of GSS-API
      <xref target="RFC2743" format="default" sectionFormat="of" derivedContent="RFC2743"/> for authentication and key exchange
      in SSH. <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/> defines three exchange methods all based on DH groups and
      SHA-1. This document updates <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/> with new methods intended to support
      environments that desire to use the SHA-2 cryptographic hash functions.
      </t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-rationale">Rationale</name>
      <t pn="section-2-1">Due to security concerns with SHA-1 <xref target="RFC6194" format="default" sectionFormat="of" derivedContent="RFC6194"/> and with  modular exponentiation (MODP) groups with less than 2048 bits <xref target="NIST-SP-800-131Ar2" format="default" sectionFormat="of" derivedContent="NIST-SP-800-131Ar2"/>, 
      we propose the use of hashes based on SHA-2 <xref target="RFC6234" format="default" sectionFormat="of" derivedContent="RFC6234"/>
      with DH group14, group15,
      group16, group17, and group18 <xref target="RFC3526" format="default" sectionFormat="of" derivedContent="RFC3526"/>. Additionally, we
      add support for key exchange based on Elliptic Curve Diffie-Hellman with
      the NIST P-256, P-384, and P-521 <xref target="SEC2v2" format="default" sectionFormat="of" derivedContent="SEC2v2"/>, as well as the
      X25519 and X448 <xref target="RFC7748" format="default" sectionFormat="of" derivedContent="RFC7748"/> curves.
      Following the practice of <xref target="RFC8268" format="default" sectionFormat="of" derivedContent="RFC8268"/>, only SHA-256 and
      SHA-512 hashes are used for DH groups. For NIST curves, the same
      curve-to-hashing algorithm pairing used in <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/> is
      adopted for consistency.</t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-document-conventions">Document Conventions</name>
      <t pn="section-3-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" anchor="sect4" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-new-diffie-hellman-key-exch">New Diffie-Hellman Key Exchange Methods</name>
      <t pn="section-4-1">This document adopts the same naming convention defined in <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/> to define families of methods that
      cover any 
        GSS-API mechanism used with a specific Diffie-Hellman group and
      SHA-2 hash combination.</t>
      <table anchor="gss_ex_alg" align="center" pn="table-1">
        <name slugifiedName="name-new-key-exchange-algorithms">New Key Exchange Algorithms</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Key Exchange Method Name</th>
            <th align="left" colspan="1" rowspan="1">Implementation Recommendations</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group14-sha256-*</td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14>/<bcp14>RECOMMENDED</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>/<bcp14>OPTIONAL</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group16-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD</bcp14>/<bcp14>RECOMMENDED</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>/<bcp14>OPTIONAL</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>/<bcp14>OPTIONAL</bcp14></td>
          </tr>
        </tbody>
      </table>
      <t pn="section-4-3">Each key exchange method prefix is registered by this document.
        The IESG is the change controller of all these key exchange methods;
        this does NOT imply that the IESG is considered to be in control of
        the corresponding GSS-API mechanism.</t>
      <t pn="section-4-4">
        Each method in any family of methods (<xref target="fam_met" format="default" sectionFormat="of" derivedContent="Table 2"/>)
        specifies GSS-API-authenticated Diffie-Hellman key exchanges as
        described in <xref target="RFC4462" sectionFormat="of" section="2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4462#section-2.1" derivedContent="RFC4462"/>. The method name for each method (<xref target="gss_ex_alg" format="default" sectionFormat="of" derivedContent="Table 1"/>) is the 
        concatenation of the family name prefix with the base64 encoding of
        the MD5 hash <xref target="RFC1321" format="default" sectionFormat="of" derivedContent="RFC1321"/> of the ASN.1 DER encoding
        <xref target="ISO-IEC-8825-1" format="default" sectionFormat="of" derivedContent="ISO-IEC-8825-1"/> of the corresponding GSS-API
        mechanism's OID. Base64 encoding is described in
        <xref target="RFC4648" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4648#section-4" derivedContent="RFC4648"/>.</t>
      <table anchor="fam_met" align="center" pn="table-2">
        <name slugifiedName="name-family-method-references">Family Method References</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Family Name Prefix</th>
            <th align="left" colspan="1" rowspan="1">Hash Function</th>
            <th align="left" colspan="1" rowspan="1">Group </th>
            <th align="left" colspan="1" rowspan="1">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group14-sha256-</td>
            <td align="left" colspan="1" rowspan="1">SHA-256</td>
            <td align="left" colspan="1" rowspan="1">2048-bit MODP</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC3526" sectionFormat="of" section="3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3526#section-3" derivedContent="RFC3526"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group15-sha512-</td>
            <td align="left" colspan="1" rowspan="1">SHA-512</td>
            <td align="left" colspan="1" rowspan="1">3072-bit MODP</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC3526" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3526#section-4" derivedContent="RFC3526"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group16-sha512-</td>
            <td align="left" colspan="1" rowspan="1">SHA-512</td>
            <td align="left" colspan="1" rowspan="1">4096-bit MODP</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC3526" sectionFormat="of" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3526#section-5" derivedContent="RFC3526"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group17-sha512-</td>
            <td align="left" colspan="1" rowspan="1">SHA-512</td>
            <td align="left" colspan="1" rowspan="1">6144-bit MODP</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC3526" sectionFormat="of" section="6" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3526#section-6" derivedContent="RFC3526"/></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group18-sha512-</td>
            <td align="left" colspan="1" rowspan="1">SHA-512</td>
            <td align="left" colspan="1" rowspan="1">8192-bit MODP</td>
            <td align="left" colspan="1" rowspan="1">
              <xref target="RFC3526" sectionFormat="of" section="7" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3526#section-7" derivedContent="RFC3526"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section numbered="true" toc="include" anchor="sect5" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-new-elliptic-curve-diffie-h">New Elliptic Curve Diffie-Hellman Key Exchange Methods</name>
      <t pn="section-5-1">In <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>, new SSH key exchange algorithms based on
      elliptic curve cryptography are introduced. We reuse much of 
      <xref target="RFC5656" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5656#section-4" derivedContent="RFC5656"/>
      to define GSS-API-authenticated Elliptic Curve Diffie-Hellman (ECDH) key exchanges.</t>
      <t pn="section-5-2">Additionally, we also utilize the curves defined in <xref target="RFC8731" format="default" sectionFormat="of" derivedContent="RFC8731"/> to complement the three classic
      NIST-defined curves required by <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>.</t>
      <section anchor="gen_gss_ecdh" numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-generic-gss-api-key-exchang">Generic GSS-API Key Exchange with ECDH</name>
        <t pn="section-5.1-1">This section reuses much of the scheme defined in
        <xref target="RFC4462" sectionFormat="of" section="2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4462#section-2.1" derivedContent="RFC4462"/> and combines it with the scheme defined in
        <xref target="RFC5656" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5656#section-4" derivedContent="RFC5656"/>; in particular, all checks and
        verification steps prescribed in 
        <xref target="RFC5656" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5656#section-4" derivedContent="RFC5656"/> apply
	here as well.</t>
        <t pn="section-5.1-2">The key-agreement schemes "ECDHE-Curve25519" and "ECDHE-Curve448" perform
        the Diffie-Hellman protocol using the functions X25519 and X448,
        respectively. Implementations <bcp14>MUST</bcp14> compute these functions using
        the algorithms described in <xref target="RFC7748" format="default" sectionFormat="of" derivedContent="RFC7748"/>. When they do
        so, implementations <bcp14>MUST</bcp14> check whether the computed Diffie-Hellman
        shared secret is the all-zero value and abort if so, as described in
        <xref target="RFC7748" sectionFormat="of" section="6" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7748#section-6" derivedContent="RFC7748"/>.	Alternative implementations of these functions
        <bcp14>SHOULD</bcp14> abort when either the client or the server input
   forces the shared secret to one of a small set of values, as
   described in Sections <xref target="RFC7748" section="6" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7748#section-6" derivedContent="RFC7748"/> and <xref target="RFC7748" section="7" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7748#section-7" derivedContent="RFC7748"/> of <xref target="RFC7748" format="default" sectionFormat="of" derivedContent="RFC7748"/>.</t>
        <t pn="section-5.1-3">This section defers to <xref target="RFC7546" format="default" sectionFormat="of" derivedContent="RFC7546"/> as the source of
        information on GSS-API context establishment operations, Section <xref target="RFC7546" sectionFormat="bare" section="3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7546#section-3" derivedContent="RFC7546"/>
        being the most relevant. All security considerations described in
        <xref target="RFC7546" format="default" sectionFormat="of" derivedContent="RFC7546"/> apply here, too.</t>
        <t pn="section-5.1-4">The parties each generate an ephemeral key pair, according to
	Section 3.2.1 of
        <xref target="SEC1v2" format="default" sectionFormat="of" derivedContent="SEC1v2"/>. Keys are verified upon
        receipt by the parties according to Section 3.2.3.1 of
        <xref target="SEC1v2" format="default" sectionFormat="of" derivedContent="SEC1v2"/>.</t>
        <t pn="section-5.1-5">For NIST curves, the keys use the uncompressed point representation
        and <bcp14>MUST</bcp14> be converted using the algorithm in Section 2.3.4 of
        <xref target="SEC1v2" format="default" sectionFormat="of" derivedContent="SEC1v2"/>. If the conversion fails or the point is
        transmitted using the compressed representation, the key exchange <bcp14>MUST</bcp14>
        fail.</t>
        <t pn="section-5.1-6">A GSS context is established according to 
        <xref target="RFC5656" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5656#section-4" derivedContent="RFC5656"/>; the client initiates the establishment
        using GSS_Init_sec_context(), and the server responds to it using
        GSS_Accept_sec_context(). For the negotiation, the client <bcp14>MUST</bcp14> set
        mutual_req_flag and integ_req_flag to "true". In addition,
        deleg_req_flag <bcp14>MAY</bcp14> be set to "true" to request access delegation, if
        requested by the user. Since the key exchange process authenticates
        only the host, the setting of anon_req_flag is immaterial to this
        process. If the client does not support the "gssapi-keyex" user
        authentication method described in 
        <xref target="RFC4462" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4462#section-4" derivedContent="RFC4462"/>, or does not intend to use that method in
        conjunction with the GSS-API context established during key exchange,
        then anon_req_flag <bcp14>SHOULD</bcp14> be set to "true". Otherwise,
	this flag <bcp14>MAY</bcp14> 
        be set to "true" if the client wishes to hide its identity.
        This key exchange process will exchange only a single message token
        once the context has been established; therefore, the
        replay_det_req_flag and sequence_req_flag <bcp14>SHOULD</bcp14> be set to "false".
        </t>
        <t pn="section-5.1-7">The client <bcp14>MUST</bcp14> include its public key with the first message it
        sends to the server during this process; if the server receives
        more than one key or none at all, the key exchange <bcp14>MUST</bcp14> fail.</t>
        <t pn="section-5.1-8">During GSS context establishment, multiple tokens may be exchanged
        by the client and the server. When the GSS context is established
        (major_status is GSS_S_COMPLETE), the parties check that
        mutual_state and integ_avail are both "true". If not, the key
        exchange <bcp14>MUST</bcp14> fail.</t>
        <t pn="section-5.1-9">Once a party receives the peer's public key, it proceeds to compute
        a shared secret K. For NIST curves, the computation is done according
        to Section 3.3.1 of <xref target="SEC1v2" format="default" sectionFormat="of" derivedContent="SEC1v2"/>, and the resulting value
        z is converted to the octet string K using the conversion defined
        in Section 2.3.5 of <xref target="SEC1v2" format="default" sectionFormat="of" derivedContent="SEC1v2"/>. For curve25519 and
        curve448, the algorithms in <xref target="RFC7748" sectionFormat="of" section="6" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7748#section-6" derivedContent="RFC7748"/> are
        used instead.</t>
        <t pn="section-5.1-10">To verify the integrity of the handshake, peers use the hash
        function defined by the selected key exchange method to calculate H:
        </t>
        <t pn="section-5.1-11">H = hash(V_C || V_S || I_C || I_S || K_S || Q_C || Q_S || K).</t>
        <t pn="section-5.1-12">The server uses the GSS_GetMIC() call with H as the payload
        to generate a Message Integrity Code (MIC).

	The GSS_VerifyMIC() call is used by the client to
        verify the MIC.</t>
        <t pn="section-5.1-13">If any GSS_Init_sec_context() or GSS_Accept_sec_context() returns
        a major_status other than GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED, or
        any other GSS-API call returns a major_status other than
        GSS_S_COMPLETE, the key exchange <bcp14>MUST</bcp14> fail. The same recommendations
        expressed in <xref target="RFC4462" sectionFormat="of" section="2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4462#section-2.1" derivedContent="RFC4462"/> are followed with
        regard to error reporting.</t>
        <t pn="section-5.1-14">The following is an overview of the key exchange process:
        </t>
        <artwork name="" type="" align="left" alt="" pn="section-5.1-15">
    Client                                                Server
    ------                                                ------
    Generates ephemeral key pair.
    Calls GSS_Init_sec_context().
    SSH_MSG_KEXGSS_INIT  ---------------&gt;

                                           Verifies received key.
(Optional)                  &lt;------------- SSH_MSG_KEXGSS_HOSTKEY

(Loop)
|                                 Calls GSS_Accept_sec_context().
|                           &lt;------------ SSH_MSG_KEXGSS_CONTINUE
|   Calls GSS_Init_sec_context().
|   SSH_MSG_KEXGSS_CONTINUE ------------&gt;

                                  Calls GSS_Accept_sec_context().
                                    Generates ephemeral key pair.
                                          Computes shared secret.
                                                 Computes hash H.
                                     Calls GSS_GetMIC( H ) = MIC.
                            &lt;------------ SSH_MSG_KEXGSS_COMPLETE

    Verifies received key.
    Computes shared secret.
    Computes hash H.
    Calls GSS_VerifyMIC( MIC, H ).</artwork>
        <t pn="section-5.1-16">This is implemented with the following messages:</t>
        <t pn="section-5.1-17">The client sends:</t>
        <sourcecode markers="false" pn="section-5.1-18">
    byte      SSH_MSG_KEXGSS_INIT
    string    output_token (from GSS_Init_sec_context())
    string    Q_C, client's ephemeral public key octet string
</sourcecode>
        <t pn="section-5.1-19">The server may respond with:</t>
        <sourcecode markers="false" pn="section-5.1-20">
    byte     SSH_MSG_KEXGSS_HOSTKEY
    string   server public host key and certificates (K_S)
</sourcecode>
        <t pn="section-5.1-21">The server sends:</t>
        <sourcecode markers="false" pn="section-5.1-22">
    byte     SSH_MSG_KEXGSS_CONTINUE
    string   output_token (from GSS_Accept_sec_context())
</sourcecode>
        <t pn="section-5.1-23">Each time the client receives the message described above, it makes
   another call to GSS_Init_sec_context().</t>
        <t pn="section-5.1-24">The client sends:</t>
        <sourcecode markers="false" pn="section-5.1-25">
    byte      SSH_MSG_KEXGSS_CONTINUE
    string    output_token (from GSS_Init_sec_context())
</sourcecode>
        <t pn="section-5.1-26">As the final message, the server sends the following if an
	output_token is produced:</t>
        <sourcecode markers="false" pn="section-5.1-27">
    byte      SSH_MSG_KEXGSS_COMPLETE
    string    Q_S, server's ephemeral public key octet string
    string    mic_token (MIC of H)
    boolean   TRUE
    string    output_token (from GSS_Accept_sec_context())
</sourcecode>
        <t pn="section-5.1-28">If no output_token is produced, the server sends:</t>
        <sourcecode markers="false" pn="section-5.1-29">
    byte      SSH_MSG_KEXGSS_COMPLETE
    string    Q_S, server's ephemeral public key octet string
    string    mic_token (MIC of H)
    boolean   FALSE
</sourcecode>
        <t pn="section-5.1-30">The hash H is computed as the HASH hash of the
          concatenation of the following:</t>
        <sourcecode markers="false" pn="section-5.1-31">
    string    V_C, the client's version string (CR, NL excluded)
    string    V_S, server's version string (CR, NL excluded)
    string    I_C, payload of the client's SSH_MSG_KEXINIT
    string    I_S, payload of the server's SSH_MSG_KEXINIT
    string    K_S, server's public host key
    string    Q_C, client's ephemeral public key octet string
    string    Q_S, server's ephemeral public key octet string
    mpint     K,   shared secret
</sourcecode>
        <t pn="section-5.1-32">This value is called the "exchange hash", and it is used to
        authenticate the key exchange. The exchange hash <bcp14>SHOULD</bcp14> be kept
        secret. If no SSH_MSG_KEXGSS_HOSTKEY message has been sent by the
        server or received by the client, then the empty string is used in
        place of K_S when computing the exchange hash.</t>
        <t pn="section-5.1-33">Since this key exchange method does not require the host key to
        be used for any encryption operations, the SSH_MSG_KEXGSS_HOSTKEY
        message is <bcp14>OPTIONAL</bcp14>. If the "null" host key algorithm described in
        <xref target="RFC4462" sectionFormat="of" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4462#section-5" derivedContent="RFC4462"/> is used, this message <bcp14>MUST NOT</bcp14> be sent.</t>
        <t pn="section-5.1-34">If the client receives an SSH_MSG_KEXGSS_CONTINUE message after
        a call to GSS_Init_sec_context() has returned a major_status code
        of GSS_S_COMPLETE, a protocol error has occurred, and the key
        exchange <bcp14>MUST</bcp14> fail.</t>
        <t pn="section-5.1-35">If the client receives an SSH_MSG_KEXGSS_COMPLETE message and a
        call to GSS_Init_sec_context() does not result in a major_status
        code of GSS_S_COMPLETE, a protocol error has occurred, and the key
        exchange <bcp14>MUST</bcp14> fail.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-5.2">
        <name slugifiedName="name-ecdh-key-exchange-methods">ECDH Key Exchange Methods</name>
        <table anchor="ecc_ex_alg" align="center" pn="table-3">
          <name slugifiedName="name-new-key-exchange-methods">New Key Exchange Methods</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Key Exchange Method Name</th>
              <th align="left" colspan="1" rowspan="1">Implementation Recommendations</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">gss-nistp256-sha256-*</td>
              <td align="left" colspan="1" rowspan="1">
                <bcp14>SHOULD</bcp14>/<bcp14>RECOMMENDED</bcp14></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">gss-nistp384-sha384-*</td>
              <td align="left" colspan="1" rowspan="1">
                <bcp14>MAY</bcp14>/<bcp14>OPTIONAL</bcp14></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">gss-nistp521-sha512-*</td>
              <td align="left" colspan="1" rowspan="1">
                <bcp14>MAY</bcp14>/<bcp14>OPTIONAL</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>/<bcp14>RECOMMENDED</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>/<bcp14>OPTIONAL</bcp14></td>
            </tr>
          </tbody>
        </table>
        <t pn="section-5.2-2">Each key exchange method prefix is registered by this document.
        The IESG is the change controller of all these key exchange methods;
        this does NOT imply that the IESG is considered to be in control of
        the corresponding GSS-API mechanism.</t>
        <t pn="section-5.2-3">
        Each method in any family of methods (<xref target="fam_met_ecc" format="default" sectionFormat="of" derivedContent="Table 4"/>)
        specifies GSS-API-authenticated Elliptic Curve Diffie-Hellman key
        exchanges as described in <xref target="gen_gss_ecdh" format="default" sectionFormat="of" derivedContent="Section 5.1"/>. The method name for each method (<xref target="ecc_ex_alg" format="default" sectionFormat="of" derivedContent="Table 3"/>) is the 
        concatenation of the family method name with the base64 encoding of
        the MD5 hash <xref target="RFC1321" format="default" sectionFormat="of" derivedContent="RFC1321"/> of the ASN.1 DER encoding
        <xref target="ISO-IEC-8825-1" format="default" sectionFormat="of" derivedContent="ISO-IEC-8825-1"/> of the corresponding GSS-API
        mechanism's OID. Base64 encoding is described in 
        <xref target="RFC4648" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4648#section-4" derivedContent="RFC4648"/>.</t>
        <table anchor="fam_met_ecc" align="center" pn="table-4">
          <name slugifiedName="name-family-method-references-2">Family Method References</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Family Name Prefix</th>
              <th align="left" colspan="1" rowspan="1">Hash Function</th>
              <th align="left" colspan="1" rowspan="1">Parameters / Function Name</th>
              <th align="left" colspan="1" rowspan="1">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">gss-nistp256-sha256-</td>
              <td align="left" colspan="1" rowspan="1">SHA-256</td>
              <td align="left" colspan="1" rowspan="1">secp256r1</td>
              <td align="left" colspan="1" rowspan="1">Section 2.4.2 of <xref target="SEC2v2" format="default" sectionFormat="of" derivedContent="SEC2v2"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">gss-nistp384-sha384-</td>
              <td align="left" colspan="1" rowspan="1">SHA-384</td>
              <td align="left" colspan="1" rowspan="1">secp384r1</td>
              <td align="left" colspan="1" rowspan="1">Section 2.5.1 of <xref target="SEC2v2" format="default" sectionFormat="of" derivedContent="SEC2v2"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">gss-nistp521-sha512-</td>
              <td align="left" colspan="1" rowspan="1">SHA-512</td>
              <td align="left" colspan="1" rowspan="1">secp521r1</td>
              <td align="left" colspan="1" rowspan="1">Section 2.6.1 of <xref target="SEC2v2" format="default" sectionFormat="of" derivedContent="SEC2v2"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">gss-curve25519-sha256-</td>
              <td align="left" colspan="1" rowspan="1">SHA-256</td>
              <td align="left" colspan="1" rowspan="1">X22519</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC7748" sectionFormat="of" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7748#section-5" derivedContent="RFC7748"/></td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">gss-curve448-sha512-</td>
              <td align="left" colspan="1" rowspan="1">SHA-512</td>
              <td align="left" colspan="1" rowspan="1">X448</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="RFC7748" sectionFormat="of" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7748#section-5" derivedContent="RFC7748"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section numbered="true" toc="include" anchor="sect6" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-deprecated-algorithms">Deprecated Algorithms</name>
      <t pn="section-6-1">Because they have small key lengths and are no longer strong in
      the face of brute-force attacks, the algorithms in the following
      table are considered deprecated and <bcp14>SHOULD NOT</bcp14> be used.</t>
      <table align="center" pn="table-5">
        <name slugifiedName="name-deprecated-algorithms-2">Deprecated Algorithms</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Key Exchange Method Name</th>
            <th align="left" colspan="1" rowspan="1">Implementation Recommendations</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group1-sha1-*</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">
              <bcp14>SHOULD NOT</bcp14></td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-gex-sha1-*</td>
            <td align="left" colspan="1" rowspan="1">
              <bcp14>SHOULD NOT</bcp14></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t pn="section-7-1">This document augments the SSH key exchange message names
      that were defined in <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/> (see and <xref target="sect6" format="default" sectionFormat="of" derivedContent="Section 6"/>); IANA has listed this
      document as reference for those entries in the "SSH Protocol Parameters" <xref target="IANA-KEX-NAMES" format="default" sectionFormat="of" derivedContent="IANA-KEX-NAMES"/> registry.</t>
      <t pn="section-7-2">In addition, IANA has updated the registry to include the SSH key
      exchange message names described in Sections <xref target="sect4" format="counter" sectionFormat="of" derivedContent="4"/> and
      <xref target="sect5" format="counter" sectionFormat="of" derivedContent="5"/>.</t>
      <table align="center" pn="table-6">
        <name slugifiedName="name-additions-changes-to-the-ke">Additions/Changes to the Key Exchange Method Names Registry</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Key Exchange Method Name</th>
            <th align="left" colspan="1" rowspan="1">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group1-sha1-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group14-sha1-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-gex-sha1-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group14-sha256-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group15-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group16-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group17-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-group18-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-nistp256-sha256-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-nistp384-sha384-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-nistp521-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-curve25519-sha256-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">gss-curve448-sha512-*</td>
            <td align="left" colspan="1" rowspan="1">RFC 8732</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-8.1">
        <name slugifiedName="name-new-finite-field-dh-mechani">New Finite Field DH Mechanisms</name>
        <t pn="section-8.1-1">Except for the use of a different secure hash function and larger
        DH groups, no significant changes have been made to the protocol
        described by <xref target="RFC4462" format="default" sectionFormat="of" derivedContent="RFC4462"/>; therefore, all the original
        security considerations apply.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-8.2">
        <name slugifiedName="name-new-elliptic-curve-dh-mecha">New Elliptic Curve DH Mechanisms</name>
        <t pn="section-8.2-1">Although a new cryptographic primitive is used with these methods,
        the actual key exchange closely follows the key exchange defined in
        <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>; therefore, all the original security
        considerations, as well as those expressed in <xref target="RFC5656" format="default" sectionFormat="of" derivedContent="RFC5656"/>,
        apply.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-8.3">
        <name slugifiedName="name-gss-api-delegation">GSS-API Delegation</name>
        <t pn="section-8.3-1">Some GSS-API mechanisms can act on a request to delegate credentials
        to the target host when the deleg_req_flag is set. In this case, extra
        care must be taken to ensure that the acceptor being authenticated
        matches the target the user intended. Some mechanism implementations
        (such as commonly used krb5 libraries) may use insecure DNS resolution to
        canonicalize the target name; in these cases, spoofing a DNS response
        that points to an attacker-controlled machine may result in the user
        silently delegating credentials to the attacker, who can then
        impersonate the user at will.</t>
      </section>
    </section>
  </middle>
  <back>
    <references pn="section-9">
      <name slugifiedName="name-references">References</name>
      <references pn="section-9.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC1321" target="https://www.rfc-editor.org/info/rfc1321" quoteTitle="true" derivedAnchor="RFC1321">
          <front>
            <title>The MD5 Message-Digest Algorithm</title>
            <author initials="R." surname="Rivest" fullname="R. Rivest">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1992" month="April"/>
            <abstract>
              <t>This document describes the MD5 message-digest algorithm. The algorithm takes as input a message of arbitrary length and produces as output a 128-bit "fingerprint" or "message digest" of the input.  This memo provides information for the Internet community.  It does not specify an Internet standard.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1321"/>
          <seriesInfo name="DOI" value="10.17487/RFC1321"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC2743" target="https://www.rfc-editor.org/info/rfc2743" quoteTitle="true" derivedAnchor="RFC2743">
          <front>
            <title>Generic Security Service Application Program Interface Version 2, Update 1</title>
            <author initials="J." surname="Linn" fullname="J. Linn">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2000" month="January"/>
            <abstract>
              <t>This memo obsoletes [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2743"/>
          <seriesInfo name="DOI" value="10.17487/RFC2743"/>
        </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>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="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>The Secure Shell protocol (SSH) is a protocol for secure remote login and other secure network services over an insecure network.</t>
              <t>The Generic Security Service Application Program Interface (GSS-API) provides security services to callers in a mechanism-independent fashion.</t>
              <t>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>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="RFC4648" target="https://www.rfc-editor.org/info/rfc4648" quoteTitle="true" derivedAnchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author initials="S." surname="Josefsson" fullname="S. Josefsson">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="October"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC5656" target="https://www.rfc-editor.org/info/rfc5656" quoteTitle="true" derivedAnchor="RFC5656">
          <front>
            <title>Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer</title>
            <author initials="D." surname="Stebila" fullname="D. Stebila">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Green" fullname="J. Green">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2009" month="December"/>
            <abstract>
              <t>This document describes algorithms based on Elliptic Curve Cryptography (ECC) for use within the Secure Shell (SSH) transport protocol.  In particular, it specifies Elliptic Curve Diffie-Hellman (ECDH) key agreement, Elliptic Curve Menezes-Qu-Vanstone (ECMQV) key agreement, and Elliptic Curve Digital Signature Algorithm (ECDSA) for use in the SSH Transport Layer protocol.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5656"/>
          <seriesInfo name="DOI" value="10.17487/RFC5656"/>
        </reference>
        <reference anchor="RFC7546" target="https://www.rfc-editor.org/info/rfc7546" quoteTitle="true" derivedAnchor="RFC7546">
          <front>
            <title>Structure of the Generic Security Service (GSS) Negotiation Loop</title>
            <author initials="B." surname="Kaduk" fullname="B. Kaduk">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2015" month="May"/>
            <abstract>
              <t>This document specifies the generic structure of the negotiation loop to establish a Generic Security Service (GSS) security context between initiator and acceptor.  The control flow of the loop is indicated for both parties, including error conditions, and indications are given for where application-specific behavior must be specified.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7546"/>
          <seriesInfo name="DOI" value="10.17487/RFC7546"/>
        </reference>
        <reference anchor="RFC7748" target="https://www.rfc-editor.org/info/rfc7748" quoteTitle="true" derivedAnchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author initials="A." surname="Langley" fullname="A. Langley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Hamburg" fullname="M. Hamburg">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Turner" fullname="S. Turner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2016" month="January"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS).  These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="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="Arish Adamantiadis">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S" surname="Josefsson" fullname="Simon Josefsson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Baushke" fullname="Mark D. Baushke">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="February" year="2020"/>
          </front>
          <seriesInfo name="RFC" value="8731"/>
          <seriesInfo name="DOI" value="10.17487/RFC8731"/>
        </reference>
        <reference anchor="SEC1v2" quoteTitle="true" derivedAnchor="SEC1v2">
          <front>
            <title>SEC 1: Elliptic Curve Cryptography</title>
            <seriesInfo name="Version" value="2.0"/>
            <author>
              <organization showOnFrontPage="true">Standards for Efficient Cryptography Group</organization>
            </author>
            <date month="May" year="2009"/>
          </front>
        </reference>
        <reference anchor="SEC2v2" quoteTitle="true" derivedAnchor="SEC2v2">
          <front>
            <title>SEC 2: Recommended Elliptic Curve Domain Parameters</title>
            <seriesInfo name="Version" value="2.0"/>
            <author>
              <organization showOnFrontPage="true">Standards for Elliptic Cryptography Group</organization>
            </author>
            <date month="January" year="2010"/>
          </front>
        </reference>
      </references>
      <references pn="section-9.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="IANA-KEX-NAMES" target="https://www.iana.org/assignments/ssh-parameters/" quoteTitle="true" derivedAnchor="IANA-KEX-NAMES">
          <front>
            <title>Secure Shell (SSH) Protocol Parameters: Key Exchange Method Names</title>
            <author>
              <organization abbrev="IANA" showOnFrontPage="true">IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="ISO-IEC-8825-1" target="http://standards.iso.org/ittf/PubliclyAvailableStandards/c068345_ISO_IEC_8825-1_2015.zip" quoteTitle="true" derivedAnchor="ISO-IEC-8825-1">
          <front>
            <title>Information technology -- ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <seriesInfo name="ISO/IEC" value="8825-1:2015"/>
            <seriesInfo name="ITU-T Recommendation" value="X.690"/>
            <author>
              <organization showOnFrontPage="true">ITU-T</organization>
            </author>
            <date month="November" year="2015"/>
          </front>
        </reference>
        <reference anchor="NIST-SP-800-131Ar2" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-131Ar2.pdf" quoteTitle="true" derivedAnchor="NIST-SP-800-131Ar2">
          <front>
            <title>Transitioning of the Use of Cryptographic Algorithms and Key Lengths</title>
            <seriesInfo name="DOI" value="10.6028/NIST.SP.800-131Ar2"/>
            <seriesInfo name="NIST Special Publication" value="800-131A Revision 2"/>
            <author>
              <organization abbrev="NIST" showOnFrontPage="true">National Institute of Standards and Technology</organization>
            </author>
            <date month="November" year="2015"/>
          </front>
        </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>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>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </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>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>
      </references>
    </references>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Simo Sorce" initials="S." surname="Sorce">
        <organization showOnFrontPage="true">Red Hat, Inc.</organization>
        <address>
          <postal>
            <street>140 Broadway, 24th Floor</street>
            <city>New York</city>
            <region>NY</region>
            <code>10025</code>
            <country>United States of America</country>
          </postal>
          <email>simo@redhat.com</email>
        </address>
      </author>
      <author fullname="Hubert Kario" initials="H." surname="Kario">
        <organization showOnFrontPage="true">Red Hat, Inc.</organization>
        <address>
          <postal>
            <street>Purkynova 115</street>
            <city>Brno</city>
            <code>612 00</code>
            <country>Czech Republic</country>
          </postal>
          <email>hkario@redhat.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
