谢谢!
SSH2密钥交换中三个最昂贵的操作是(在服务器上):
如果客户端使用RSA密钥对,则第三个操作会更快:RSA签名验证非常快,而DSA签名验证很昂贵(实际上比DSA签名生成还要昂贵)。
Diffie-Hellman密钥交换是在SSH规范(第8节)中的两个组之一进行的,分别称为diffie-hellman-group1-sha1
和diffie-hellman-group14-sha1
。后者使用2048位模数,而前者则使用1024位模数。预计较大的模数意味着DH成本比较小的模数高4到8倍。然而,1024位DH被认为与1024位RSA一样安全,因此不建议用于长期安全(在SSH中,DH用于获取实际加密密钥;因此,您希望DH能够保持与通过SSH连接交换的数据机密性相同的时间)。
类似地,RSA签名生成成本在很大程度上取决于密钥大小:2048位RSA签名生成需要的CPU时间约为1024位RSA签名生成所需时间的8倍。DSA签名生成可能比RSA签名生成稍快一些(最多可能快两倍)。
因此,更快的标准SSH2服务器操作建议如下:
diffie-hellman-group1-sha1
进行密钥交换(如果您可以容忍不太理想的安全性);一些 SSH 实现(特别是较新版本的 OpenSSH)支持 ECDSA 签名,并且可能使用 ECDH(椭圆曲线上的 Diffie-Hellman)而不是普通 DH。ECDSA 和 ECDH 应该比 DSA 和 DH 更快。此外,基于 256 位椭圆曲线的 ECDSA 和 ECDH 应该实现适当的长期安全性。在 OpenSSH 中,您可以通过将 KexAlgorithms
服务器选项设置为 ecdh-sha2-nistp256
来选择这样的曲线进行 ECDH; 而 ssh-keygen -t ecdsa -b 256
将产生与相同曲线上的 ECDSA 密钥对。
因此,更快速的 OpenSSH 服务器操作建议如下:
ecdh-sha2-nistp256
进行密钥交换;为了更快的客户端操作,反转客户端和服务器密钥对的条件。