关于OpenSSL ECDH代码理解及曲线执行时间基准测试的疑问
关于OpenSSL EC密钥生成时间基准测试的说明
我注意到你在Stack Overflow上看到不少相关主题的帖子(比如"OpenSSL calculate ECDH secret")多数没得到解答,刚好你在用OpenSSL命令做secp256k1曲线的性能测试,这里帮你理清几个关键点:
你的命令实际测量的是什么时间?
你用的命令:
time openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem
这个命令生成的是完整的EC密钥对——包含私钥和对应的公钥。虽然输出的PEM文件主要存储私钥,但公钥是通过私钥乘以曲线基点计算出来的,这个计算过程已经包含在命令执行的流程里了。所以你得到的时间结果是私钥随机生成 + 公钥推导的总耗时,不是单独的公钥生成时间。
如何单独测量公钥生成的时间?
如果你想单独统计从私钥生成公钥的耗时,可以拆分两步执行:
- 先生成纯私钥(这一步主要是生成随机私钥,不做公钥计算):
time openssl ecparam -name secp256k1 -genkey -noout -out privkey.pem - 再从已有的私钥导出公钥,测量这个步骤的时间:
time openssl ec -in privkey.pem -pubout -out pubkey.pem
第二个命令的时间就是单独生成公钥的耗时,你可以拿这个结果和之前的总耗时对比,就能清楚两者的占比了。
补充:ECDH共享密钥计算的时间测试
如果后续你需要测试ECDH共享密钥的计算时间,可以用pkeyutl命令,比如:
time openssl pkeyutl -derive -inkey my-privkey.pem -peerkey their-pubkey.pem -out shared-secret.bin
这个命令的时间就是ECDH密钥交换中计算共享秘密的耗时。
内容的提问来源于stack exchange,提问作者ChanBan
相关产品推荐
相关产品推荐

