在(通常)更好的 CPU 上"openssl speed rsa"性能降低



我试图弄清楚为什么"openssl speed rsa"在更好的CPU上给我带来更差的结果

第一台服务器:Linux Debian 8(运行Xen) - 内核:4.9.0-amd64

model name : Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz cpu MHz : 2200.004 cache size : 30720 KB flags : fpu de tsc msr pae mce cx8 apic sep mca cmov pat clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase bmi1 hle avx2 bmi2 erms rtm rdseed adx xsaveopt ibpb ibrs stibp bogomips : 4400.00

第二台服务器:Linux Debian 8(运行Vmware ESXi(我还不知道是哪一个) - 内核:4.9.0-amd64)

model name : Intel(R) Xeon(R) CPU E5-2698 v4 @ 2.20GHz cpu MHz : 2199.058 cache size : 51200 KB flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx hypervisor lahf_lm kaiser arat bogomips : 4399.99 运行"openssl speed rsa"给了我这个(只粘贴 4096 位,因为它与我想做的事情唯一相关):

第一台服务器:

Doing 4096 bits private rsa's for 10s: **1699** 4096 bits private RSA's in 10.00s Doing 4096 bits public rsa's for 10s: 105493 4096 bits public RSA's in 10.00s

第二台服务器:

Doing 4096 bits private rsa's for 10s: **1229** 4096 bits private RSA's in 10.00s Doing 4096 bits public rsa's for 10s: 78677 4096 bits public RSA's in 10.00s

什么可以解释创建的密钥的差异(=470(1699-1229))?

两台服务器的 CPU 都带有 aes 标志。

我看到的唯一区别是可用的引擎,第一台服务器有 "(rdrand)Intel RDRAND 引擎"和其他不是。

知道吗?

编辑:

正如@Alexei Khlebnikov所说,openssl speed rsa命令仅测量rsa签名/验证功能的速度,并且这些功能不使用随机数。正因为如此,我最初的答案没有回答这个问题。

快速搜索后,我发现第一台服务器有 bmi2 和 adx 指令,而第二台服务器没有。这些说明用于提高 蒙哥马利的整数乘法/平方,用于 RSA 签名操作。很难确认这是性能差异的原因,但这可能是原因之一。

原答案:

要生成 RSA 密钥,您需要随机和大质数。找到随机和大素数的过程包括:

  1. 生成一个随机数;
  2. 检查它是否是素数;
  3. 如果不是,请重复此操作。

如您所见,这涉及大量 RNG,并且生成良好的 RNG 非常慢。因此,拥有更快的 RNG 意味着更快的 RSA 密钥生成。

最新更新