diff options
Diffstat (limited to 'doc/rfc/rfc9212.txt')
| -rw-r--r-- | doc/rfc/rfc9212.txt | 516 | 
1 files changed, 516 insertions, 0 deletions
diff --git a/doc/rfc/rfc9212.txt b/doc/rfc/rfc9212.txt new file mode 100644 index 0000000..c8c4ccd --- /dev/null +++ b/doc/rfc/rfc9212.txt @@ -0,0 +1,516 @@ + + + + +Independent Submission                                      N. Gajcowski +Request for Comments: 9212                                    M. Jenkins +Category: Informational                                              NSA +ISSN: 2070-1721                                               March 2022 + + +  Commercial National Security Algorithm (CNSA) Suite Cryptography for +                           Secure Shell (SSH) + +Abstract + +   The United States Government has published the National Security +   Agency (NSA) Commercial National Security Algorithm (CNSA) Suite, +   which defines cryptographic algorithm policy for national security +   applications.  This document specifies the conventions for using the +   United States National Security Agency's CNSA Suite algorithms with +   the Secure Shell Transport Layer Protocol and the Secure Shell +   Authentication Protocol.  It applies to the capabilities, +   configuration, and operation of all components of US National +   Security Systems (described in NIST Special Publication 800-59) that +   employ Secure Shell (SSH).  This document is also appropriate for all +   other US Government systems that process high-value information.  It +   is made publicly available for use by developers and operators of +   these and any other system deployments. + +Status of This Memo + +   This document is not an Internet Standards Track specification; it is +   published for informational purposes. + +   This is a contribution to the RFC Series, independently of any other +   RFC stream.  The RFC Editor has chosen to publish this document at +   its discretion and makes no statement about its value for +   implementation or deployment.  Documents approved for publication by +   the RFC Editor are not candidates for any level of Internet Standard; +   see Section 2 of RFC 7841. + +   Information about the current status of this document, any errata, +   and how to provide feedback on it may be obtained at +   https://www.rfc-editor.org/info/rfc9212. + +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. + +Table of Contents + +   1.  Introduction +   2.  Terminology +   3.  The Commercial National Security Algorithm Suite +   4.  CNSA and Secure Shell +   5.  Security Mechanism Negotiation and Initialization +   6.  Key Exchange +     6.1.  ECDH Key Exchange +     6.2.  DH Key Exchange +   7.  Authentication +     7.1.  Server Authentication +     7.2.  User Authentication +   8.  Confidentiality and Data Integrity of SSH Binary Packets +     8.1.  Galois/Counter Mode +     8.2.  Data Integrity +   9.  Rekeying +   10. Security Considerations +   11. IANA Considerations +   12. References +     12.1.  Normative References +     12.2.  Informative References +   Authors' Addresses + +1.  Introduction + +   This document specifies conventions for using the United States +   National Security Agency's CNSA Suite algorithms [CNSA] with the +   Secure Shell Transport Layer Protocol [RFC4253] and the Secure Shell +   Authentication Protocol [RFC4252].  It applies to the capabilities, +   configuration, and operation of all components of US National +   Security Systems (described in NIST Special Publication 800-59 +   [SP80059]) that employ SSH.  This document is also appropriate for +   all other US Government systems that process high-value information. +   It is made publicly available for use by developers and operators of +   these and any other system deployments. + +2.  Terminology + +   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", +   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and +   "OPTIONAL" in this document are to be interpreted as described in +   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all +   capitals, as shown here. + +3.  The Commercial National Security Algorithm Suite + +   The NSA profiles commercial cryptographic algorithms and protocols as +   part of its mission to support secure, interoperable communications +   for US Government National Security Systems.  To this end, it +   publishes guidance both to assist with the US Government's transition +   to new algorithms and to provide vendors -- and the Internet +   community in general -- with information concerning their proper use +   and configuration. + +   Recently, cryptographic transition plans have become overshadowed by +   the prospect of the development of a cryptographically relevant +   quantum computer.  The NSA has established the Commercial National +   Security Algorithm (CNSA) Suite to provide vendors and IT users near- +   term flexibility in meeting their information assurance +   interoperability requirements using current cryptography.  The +   purpose behind this flexibility is to avoid vendors and customers +   making two major transitions (i.e., to elliptic curve cryptography +   and then to post-quantum cryptography) in a relatively short +   timeframe, as we anticipate a need to shift to quantum-resistant +   cryptography in the near future. + +   The NSA is authoring a set of RFCs, including this one, to provide +   updated guidance concerning the use of certain commonly available +   commercial algorithms in IETF protocols.  These RFCs can be used in +   conjunction with other RFCs and cryptographic guidance (e.g., NIST +   Special Publications) to properly protect Internet traffic and data- +   at-rest for US Government National Security Systems. + +4.  CNSA and Secure Shell + +   Several RFCs have documented how each of the CNSA components are to +   be integrated into Secure Shell (SSH): + +   kex algorithms: + +   *  ecdh-sha2-nistp384 [RFC5656] + +   *  diffie-hellman-group15-sha512 [RFC8268] + +   *  diffie-hellman-group16-sha512 [RFC8268] + +   public key algorithms: + +   *  ecdsa-sha2-nistp384 [RFC5656] + +   *  rsa-sha2-512 [RFC8332] + +   encryption algorithms (both client_to_server and server_to_client): + +   *  AEAD_AES_256_GCM [RFC5647] + +   message authentication code (MAC) algorithms (both client_to_server +   and server_to_client): + +   *  AEAD_AES_256_GCM [RFC5647] + +   While the approved CNSA hash function for all purposes is SHA-384, as +   defined in [FIPS180], commercial products are more likely to +   incorporate the kex algorithms and public key algorithms based on +   SHA-512 (sha2-512), which are defined in [RFC8268] and [RFC8332]. +   Therefore, the SHA-384-based kex and public key algorithms SHOULD be +   used; SHA-512-based algorithms MAY be used.  Any hash algorithm other +   than SHA-384 or SHA-512 MUST NOT be used. + +   Use of the Advanced Encryption Standard in Galois/Counter Mode (AES- +   GCM) shall meet the requirements set forth in [SP800-38D], with the +   additional requirements that all 16 octets of the authentication tag +   MUST be used as the SSH data integrity value and that AES is used +   with a 256-bit key.  Use of AES-GCM in SSH should be done as +   described in [RFC5647], with the exception that AES-GCM need not be +   listed as the MAC algorithm when its use is implicit (such as done in +   aes256-gcm@openssh.com).  In addition, [RFC5647] fails to specify +   that the AES-GCM invocation counter is incremented mod 2^64.  CNSA +   implementations MUST ensure the counter never repeats and is properly +   incremented after processing a binary packet: + +      invocation_counter = invocation_counter + 1 mod 2^64. + +   The purpose of this document is to draw upon all of these documents +   to provide guidance for CNSA-compliant implementations of Secure +   Shell.  Algorithms specified in this document may be different from +   mandatory-to-implement algorithms; where this occurs, the latter will +   be present but not used.  Note that, while compliant Secure Shell +   implementations MUST follow the guidance in this document, that +   requirement does not in and of itself imply that a given +   implementation of Secure Shell is suitable for use national security +   systems.  An implementation must be validated by the appropriate +   authority before such usage is permitted. + +5.  Security Mechanism Negotiation and Initialization + +   As described in Section 7.1 of [RFC4253], the exchange of +   SSH_MSG_KEXINIT between the server and the client establishes which +   key agreement algorithm, MAC algorithm, host key algorithm (server +   authentication algorithm), and encryption algorithm are to be used. +   This section specifies the use of CNSA components in the Secure Shell +   algorithm negotiation, key agreement, server authentication, and user +   authentication. + +   The choice of all but the user authentication methods is determined +   by the exchange of SSH_MSG_KEXINIT between the client and the server. + +   The kex_algorithms name-list is used to negotiate a single key +   agreement algorithm between the server and client in accordance with +   the guidance given in Section 4.  While [RFC9142] establishes general +   guidance on the capabilities of SSH implementations and requires +   support for "diffie-hellman-group14-sha256", it MUST NOT be used. +   The result MUST be one of the following kex_algorithms, or the +   connection MUST be terminated: + +   *  ecdh-sha2-nistp384 [RFC5656] + +   *  diffie-hellman-group15-sha512 [RFC8268] + +   *  diffie-hellman-group16-sha512 [RFC8268] + +   One of the following sets MUST be used for the encryption_algorithms +   and mac_algorithms name-lists.  Either set MAY be used for each +   direction (i.e., client_to_server or server_to_client), but the +   result must be the same (i.e., use of AEAD_AES_256_GCM). + +      encryption_algorithm_name_list := { AEAD_AES_256_GCM } + +      mac_algorithm_name_list := { AEAD_AES_256_GCM } + +   or + +      encryption_algorithm_name_list := { aes256-gcm@openssh.com } + +      mac_algorithm_name_list := {} + +   One of the following public key algorithms MUST be used: + +   *  rsa-sha2-512 [RFC8332] + +   *  ecdsa-sha2-nistp384 [RFC5656] + +   The procedures for applying the negotiated algorithms are given in +   the following sections. + +6.  Key Exchange + +   The key exchange to be used is determined by the name-lists exchanged +   in the SSH_MSG_KEXINIT packets, as described above.  Either Elliptic +   Curve Diffie-Hellman (ECDH) or Diffie-Hellman (DH) MUST be used to +   establish a shared secret value between the client and the server. + +   A compliant system MUST NOT allow the reuse of ephemeral/exchange +   values in a key exchange algorithm due to security concerns related +   to this practice.  Section 5.6.3.3 of [SP80056A] states that an +   ephemeral private key shall be used in exactly one key establishment +   transaction and shall be destroyed (zeroized) as soon as possible. +   Section 5.8 of [SP80056A] states that such shared secrets shall be +   destroyed (zeroized) immediately after its use.  CNSA-compliant +   systems MUST follow these mandates. + +6.1.  ECDH Key Exchange + +   The key exchange begins with the SSH_MSG_KEXECDH_INIT message that +   contains the client's ephemeral public key used to generate a shared +   secret value. + +   The server responds to an SSH_MSG_KEXECDH_INIT message with an +   SSH_MSG_KEXECDH_REPLY message that contains the server's ephemeral +   public key, the server's public host key, and a signature of the +   exchange hash value formed from the newly established shared secret +   value.  The kex algorithm MUST be ecdh-sha2-nistp384, and the public +   key algorithm MUST be either ecdsa-sha2-nistp384 or rsa-sha2-512. + +6.2.  DH Key Exchange + +   The key exchange begins with the SSH_MSG_KEXDH_INIT message that +   contains the client's DH exchange value used to generate a shared +   secret value. + +   The server responds to an SSH_MSG_KEXDH_INIT message with an +   SSH_MSG_KEXDH_REPLY message that contains the server's DH exchange +   value, the server's public host key, and a signature of the exchange +   hash value formed from the newly established shared secret value. +   The kex algorithm MUST be one of diffie-hellman-group15-sha512 or +   diffie-hellman-group16-sha512, and the public key algorithm MUST be +   either ecdsa-sha2-nistp384 or rsa-sha2-512. + +7.  Authentication + +7.1.  Server Authentication + +   A signature on the exchange hash value derived from the newly +   established shared secret value is used to authenticate the server to +   the client.  Servers MUST be authenticated using digital signatures. +   The public key algorithm implemented MUST be ecdsa-sha2-nistp384 or +   rsa-sha2-512.  The RSA public key modulus MUST be 3072 or 4096 bits +   in size; clients MUST NOT accept RSA signatures from a public key +   modulus of any other size. + +   The following public key algorithms MUST be used: + +   *  ecdsa-sha2-nistp384 [RFC5656] + +   *  rsa-sha2-512 [RFC8332] + +   The client MUST verify that the presented key is a valid +   authenticator for the server before verifying the server signature. +   If possible, validation SHOULD be done using certificates. +   Otherwise, the client MUST validate the presented public key through +   some other secure, possibly off-line mechanism.  Implementations MUST +   NOT employ a "Trust on First Use (TOFU)" security model where a +   client accepts the first public host key presented to it from a not- +   yet-verified server.  Use of a TOFU model would allow an intermediate +   adversary to present itself to the client as the server. + +   Where X.509 v3 Certificates are used, their use MUST comply with +   [RFC8603]. + +7.2.  User Authentication + +   The Secure Shell Transport Layer Protocol authenticates the server to +   the host but does not authenticate the user (or the user's host) to +   the server.  All users MUST be authenticated, MUST follow [RFC4252], +   and SHOULD be authenticated using a public key method.  Users MAY +   authenticate using passwords.  Other methods of authentication MUST +   not be used, including "none". + +   When authenticating with public key, the following public key +   algorithms MUST be used: + +   *  ecdsa-sha2-nistp384 [RFC5656] + +   *  rsa-sha2-512 [RFC8332] + +   The server MUST verify that the public key is a valid authenticator +   for the user.  If possible, validation SHOULD be done using +   certificates.  Otherwise, the server must validate the public key +   through another secure, possibly off-line mechanism. + +   Where X.509 v3 Certificates are used, their use MUST comply with +   [RFC8603]. + +   If authenticating with RSA, the client's public key modulus MUST be +   3072 or 4096 bits in size, and the server MUST NOT accept signatures +   from an RSA public key modulus of any other size. + +   To facilitate client authentication with RSA using SHA-512, clients +   and servers SHOULD implement the server-sig-algs extension, as +   specified in [RFC8308].  In that case, in the SSH_MSG_KEXINIT, the +   client SHALL include the indicator ext-info-c to the kex_algorithms +   field, and the server SHOULD respond with an SSH_MSG_EXT_INFO message +   containing the server-sig-algs extension.  The server MUST list only +   ecdsa-sha2-nistp384 and/or rsa-sha2-512 as the acceptable public key +   algorithms in this response. + +   If authenticating by passwords, it is essential that passwords have +   sufficient entropy to protect against dictionary attacks.  During +   authentication, the password MUST be protected in the established +   encrypted communications channel.  Additional guidelines are provided +   in [SP80063]. + +8.  Confidentiality and Data Integrity of SSH Binary Packets + +   Secure Shell transfers data between the client and the server using +   its own binary packet structure.  The SSH binary packet structure is +   independent of any packet structure on the underlying data channel. +   The contents of each binary packet and portions of the header are +   encrypted, and each packet is authenticated with its own message +   authentication code.  Use of AES-GCM will both encrypt the packet and +   form a 16-octet authentication tag to ensure data integrity. + +8.1.  Galois/Counter Mode + +   Use of AES-GCM in Secure Shell is described in [RFC5647].  CNSA- +   complaint SSH implementations MUST support AES-GCM (negotiated as +   AEAD_AES_GCM_256 or aes256-gcm@openssh; see Section 5) to provide +   confidentiality and ensure data integrity.  No other confidentiality +   or data integrity algorithms are permitted. + +   The AES-GCM invocation counter is incremented mod 2^64.  That is, +   after processing a binary packet: + +      invocation_counter = invocation_counter + 1 mod 2^64 + +   The invocation counter MUST NOT repeat a counter value. + +8.2.  Data Integrity + +   As specified in [RFC5647], all 16 octets of the authentication tag +   MUST be used as the SSH data integrity value of the SSH binary +   packet. + +9.  Rekeying + +   Section 9 of [RFC4253] allows either the server or the client to +   initiate a "key re-exchange ... by sending an SSH_MSG_KEXINIT packet" +   and to "change some or all of the [cipher] algorithms during the re- +   exchange".  This specification requires the same cipher suite to be +   employed when rekeying; that is, the cipher algorithms MUST NOT be +   changed when a rekey occurs. + +10.  Security Considerations + +   The security considerations of [RFC4251], [RFC4252], [RFC4253], +   [RFC5647], and [RFC5656] apply. + +11.  IANA Considerations + +   This document has no IANA actions. + +12.  References + +12.1.  Normative References + +   [CNSA]     Committee for National Security Systems, "Use of Public +              Standards for Secure Information Sharing", CNSSP 15, +              October 2016, +              <https://www.cnss.gov/CNSS/Issuances/Policies.cfm>. + +   [FIPS180]  National Institute of Standards and Technology, "Secure +              Hash Standard (SHS)", FIPS PUB 180-4, +              DOI 10.6028/NIST.FIPS.180-4, August 2015, +              <https://doi.org/10.6028/NIST.FIPS.180-4>. + +   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate +              Requirement Levels", BCP 14, RFC 2119, +              DOI 10.17487/RFC2119, March 1997, +              <https://www.rfc-editor.org/info/rfc2119>. + +   [RFC4251]  Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) +              Protocol Architecture", RFC 4251, DOI 10.17487/RFC4251, +              January 2006, <https://www.rfc-editor.org/info/rfc4251>. + +   [RFC4252]  Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) +              Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252, +              January 2006, <https://www.rfc-editor.org/info/rfc4252>. + +   [RFC4253]  Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) +              Transport Layer Protocol", RFC 4253, DOI 10.17487/RFC4253, +              January 2006, <https://www.rfc-editor.org/info/rfc4253>. + +   [RFC5647]  Igoe, K. and J. Solinas, "AES Galois Counter Mode for the +              Secure Shell Transport Layer Protocol", RFC 5647, +              DOI 10.17487/RFC5647, August 2009, +              <https://www.rfc-editor.org/info/rfc5647>. + +   [RFC5656]  Stebila, D. and J. Green, "Elliptic Curve Algorithm +              Integration in the Secure Shell Transport Layer", +              RFC 5656, DOI 10.17487/RFC5656, December 2009, +              <https://www.rfc-editor.org/info/rfc5656>. + +   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC +              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, +              May 2017, <https://www.rfc-editor.org/info/rfc8174>. + +   [RFC8268]  Baushke, M., "More Modular Exponentiation (MODP) Diffie- +              Hellman (DH) Key Exchange (KEX) Groups for Secure Shell +              (SSH)", RFC 8268, DOI 10.17487/RFC8268, December 2017, +              <https://www.rfc-editor.org/info/rfc8268>. + +   [RFC8308]  Bider, D., "Extension Negotiation in the Secure Shell +              (SSH) Protocol", RFC 8308, DOI 10.17487/RFC8308, March +              2018, <https://www.rfc-editor.org/info/rfc8308>. + +   [RFC8332]  Bider, D., "Use of RSA Keys with SHA-256 and SHA-512 in +              the Secure Shell (SSH) Protocol", RFC 8332, +              DOI 10.17487/RFC8332, March 2018, +              <https://www.rfc-editor.org/info/rfc8332>. + +   [RFC8603]  Jenkins, M. and L. Zieglar, "Commercial National Security +              Algorithm (CNSA) Suite Certificate and Certificate +              Revocation List (CRL) Profile", RFC 8603, +              DOI 10.17487/RFC8603, May 2019, +              <https://www.rfc-editor.org/info/rfc8603>. + +12.2.  Informative References + +   [RFC9142]  Baushke, M., "Key Exchange (KEX) Method Updates and +              Recommendations for Secure Shell (SSH)", RFC 9142, +              DOI 10.17487/RFC9142, January 2022, +              <https://www.rfc-editor.org/info/rfc9142>. + +   [SP800-38D] +              National Institute of Standards and Technology, +              "Recommendation for Block Cipher Modes of Operation: +              Galois/Counter Mode (GCM) and GMAC", NIST Special +              Publication 800-38D, DOI 10.6028/NIST.SP.800-38D, November +              2007, <https://doi.org/10.6028/NIST.SP.800-38D>. + +   [SP80056A] National Institute of Standards and Technology, +              "Recommendation for Pair-Wise Key Establishment Schemes +              Using Discrete Logarithm Cryptography", Revision 3, NIST +              Special Publication 800-56A, +              DOI 10.6028/NIST.SP.800-56Ar3, April 2018, +              <https://doi.org/10.6028/NIST.SP.800-56Ar3>. + +   [SP80059]  National Institute of Standards and Technology, "Guideline +              for Identifying an Information System as a National +              Security System", NIST Special Publication 800-59, +              DOI 10.6028/NIST.SP.800-59, August 2003, +              <https://doi.org/10.6028/NIST.SP.800-59>. + +   [SP80063]  National Institute of Standards and Technology, "Digital +              Identity Guidelines", NIST Special Publication 800-63-3, +              DOI 10.6028/NIST.SP.800-63-3, June 2017, +              <https://doi.org/10.6028/NIST.SP.800-63-3>. + +Authors' Addresses + +   Nicholas Gajcowski +   National Security Agency +   Email: nhgajco@uwe.nsa.gov + + +   Michael Jenkins +   National Security Agency +   Email: mjjenki@cyber.nsa.gov  |