RFC 8731 Curve25519/448 for SSH February 2020
Adamantiadis, et al. Standards Track [Page]
溪流:
互联网工程任务组 (IETF)
RFC:
8731
类别:
标准轨道
发表:
国际刊号:
2070-1721
作者:
A.阿达曼蒂亚迪斯
libssh
S·约瑟夫森
SJD公司
M·鲍什克
瞻博网络公司

RFC 8731

使用 Curve25519 和 Curve448 的 Secure Shell (SSH) 密钥交换方法

摘要

本文档描述了在 Secure Shell (SSH) 协议中使用 Curve25519 和 Curve448 密钥交换方法的规范。

本备忘录的状态

这是一份互联网标准跟踪文档。

本文档是互联网工程任务组 (IETF) 的产品。 它代表了IETF社区的共识。 它已接受公众审查,并已被互联网工程指导小组 (IESG) 批准发布。 有关互联网标准的更多信息,请参阅 RFC 7841 第 2 节。

有关本文档当前状态、任何勘误表以及如何提供反馈的信息,请访问 https://www.rfc-editor.org/info/rfc8731

目录

1. 简介

Secure Shell (SSH) [RFC4251] 是一种安全远程登录协议。 [RFC4253] 中描述的密钥交换协议支持一组可扩展的方法。 [RFC5656] defines how elliptic curves are integrated into this extensible SSH framework, and this document reuses the Elliptic Curve Diffie-Hellman (ECDH) key exchange protocol messages defined in Section 7.1 (ECDH Message Numbers) of [RFC5656]. [RFC5656] 的其他部分,例如椭圆曲线 Menezes-Qu-Vanstone (ECMQV) 密钥协议和椭圆曲线数字签名算法 (ECDSA),不在此考虑文档。

本文档介绍如何在SSH中基于Curve25519和Curve448[RFC7748]实现密钥交换。 对于具有 SHA-256 [RFC6234][SHS] 的 Curve25519,所描述的算法相当于私有定义的算法算法“curve25519-sha256@libssh.org”,在发布时已在 libssh [libssh] 和 OpenSSH [ 中实现并广泛部署OpenSSH] Curve448 密钥交换方法类似,但使用 SHA-512 [RFC6234][SHS]

2. 要求语言

关键字“必须”、“不得”、“必需”、“应当”、“不应"、"应该"、"不应"、"推荐"、"不推荐本文档中的“”、“可以”和“可选0>”应按照 BCP 14 [RFC2119 中的描述进行解释t12>]1> [RFC81744>]3> 当且仅当它们全部大写出现时,如此处所示。¶5>

3. 密钥交换方法

密钥交换过程类似于 [RFC5656] 的第 4 节 中描述的 ECDH 方法,但用于公共值的线路编码不同以及最后的共同秘密。 公共临时密钥被编码为标准 SSH 字符串进行传输。

协议流程、SSH_MSG_KEX_ECDH_INIT 和 SSH_MSG_KEX_ECDH_REPLY 消息以及交换哈希的结构与 [RFC5656] 的第 4 节 相同。

本文档注册的方法名称为“curve25519-sha256”和“curve448-sha512”。

这些方法基于 Curve25519 和 Curve448 标量乘法,如 [RFC7748] 中所述。 私钥和公钥按照其中所述生成。 Curve25519 的公钥定义为 32 字节的字符串,Curve448 的公钥定义为 56 字节的字符串。

密钥协商方案“curve25519-sha256”和“curve448-sha512”分别使用函数 X25519 和 X448 执行 Diffie-Hellman 协议。 实现应该使用[RFC7748]中描述的算法计算这些函数。 当他们这样做时,实现必须检查计算出的 Diffie-Hellman 共享密钥是否为全零值,如果是则中止,如第 6 节中所述[RFC7748] 这些函数的替代实现 SHOULD 会在客户端或服务器输入将共享秘密强制设置为一小组值之一时终止,如 [RFC7748]67 部分所述。 如果收到的公钥长度不是预期长度,客户端和服务器也必须中止。 用于这些目的的中止被定义为会话的断开连接 (SSH_MSG_DISCONNECT),并且应该使用消息的 SSH_DISCONNECT_KEY_EXCHANGE_FAILED 原因[IANA-REASON] 除了 [RFC7748] 中描述的内容之外,不需要进一步验证。 使用“curve25519-sha256”时派生的共享密钥为 32 字节,使用“curve448-sha512”时派生的共享密钥为 56 字节。 所有值的编码在[RFC7748]中定义。 “curve25519-sha256”使用的哈希值是 SHA-256,“curve448-sha512”使用的哈希值是 SHA-512。

3.1. 共享秘密编码

以下步骤与 [RFC5656] 不同,它使用不同的转换。 这并不是为了一般性地修改该文本,而只是为了适用于本文档中描述的机制的范围。

共享密钥 K 在 [RFC4253][RFC5656] 中定义为编码为多精度整数 (mpint)。 Curve25519/448输出一个二进制串X,它是对方公钥与本地私钥标量标量相乘得到的32或56字节点。 通过将八位字节解释为以网络字节顺序编码的无符号固定长度整数,将 X 的 32 或 56 字节转换为 K。

