"openssl speed rsa" 性能较差(通常)较好 cpu

"openssl speed rsa" less performant on (normally) better cpu

我想弄明白为什么 "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 运行 a "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 engine" 而另一个不是。

有什么想法吗?

编辑:

如@Alexei Khlebnikov 所述,openssl speed rsa 命令仅测量 rsa sign/verify 函数的速度,这些函数不使用随机数。因此,我的原始答案没有回答问题。

经过快速搜索,我发现第一个服务器有bmi2和adx指令,而第二个服务器没有。这些指令用于提高性能 用于 RSA 签名操作的蒙哥马利整数 multiplication/squaring。很难确定这是性能差异的原因,但这可能是原因之一。

原回答:

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

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

如您所见,这涉及到很多RNG,生成好的RNG真的很慢。因此,拥有更快的 RNG 意味着更快的 RSA 密钥生成。