<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">

<rfc number="8709" consensus="true" xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ietf-curdle-ssh-ed25519-ed448-11" updates="4253" ipr="trust200902" obsoletes="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" version="3">

  <!-- xml2rfc v2v3 conversion 2.35.0 -->
  <front>
    <title abbrev="Ed25519 and Ed448 for SSH">
     Ed25519 and Ed448 Public Key Algorithms for the Secure Shell (SSH) Protocol
    </title>
    <seriesInfo name="RFC" value="8709"/>
    <author initials="B." surname="Harris" fullname="Ben Harris">
      <address>
        <postal>
          <street>2A Eachard Road</street>
          <city>Cambridge</city>
          <code>CB3 0HY</code>
          <country>United Kingdom</country>
        </postal>
        <email>bjh21@bjh21.me.uk</email>
      </address>
    </author>
    <author initials="L." surname="Velvindron" fullname="Loganaden Velvindron">
      <organization> cyberstorm.mu</organization>
      <address>
        <postal>
          <street>88, Avenue De Plevitz</street>
          <city>Roches Brunes</city>
          <country>Mauritius</country>
        </postal>
        <email>logan@cyberstorm.mu</email>
      </address>
    </author>
    <date month="February" year="2020"/>
    <workgroup>curdle</workgroup>
    <abstract>
      <t>
       This document describes the use of the Ed25519 and Ed448 digital
       signature algorithms in the Secure Shell (SSH) protocol. Accordingly,
       this RFC updates RFC 4253.
      </t>
    </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>
      <t>
       Secure Shell (SSH) <xref target="RFC4251" format="default"/> is a secure
       remote-login protocol. It provides for an extensible variety of
       public key algorithms for identifying servers and users to one
       another. Ed25519 <xref target="RFC8032" format="default"/> is a digital
       signature system. OpenSSH 6.5 <xref target="OpenSSH-6.5" format="default"/>
       introduced support for using Ed25519 for server and user
       authentication and was then followed by other SSH implementations. 
      </t>
      <t>
   This document describes the method implemented by OpenSSH and others
   and formalizes the use of the name "ssh-ed25519". Additionally,
   this document describes the use of Ed448 and formalizes the use of the
   name "ssh-ed448".
      </t>
    </section>
    <section numbered="true" toc="default">
      <name>Conventions Used in This Document</name>
      <t>
       The descriptions of key and signature formats use the notation
       introduced in <xref target="RFC4251" sectionFormat="comma"
       section="3"></xref> and the string data type from <xref
       target="RFC4251" 
       sectionFormat="comma" section="5"></xref>. 
      </t>
      <section numbered="true" toc="default">
        <name>Requirements Language</name>
     <t>                                                                                              
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
    NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
    described in BCP&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/>
    when, and only when, they appear in all capitals, as shown here.
     </t>
      </section>
    </section>
    <section numbered="true" toc="default">
      <name>Public Key Algorithm</name>
      <t>
       This document describes a public key algorithm for use with SSH,
       as per <xref target="RFC4253" sectionFormat="comma"
       section="6.6"></xref>. The name of the algorithm is "ssh-ed25519". This 
       algorithm only supports signing and not encryption. 
      </t>
      <t>
      Additionally, this document describes another public key algorithm.
      The name of the algorithm is "ssh-ed448". This algorithm only supports
      signing and not encryption.
      </t>
      <t>
Standard implementations of SSH <bcp14>SHOULD</bcp14> implement these signature algorithms.
      </t>
    </section>
    <section numbered="true" toc="default">
      <name>Public Key Format</name>
      <t>
	 The "ssh-ed25519" key format has the following encoding:
      </t>
      <dl newline="false" spacing="normal" indent="6">
<dt>string</dt>    
<dd>"ssh-ed25519"</dd>

<dt>string</dt>    
<dd>key</dd>
      </dl>
      <t>
       Here, 'key' is the 32-octet public key described in
       <xref target="RFC8032" sectionFormat="comma" section="5.1.5"></xref>.
      </t>
      <t>
	 The "ssh-ed448" key format has the following encoding:
      </t>
      <dl newline="false" spacing="normal" indent="6">
