我试图找出在SSH2密钥交换/身份验证/会话初始化中究竟使用最多CPU的内容。我正在为嵌入式CPU优化它,目前会话初始化似乎是最大的瓶颈。具体来说,我正在使用带有RSA密钥对的dropbear服务器。 RSA或其中一个部件是否需要大量CPU能力?
谢谢!
答案 0 :(得分:7)
SSH2密钥交换中最昂贵的三个操作是(在服务器上):
客户端使用RSA密钥对进行第三次操作要快得多:RSA签名验证非常快,而DSA签名验证很昂贵(实际上比DSA签名更昂贵代)。
DH由两组中的一组完成,SSH specification中的diffie-hellman-group1-sha1
和diffie-hellman-group14-sha1
(第8部分)。后者使用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(Elliptic Curve上的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
进行密钥交换; 为了加快客户端操作,请反转客户端和服务器密钥对的条件。