然后使用 [RFC4251] 的 Section 5 中描述的过程对 mpint K 进行编码,并按照 [RFC4253] 到密钥交换方法的哈希函数来生成加密密钥。

执行 X25519 或 X448 操作时,根据 [RFC7748],通过执行固定长度无符号小端转换,将整数值编码为字节字符串。 只有稍后,当这些字节字符串被​​传递给 SSH 中的 ECDH 函数时,这些字节才会被重新解释为固定长度的无符号大端整数值 K,然后该 K 值会被编码为可变长度的有符号 " mpint”,然后再馈送到用于密钥生成的哈希算法。 然后将 mpint K 与其他数据一起馈送到密钥交换方法的哈希函数以生成加密密钥。

4. 安全注意事项

[RFC4251][RFC5656][RFC7748< 的安全注意事项/t5>] 是继承的。

采用 SHA-256 的 Curve25519 提供强大的(~128 位)安全性,在各种架构上都很高效,并且与传统椭圆曲线相比,具有允许更好的实现属性的特性。 采用 SHA-512 的 Curve448 可提供更强的(~224 位)安全性,并具有类似的实现属性;然而,它尚未获得与 Curve25519 相同的密码学审查。 它也更慢(更大的密钥材料和更大的安全哈希算法),但它是作为一种对冲来对抗由于安全位数量较多而针对 Curve25519 和 SHA-256 的不可预见的分析进步。

派生的 mpint 二进制秘密字符串在散列之前进行编码的方式(即添加或删除零字节进行编码)增加了侧通道攻击的可能性,这可能会确定散列内容的长度。 这将泄漏派生秘密的最高有效位和/或允许检测最高有效字节何时为零。 出于向后兼容性的原因,决定不解决这个潜在问题。

本文档提供“curve25519-sha256”作为首选,但建议实施“curve448-sha512”以提供超过 128 位的安全强度(如果这成为要求)。

5. IANA 注意事项

IANA has added "curve25519-sha256" and "curve448-sha512" to the "Key Exchange Method Names" registry for SSH [IANA-KEX] that was created in Section 4.10 of [RFC4250].

6. 参考文献

6.1. 规范性参考文献

[RFC2119]
布拉德纳,S.“RFC 中用于指示需求级别的关键字”BCP 14RFC 2119DOI 10.17487/RFC2119 t3>、<https://www.rfc-editor.org/info/rfc2119>
[RFC4250]
莱赫蒂宁,S. 和 C. Lonvic,Ed。“安全 Shell (SSH) 协议分配的编号”RFC 4250DOI 10.17487/RFC4250,<https://www.rfc-editor.org/info/rfc4250>
[RFC4251]
伊洛宁,T. 和 C. Lonvic,Ed。“安全 Shell (SSH) 协议架构”RFC 4251DOI 10.17487/RFC4251<https://www.rfc-editor.org/info/rfc4251>
[RFC4253]
伊洛宁,T. 和 C. Lonvic,Ed。“安全外壳 (SSH) 传输层协议”RFC 4253DOI 10.17487/RFC4253,<https://www.rfc-editor.org/info/rfc4253>
[RFC5656]
斯特比拉,D. 和 J。 绿色的“安全外壳传输层中的椭圆曲线算法集成”RFC 5656DOI 10.17487/RFC5656,<https://www.rfc-editor.org/info/rfc5656>
[RFC8174]
莱巴,B.“RFC 2119 关键字中大写与小写的歧义”BCP 14RFC 8174DOI 10.17487/RFC8174<https://www.rfc-editor.org/info/rfc8174>
[SHS]
美国国家标准与技术研究院“安全哈希标准 (SHS)”FIPS PUB 180-4DOI 10.6028/NIST .FIPS.180-4,,<https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4。 pdf>

6.2. 信息参考

[IANA-KEX]
IANA“安全外壳 (SSH) 协议参数:密钥交换方法名称”<https:// www.iana.org/assignments/ssh-parameters/>
[IANA 原因]
IANA“安全 Shell (SSH) 协议参数:断开消息原因代码和说明”<https: //www.iana.org/assignments/ssh-parameters/>
[libssh]
libssh“SSH 库”<https://www.libssh.org/>
[OpenSSH]
OpenBSD 的 OpenSSH 小组“OpenSSH 项目”<https://www.openssh.com/ >
[RFC6234]
东湖三号,D. 和 T. Hansen“美国安全哈希算法(SHA 和基于 SHA 的 HMAC 和 HKDF)”RFC 6234DOI 10.17487/RFC6234,,<https://www.rfc-editor.org/info/rfc6234>
[RFC7748]
兰利,A.,汉堡,M. 和 S. Turner“安全椭圆曲线”RFC 7748DOI 10.17487/RFC7748,<https://www.rfc-editor.org/info/rfc7748>

致谢

“curve25519-sha256”密钥交换方法与 Aris Adamantiadis 创建并在 libssh 和 OpenSSH 中实现的“curve25519-sha256@libssh.org”密钥交换方法相同。

感谢以下人员的审阅和评论:Denis BiderDamien MillerNiels MoellerMatt Johnston埃里克·雷斯科拉罗恩·弗雷德里克斯特凡·布勒

作者地址

阿里斯·阿达曼蒂亚迪斯
libssh
西蒙约瑟夫森
SJD公司
马克·鲍什克
瞻博网络公司