首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么OpenSSH喜欢超过-384和-521的ECDSA nistp256密钥,以及Ed25519上的密钥,用于主机密钥验证?

为什么OpenSSH喜欢超过-384和-521的ECDSA nistp256密钥,以及Ed25519上的密钥,用于主机密钥验证?
EN

Cryptography用户
提问于 2020-09-30 16:03:33
回答 3查看 10.5K关注 1票数 10

根据ssh_config(5)的说法,HostKeyAlgorithms“指定了客户端希望按照偏好顺序使用的主机密钥算法.默认情况是:

代码语言:javascript
复制
ecdsa-sha2-nistp256-cert-v01@openssh.com,
ecdsa-sha2-nistp384-cert-v01@openssh.com,
ecdsa-sha2-nistp521-cert-v01@openssh.com,
ssh-ed25519-cert-v01@openssh.com,
rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,
ssh-rsa-cert-v01@openssh.com,
ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,
ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

这列出了Ed25519键之前的ECDSA键,并且更喜欢在nistp384上和nistp521上有曲线的ECDSA键。

我的印象是,Ed25519通常优于ECDSA密钥,而n曲线较高的密钥(至少在这三种密钥中)更安全。

那么,为什么OpenSSH会按照这个顺序列出算法呢?

另外,我正在开发一个使用SSH作为传输的Android应用程序。它还需要一个首选主机密钥算法的列表。在应用程序中复制OpenSSH的列表是个好主意吗?还是我更喜欢ed25519而不是ecdsa,nistp521超过-384,超过-256,而不是rsa键?

EN

回答 3

Cryptography用户

发布于 2020-10-01 00:08:19

如果我没记错的话,那只是一个性能问题。请记住,HostKeyAlgorithms确定用于向客户端验证服务器的方法,它不生成会话密钥。

ECDSA算法比RSA算法速度快,小密钥大小比大密钥大小快,当缺省值为5.7时,变化量g特别引用的性能原因见第一个特征项。

由于兼容性原因,NIST密钥可能比ED25519更受欢迎,在发现服务器不支持基于Curve25519的密钥之后,我不得不生成NIST密钥,因此这是完全合理的。基于Curve25519的密钥可能是更安全,除非您要求NIST,否则他们会说它们是同等安全的。

由于这些只是默认选项,您当然可以自由地更改它们或强制执行特定的算法,因此我强制使用3072位RSA作为我的默认主机密钥方法。请记住,这是一个选择选项,如果列表中的键类型不存在,则不会使用它。如果您的配置中只有RSA密钥,所有EC选项都将被跳过,您可以随意删除它们。

如果您正在使用SSH进行传输,并且您可以控制应用程序和服务器,您只需生成您想要的1主机键并完成它,并忽略配置选项,因为它们并不重要。

票数 10
EN

Cryptography用户

发布于 2020-10-02 17:45:16

所以我开始好奇事情到底有多快。显然,您可以使用$ openssl speed查看某些操作的速度。但是,我不确定当连接到SSH服务器时,这会如何转化为实际的性能问题。

作为Diffie-Hellman密钥交换的一部分,SSH服务器计算某个哈希,然后使用其私有主机密钥对其签名。然后,客户端计算相同的散列并验证服务器签名。因此,看看这两种操作的速度有多慢是很有用的。签名操作可能更重要,因为服务器往往比客户端具有更多的SSH连接。

签名/验证操作通常涉及另一个散列操作;它将是主机密钥验证算法的一部分。例如,ssh-rsa将使用sha1ecdsa-sha2-nistp521将使用sha512。我不确定下面的数字是否包括哈希时间。在这两种情况下,对于数据> 16字节,sha256sha512的执行情况似乎是相当的。

我在三个设备上测试了这个:

  • Thinkpad X220英特尔核心i5-2520M符号验证符号/S验证/S rsa 2048位0.0013500.000048 s 740.8 20913.2 rsa 3072位0.006107s 0.000094s 163.7 10639.3 rsa 4096位0.010134s 0.000158s 98.7 6316.4 rsa 7680位0.089906s0.000525s11.1 1903.0 rsa 15360位0.468636 s 0.0068636 s 0.002004s2.1 499.0 dsa 2048位0.000600s0.000519s 1667.5 1927.0 256位ecdsa (nistp256) 0.0000s0.0001s23594.7 7348.1 384位ecdsa (nistp384) 0.0016s 0.0011s 620.4 890.8521位ecdsa (nistp521) 0.0005s0.0009s 1866.4 1080.1 253位EdDSA (Ed25519) 0.0001s0.0002s 15737.2 6078.1
  • 小米米A2,高通SDM660 Snap巨龙660符号验证符号/S验证/S rsa 2048位0.004257 s 0.000111 s 234.9 9030.1 rsa 3072位0.012975 s 0.000243s 77.1 4116.7 rsa 4096位0.029138s 0.000425s 34.3 2353.9 rsa 7680位0.220952s 0.0014604.5 684.9 rsa 15360位1.362500 s 0.005801 s 0.7 172.4 dsa 2048位0.001530s 0.001534s 653.8 697.3 256 ecdsa (nistp256) 0.0001s0.0003s 12472.4 3907.9 384位ecdsa (nistp384) 0.0032s0.0025s 311.4 396.6 521位ecdsa (nistp521) 0.0081s 0.0062 s 123.1 161.9 253位EdDSA (Ed25519) 0.0002s0.0004s 6284.5 2412.9
  • 覆盆子Pi 3型B型Rev 1.2,皮质-A53符号验证符号/S验证/S rsa 2048位0.0119s 0.000268s 83.9 3735.0 rsa 3072位0.032787s 0.00055030.5 1819.5 rsa 4096位0.069583s 0.000934s 14.4 1070.1 rsa 7680位0.381111s 0.003097s2.6 322.9 rsa 15360位2.725000.0.012002s0.483.3dsa 2048位0.003586s 0.003021 s 278.9 331.0 256位ecdsa (nistp256) 0.0004s0.0013s2249.3 743.5 384位ecdsa (nistp384) 0.0181s 0.0127s 55.1 78.5 521位ecdsa (Nistp384)( nistp521) 0.0421s 0.0287 s 23.7 34.8 253位EdDSA (Ed25519) 0.0005s0.0012s 2156.7 800.2

这是图表,线性和对数。Y轴是sign/s (实心,圆)和verify/s (点,三角形)。蓝色是X220,橙色是小米,红色是覆盆子皮。

这里我要说的是,ECDSA nistp256比其他ECDSA密钥的签名速度要快得多。在Raspberry pi上,使用nistp384和521将导致每秒最多55.1或23.7签名操作--对我来说,这些操作看起来很糟糕。

Ed25519比ECDSA慢一些,特别是在签名方面,但没有太多。

而且,令人惊讶的是,在Intel上,nistp521比nistp384表现得更好。

票数 9
EN

Cryptography用户

发布于 2023-03-26 13:35:11

putty 0.75和winscp @ windows server 2008不支持ECDSA方法:(

票数 0
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/84271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档