Internet DRAFT - draft-rransom-secsh-client-ntru-kex

draft-rransom-secsh-client-ntru-kex







Network Working Group                                          R. Ransom
Internet-Draft                                           6 December 2022
Intended status: Informational                                          
Expires: 9 June 2023


          Client-Side NTRU Key Exchange for Secure Shell (SSH)
                 draft-rransom-secsh-client-ntru-kex-00

Abstract

   This document describes the specification for using NTRU keypairs
   generated by the client for key exchange in the Secure Shell (SSH)
   protocol.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on 9 June 2023.

Copyright Notice

   Copyright (c) 2022 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents (https://trustee.ietf.org/
   license-info) 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.









Ransom                     Expires 9 June 2023                  [Page 1]

Internet-Draft    Client-Side NTRU Key Exchange for SSH    December 2022


Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Notation  . . . . . . . . . . . . . . . . . . . . . . . . . .   2
   3.  Key exchange methods  . . . . . . . . . . . . . . . . . . . .   2
   4.  Security considerations . . . . . . . . . . . . . . . . . . .   4
   5.  IANA considerations . . . . . . . . . . . . . . . . . . . . .   4
   6.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   4
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   5

1.  Introduction

   The Secure Shell (SSH) transport layer protocol specified in
   [RFC4253] provides for extension to support new key exchange methods.
   This document specifies key exchange methods which provide post-
   quantum security based on the NTRU KEM [NTRU].

   For ease of implementation in existing SSH software, this key
   exchange method uses an ephemeral NTRU keypair generated by the
   client, retains the same structure and pattern of messages as the
   existing Diffie-Hellman and ECDH [RFC5656][RFC8731] key exchange
   methods, and relies on a signature keypair to authenticate the
   server.

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

2.  Notation

   In this document, the concatenation of two strings a and b will be
   denoted a || b.

3.  Key exchange methods

   The key exchange procedure follows the same general pattern as the
   ECDH key exchange specified in section 4 of [RFC5656], and uses the
   same message numbers; however, the contents differ, and the key
   exchange is not symmetric as in ECDH.

   Each key exchange method name specifies both an NTRU parameter set
   and a hash function.  NTRU operations Key_Pair, Encapsulate, and
   Decapsulate are performed as in [NTRU] for the given parameter set,
   except that its Hash is replaced with the hash function specified for
   the key exchange method.  The kem_public_key_bytes and
   kem_ciphertext_bytes constants are also as specified in [NTRU] for
   the given parameter set.




Ransom                     Expires 9 June 2023                  [Page 2]

Internet-Draft    Client-Side NTRU Key Exchange for SSH    December 2022


   Let hash_bytes denote the length of the hash function's output.

   The client generates a private key priv and a public key pub by
   applying Key_Pair to the output of a random number generator.  This
   key may be stored by the client and used for more than one
   connection.  Each priv and pub MUST only be used with a single hash
   function.

   For each connection, the client generates a new random string nonce
   of length hash_bytes. nonce MUST NOT be reused.

   The client sends the following:

                    +--------+-----------------------+
                    | byte   | SSH_MSG_KEX_ECDH_INIT |
                    +--------+-----------------------+
                    | string | pub || nonce          |
                    +--------+-----------------------+

                                 Table 1

   Both pub and nonce have fixed length for each key exchange method, so
   the string pub || nonce can be uniquely parsed into pub and nonce by
   the server.  The server applies Encapsulate to pub, to produce a
   shared secret key sk and a ciphertext ct.

   The server responds with:

                    +--------+------------------------+
                    | byte   | SSH_MSG_KEX_ECDH_REPLY |
                    +--------+------------------------+
                    | string | ct                     |
                    +--------+------------------------+

                                  Table 2

   The client applies Decapsulate to priv and ct, to recover sk.

   Let pad denote the string containing the single byte 1.  Both parties
   compute K' as pad || Hash(sk || nonce), and compute K by interpreting
   K' as a big-endian integer.  Equivalently, the mpint K specified by
   section 7.2 of the SSH transport layer protocol [RFC4253] as the
   secret output of a key exchange method can be replaced with the
   string K'.

   The exchange hash H is computed as in section 4 of [RFC5656], with
   Q_C = pub || nonce and Q_S = ct.




Ransom                     Expires 9 June 2023                  [Page 3]

Internet-Draft    Client-Side NTRU Key Exchange for SSH    December 2022


4.  Security considerations

   The exchange hash H is computed using the hash algorithm specified by
   the key exchange method.  This limits the security of authentication
   in both directions to the second-preimage resistance of the hash
   function specified by the weakest KEX accepted by both parties.

   Reuse of an NTRU keypair for more than one Decapsulate operation is
   intended and believed to be safe, and the nonce sent by the client is
   used to prevent a replay of the server's ciphertext from producing
   the same exchange hash H or shared secret K.  However, reusing a
   keypair discloses that multiple connections originated from the same
   client.  Clients which support reuse of NTRU keypairs MUST document
   this key reuse, and SHOULD provide a way to disable it.

   Section 7.2 of [RFC4253] specifies that the shared secret K is to be
   encoded as an mpint, in which bytes must be removed or added at the
   beginning to ensure certain conditions on the leading byte.  As
   section 4 of [RFC8731] points out, this is likely to introduce a
   side-channel attack.  This key exchange method prepends a fixed non-
   zero padding byte, to eliminate that side-channel risk without
   requiring extensive reworking of implementations which internally
   handle K as an mpint.

5.  IANA considerations

   This document specifies the following names to be added to the "Key
   Exchange Method Names" registry for SSH [IANA-KEX], as follows:

    +================================+===============+================+
    | Key exchange method name       | Hash function | NTRU parameter |
    |                                |               | set            |
    +================================+===============+================+
    | client-ntruhps4096821-sha3-512 | SHA3-512      | ntruhps4096821 |
    +--------------------------------+---------------+----------------+
    | client-ntruhps4096821-sha256   | SHA-256       | ntruhps4096821 |
    +--------------------------------+---------------+----------------+

                     Table 3: Key exchange method names

6.  References

   [RFC4253]  Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
              Transport Layer Protocol", RFC 4253, January 2006,
              <https://www.rfc-editor.org/info/rfc4253>.






Ransom                     Expires 9 June 2023                  [Page 4]

Internet-Draft    Client-Side NTRU Key Exchange for SSH    December 2022


   [NTRU]     Chen, C., Danba, O., Hoffstein, J., Hülsing, A.,
              Rijneveld, J., Schanck, J. M., Schwabe, P., Whyte, W., and
              Z. Zhang, "NTRU - Algorithm Specifications and Supporting
              Documentation", NIST Post-Quantum Cryptography project
              submission document, 30 March 2019.

   [RFC5656]  Stebila, D. and J. Green, "Elliptic Curve Algorithm
              Integration in the Secure Shell Transport Layer",
              RFC 5656, December 2009,
              <https://www.rfc-editor.org/info/rfc5656>.

   [RFC8731]  Adamantiadis, A., Josefsson, S., and M. Baushke, "Secure
              Shell (SSH) Key Exchange Method Using Curve25519 and
              Curve448", RFC 8731, February 2020,
              <https://www.rfc-editor.org/info/rfc8731>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", RFC 2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [IANA-KEX] IANA, "Secure Shell (SSH) Protocol Parameters: Key
              Exchange Method Names",
              <https://www.iana.org/assignments/ssh-parameters/>.

Author's Address

   Robert Ransom
























Ransom                     Expires 9 June 2023                  [Page 5]