<dt>string</dt>    
<dd>"ssh-ed448"</dd>
<dt>string</dt>    
<dd>key</dd>
      </dl>
      <t>
       Here, 'key' is the 57-octet public key described in
       <xref target="RFC8032" sectionFormat="comma" section="5.2.5"></xref>.
      </t>
    </section>
    <section numbered="true" toc="default">
      <name>Signature Algorithm</name>
      <t>
       Signatures are generated according to the procedure in Sections
       <xref target="RFC8032" sectionFormat="bare" section="5.1.6"/> and <xref
       target="RFC8032" sectionFormat="bare" section="5.2.6"/> of <xref target="RFC8032"/>. 
      </t>
    </section>
    <section numbered="true" toc="default">
      <name>Signature Format</name>
      <t>
	 The "ssh-ed25519" key format has the following encoding:
      </t>
      <dl newline="false" spacing="normal" indent="6">
<dt>string</dt>    
<dd>"ssh-ed25519"</dd>
<dt>string</dt>    
<dd>signature</dd>
      </dl>
      <t>
       Here, 'signature' is the 64-octet signature produced in
       accordance with <xref target="RFC8032" sectionFormat="comma" section="5.1.6"></xref>.
      </t>
      <t>
	 The "ssh-ed448" key format has the following encoding:
      </t>
      <dl newline="false" spacing="normal" indent="6">
<dt>string</dt>    
<dd>"ssh-ed448"</dd>
<dt>string</dt>    
<dd>signature</dd>
       </dl>
      <t>
       Here, 'signature' is the 114-octet signature produced in
       accordance with <xref target="RFC8032" sectionFormat="comma" section="5.2.6"></xref>.
      </t>
    </section>
    <section numbered="true" toc="default">
      <name>Verification Algorithm</name>
      <t>
       Ed25519 signatures are verified according to the procedure in
       <xref target="RFC8032" sectionFormat="comma" section="5.1.7"></xref>.
      </t>
      <t>
       Ed448 signatures are verified according to the procedure in
       <xref target="RFC8032" sectionFormat="comma" section="5.2.7"></xref>.
      </t>
    </section>
    <section numbered="true" toc="default">
      <name>SSHFP DNS Resource Records</name>
      <t>
Usage and generation of the SSHFP DNS resource record
is described in <xref target="RFC4255" format="default"/>.  
The generation of SSHFP resource records for "ssh-ed25519" keys is described
in <xref target="RFC7479" format="default"> </xref>.  
This section illustrates the generation of SSHFP resource records for "ssh-ed448" keys, and 
this document also specifies the corresponding Ed448 code point to "SSHFP RR
Types for public key algorithms" in the "DNS SSHFP Resource Record Parameters"
IANA registry <xref target="IANA-SSHFP" format="default"/>. 
      </t>

      <t>
       The generation of SSHFP resource records for "ssh-ed448" keys
       is described as follows.
      </t>
      <t>
The encoding of Ed448 public keys is described in <xref target="ED448"
format="default"/>. In brief,
an Ed448 public key is a 57-octet value representing a 455-bit y-coordinate
of an elliptic curve point, and a sign bit indicating the corresponding 
x-coordinate.
</t>
      <t>
The SSHFP Resource Record for the Ed448 public key with SHA-256 fingerprint
would, for example, be:
</t>
<artwork>
example.com. IN SSHFP 6 2 ( a87f1b687ac0e57d2a081a2f2826723
                            34d90ed316d2b818ca9580ea384d924
                            01 )
</artwork>
      <t>
