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

lxe*_*lxe 4 c encryption embedded optimization

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

谢谢!

Tho*_*nin 7

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

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

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

的DH经两个组,即一个完成diffie-hellman-group1-sha1diffie-hellman-group14-sha1SSH说明书(第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选择这样的曲线ecdh-sha2-nistp256; 并将ssh-keygen -t ecdsa -b 256在同一条曲线上产生一个ECDSA密钥对.

因此,对更快的OpenSSH服务器操作的建议是:

  • 使用ecdh-sha2-nistp256密钥交换;
  • 为服务器使用256位ECDSA密钥对;
  • 为客户端使用RSA密钥.

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