SSH2会话中计算成本最高的步骤是什么?

时间:2011-05-02 21:03:07

标签: c optimization encryption embedded

我试图找出在SSH2密钥交换/身份验证/会话初始化中究竟使用最多CPU的内容。我正在为嵌入式CPU优化它,目前会话初始化似乎是最大的瓶颈。具体来说,我正在使用带有RSA密钥对的dropbear服务器。 RSA或其中一个部件是否需要大量CPU能力?

谢谢!

1 个答案:

答案 0 :(得分:7)

SSH2密钥交换中最昂贵的三个操作是(在服务器上):

  • Diffie-Hellman密钥交换。
  • 服务器动态计算的RSA签名。
  • 对客户端动态计算的签名进行验证(如果客户端使用非对称密钥对进行身份验证)。

客户端使用RSA密钥对进行第三次操作要快得多:RSA签名验证非常快,而DSA签名验证很昂贵(实际上比DSA签名更昂贵)。

DH由两组中的一组完成,SSH specification中的diffie-hellman-group1-sha1diffie-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进行密钥交换(如果您可以容忍非最佳安全性);
  • 为服务器使用DSA密钥;
  • 为客户端使用RSA密钥。

某些 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进行密钥交换;
  • 为服务器使用256位ECDSA密钥对;
  • 为客户端使用RSA密钥。

为了加快客户端操作,请反转客户端和服务器密钥对的条件。