The '2' here indicates SHA-256 <xref target="RFC6594" format="default"/>.
</t>
    </section>
    <section numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t> This document augments the Public Key Algorithm Names in <xref
      target="RFC4250" sectionFormat="comma" section="4.11.3"></xref>. 
      </t>
      <t>
       IANA has added the following entry to "Public Key Algorithm Names" in the
       "Secure Shell (SSH) Protocol Parameters"
       registry <xref target="IANA-SSH" format="default"/>:
      </t>
      <table align="center">
        <thead>
          <tr>
            <th align="left">Public Key Algorithm Name</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">ssh-ed25519</td>
            <td align="left">RFC 8709</td>
          </tr>
          <tr>
            <td align="left">ssh-ed448</td>
            <td align="left">RFC 8709</td>
          </tr>
        </tbody>
      </table>
      <t>
IANA has added the following entry to "SSHFP RR Types for public
   key algorithms" in the "DNS SSHFP Resource Record Parameters" registry
   <xref target="IANA-SSHFP" format="default"/>: 
      </t>
<table align="center"> 
  <thead>
    <tr>
      <th align="left">Value</th> 
      <th align="left">Description</th>
      <th align="left">Reference</th>
    </tr>
  </thead>
  <tbody>  
    <tr>
      <td align="left">6</td>
      <td align="left">Ed448</td>
      <td align="left">RFC 8709</td>
    </tr>
  </tbody>
</table>   

    </section>
    <section numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
       The security considerations in <xref target="RFC4251"
       sectionFormat="comma" section="9"></xref> apply to all SSH
       implementations, including those using Ed25519 and Ed448.
      </t>
      <t>
       The security considerations in <xref target="RFC8032"
       sectionFormat="comma" section="8"></xref> and <xref target="RFC7479"
       sectionFormat="comma" section="3"> </xref>  apply to all uses of
       Ed25519 and Ed448, including those in SSH.
      </t>
    </section>

  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4250.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4251.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4253.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4255.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6594.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8032.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="IANA-SSH" target="https://www.iana.org/assignments/ssh-parameters">
          <front>
            <title>Secure Shell (SSH) Protocol Parameters</title>
            <author>
              <organization>IANA
              </organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA-SSHFP" target="https://www.iana.org/assignments/dns-sshfp-rr-parameters">
          <front>
            <title>DNS SSHFP Resource Record Parameters</title>
            <author>
              <organization>IANA
              </organization>
            </author>
          </front>
        </reference>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7479.xml"/>
        <reference anchor="OpenSSH-6.5" target="http://www.openssh.com/txt/release-6.5">
          <front>
            <title>OpenSSH 6.5 release notes</title>
            <author surname="Friedl" initials="M." fullname="Marcus Friedl"/>
            <author surname="Provos" initials="N." fullname="Niels Provos"/>
            <author surname="de Raadt" initials="T." fullname="Theo de Raadt"/>
            <author surname="Steves" initials="K." fullname="Kevin Steves"/>
            <author surname="Miller" initials="D." fullname="Damien Miller"/>
            <author surname="Tucker" initials="D." fullname="Darren Tucker"/>
            <author surname="McIntyre" initials="J." fullname="Jason McIntyre"/>
            <author surname="Rice" initials="T." fullname="Tim Rice"/>
            <author surname="Lindstrom" initials="B." fullname="Ben Lindstrom"/>
            <date month="January" year="2014"/>
          </front>
        </reference>
        <reference anchor="ED448" target="https://eprint.iacr.org/2015/625.pdf">
          <front>
            <title> Ed448-Goldilocks, a new elliptic curve</title>
            <author surname="Hamburg" initials="M." fullname="Mike Hamburg"/>
            <date month="January" year="2015"/>
          </front>
        </reference>
      </references>
    </references>
    <section numbered="false" toc="default">
      <name>Acknowledgements</name>
      <t>
       The OpenSSH implementation of Ed25519 in SSH was written by 
<contact fullname="Markus Friedl"/>. We are also grateful to <contact
fullname="Mark Baushke"/>, <contact fullname="Benjamin Kaduk"/>, and
<contact fullname="Daniel Migault"/> for their comments. 
      </t>
    </section>
  </back>
</rfc>
