C 什么';SSH2会话中计算最昂贵的步骤是什么?

C 什么';SSH2会话中计算最昂贵的步骤是什么?,c,optimization,encryption,embedded,C,Optimization,Encryption,Embedded,我正试图弄清楚在SSH2密钥交换/身份验证/会话初始化中,究竟什么使用了最多的CPU。我正在为嵌入式CPU进行优化,目前会话初始化似乎是最大的瓶颈。具体来说,我使用的是带有RSA密钥对的dropbear服务器。RSA或其一部分是否需要大量CPU电源 谢谢 SSH2密钥交换中最昂贵的三个操作是(在服务器上): Diffie-Hellman密钥交换 由服务器动态计算的RSA签名 对客户端动态计算的签名的验证(如果客户端使用非对称密钥对进行自身身份验证) 第三个操作的速度要快得多,因为客户端使用R

我正试图弄清楚在SSH2密钥交换/身份验证/会话初始化中,究竟什么使用了最多的CPU。我正在为嵌入式CPU进行优化,目前会话初始化似乎是最大的瓶颈。具体来说,我使用的是带有RSA密钥对的dropbear服务器。RSA或其一部分是否需要大量CPU电源


谢谢

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

  • Diffie-Hellman密钥交换
  • 由服务器动态计算的RSA签名
  • 对客户端动态计算的签名的验证(如果客户端使用非对称密钥对进行自身身份验证)
第三个操作的速度要快得多,因为客户端使用RSA密钥对:RSA签名验证非常快,而DSA签名验证非常昂贵(实际上比生成DSA签名要贵一些)

DH是在两组中的一组上进行的,这两组分别称为
diffie-hellman-group1-sha1
diffie-hellman-group14-sha1
(第8节)。后者使用2048位模,而前者使用1024位模。预计较大模量意味着DH成本是较小模量的4到8倍。但是,1024位DH被认为与1024位RSA一样安全,因此,不建议长期使用DH(在SSH中,DH用于获取实际的加密密钥;因此,您希望DH抵抗lng,因为通过SSH连接交换的数据必须保密)

类似地,RSA签名生成的成本在密钥大小上也是立方的:2048位RSA签名生成所需的CPU大约是1024位RSA签名生成所需的CPU的8倍。DSA签名生成可能比RSA签名生成快一些(可能快两倍)

因此,更快的标准SSH2服务器操作建议如下:

  • 使用
    diffie-hellman-group1-sha1
    进行密钥交换(如果您能够容忍非最佳安全性)
  • 为服务器使用DSA密钥
  • 为客户端使用RSA密钥
一些SSH实现(特别是较新版本的)支持ECDSA签名,并且可能使用ECDH(椭圆曲线上的Diffie Hellman)而不是普通DH。ECDSA和ECDH应该分别比DSA和DH快得多。此外,256位椭圆曲线上的ECDSA和ECDH应实现适当的长期安全性。在OpenSSH中,通过将
KexAlgorithms
server选项设置为
ECDH-sha2-nistp256
,为ECDH选择这样一条曲线;ssh-keygen-t ecdsa-b256将在同一条曲线上生成一个ecdsa密钥对

因此,加快OpenSSH服务器操作的建议如下:

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

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

您能够分析代码吗?附言:接受更多问题的答案。很多人会选择不帮助你,否则。直觉:最昂贵的步骤是RSA认证和DH密钥交换。与随后的对称加密相比,两者本质上都是繁重的计算。在优化时要非常小心,特别是当诸如时间安排之类的旁道可能成为问题时。哇!这正是我想要的,还有更多!非常感谢。