首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenSSL ecparam每次生成相同的私钥?

OpenSSL ecparam每次生成相同的私钥?
EN

Security用户
提问于 2015-12-13 11:15:37
回答 1查看 1.5K关注 0票数 0

目前,我正试图使我的web服务器尽可能安全,我正在服务器端测试不同的密码套件,其中一些使用ECDHE密钥交换。

在生成私有EC密钥时,我注意到大多数生成的数据在生成两个密钥时是相同的。原始产出:

代码语言:javascript
复制
root@spock:/etc/letsencrypt/live/binarus.home.omeganet.de# openssl ecparam -name secp256k1 -param_enc explicit -genkey
-----BEGIN EC PARAMETERS-----
MIGiAgEBMCwGByqGSM49AQECIQD////////////////////////////////////+
///8LzAGBAEABAEHBEEEeb5mfvncu6xVoGKVzocLBwKb/NstzijZWfKBWxb4F5hI
Otp3JqPEZV2k+/wOEQio/Re0SKaFVBmcR9CP+xDUuAIhAP//////////////////
//66rtzmr0igO7/SXozQNkFBAgEB
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MIIBEwIBAQQgpCZwVgJpH7t70lK0V1MSGvCe8IcOtXPP+S/luqFsr/eggaUwgaIC
AQEwLAYHKoZIzj0BAQIhAP////////////////////////////////////7///wv
MAYEAQAEAQcEQQR5vmZ++dy7rFWgYpXOhwsHApv82y3OKNlZ8oFbFvgXmEg62ncm
o8RlXaT7/A4RCKj9F7RIpoVUGZxH0I/7ENS4AiEA/////////////////////rqu
3OavSKA7v9JejNA2QUECAQGhRANCAASXlnk1RIp1fKlGxcZMsm0mJLJ6xoIG4Z8t
AYn30X5pA3P00BpweidnzeqLlytPBuFeqwbJBuH3rXnpIvMe2W89
-----END EC PRIVATE KEY-----

root@spock:/etc/letsencrypt/live/binarus.home.omeganet.de# openssl ecparam -name secp256k1 -param_enc explicit -genkey
-----BEGIN EC PARAMETERS-----
MIGiAgEBMCwGByqGSM49AQECIQD////////////////////////////////////+
///8LzAGBAEABAEHBEEEeb5mfvncu6xVoGKVzocLBwKb/NstzijZWfKBWxb4F5hI
Otp3JqPEZV2k+/wOEQio/Re0SKaFVBmcR9CP+xDUuAIhAP//////////////////
//66rtzmr0igO7/SXozQNkFBAgEB
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MIIBEwIBAQQgXccG/nHnL17f60wwQq7zwngdSIg9c+ATwy2CSMY+2PWggaUwgaIC
AQEwLAYHKoZIzj0BAQIhAP////////////////////////////////////7///wv
MAYEAQAEAQcEQQR5vmZ++dy7rFWgYpXOhwsHApv82y3OKNlZ8oFbFvgXmEg62ncm
o8RlXaT7/A4RCKj9F7RIpoVUGZxH0I/7ENS4AiEA/////////////////////rqu
3OavSKA7v9JejNA2QUECAQGhRANCAASzr/OIB4ab1o6++PPJCg/TdbdmDHIiYxOD
Gi7hfp5VGe8d++PrAb3B5Pnvn2TmrDsbNzeysGp0IPjpH+ns56vn
-----END EC PRIVATE KEY-----

正如您所看到的,大多数私钥是相同的。但是,我对生成私钥的理解一直是,每个私钥都应该是独一无二的。有人能弄清楚这件事吗?

请注意,我在不同版本的OpenSSL中观察到了这一点,其中最近的一个版本(OpenSSL 1.0.2e)。还请注意,如果我让命令行显式地切换-param_enc,结果是相同的。

虽然上面的结果至少有几个字节不同,但当让OpenSSL将生成的数据转换为人类可读的形式时,我完全迷失了方向:

代码语言:javascript
复制
root@spock:/etc/letsencrypt/live/binarus.home.omeganet.de# openssl ecparam -name secp256k1 -param_enc explicit -genkey | openssl asn1parse
    0:d=0  hl=3 l= 162 cons: SEQUENCE          
    3:d=1  hl=2 l=   1 prim: INTEGER           :01
    6:d=1  hl=2 l=  44 cons: SEQUENCE          
    8:d=2  hl=2 l=   7 prim: OBJECT            :prime-field
   17:d=2  hl=2 l=  33 prim: INTEGER           :FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
   52:d=1  hl=2 l=   6 cons: SEQUENCE          
   54:d=2  hl=2 l=   1 prim: OCTET STRING      [HEX DUMP]:00
   57:d=2  hl=2 l=   1 prim: OCTET STRING      [HEX DUMP]:07
   60:d=1  hl=2 l=  65 prim: OCTET STRING      [HEX DUMP]:0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
  127:d=1  hl=2 l=  33 prim: INTEGER           :FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
  162:d=1  hl=2 l=   1 prim: INTEGER           :01

root@spock:/etc/letsencrypt/live/binarus.home.omeganet.de# openssl ecparam -name secp256k1 -param_enc explicit -genkey | openssl asn1parse
    0:d=0  hl=3 l= 162 cons: SEQUENCE          
    3:d=1  hl=2 l=   1 prim: INTEGER           :01
    6:d=1  hl=2 l=  44 cons: SEQUENCE          
    8:d=2  hl=2 l=   7 prim: OBJECT            :prime-field
   17:d=2  hl=2 l=  33 prim: INTEGER           :FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
   52:d=1  hl=2 l=   6 cons: SEQUENCE          
   54:d=2  hl=2 l=   1 prim: OCTET STRING      [HEX DUMP]:00
   57:d=2  hl=2 l=   1 prim: OCTET STRING      [HEX DUMP]:07
   60:d=1  hl=2 l=  65 prim: OCTET STRING      [HEX DUMP]:0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
  127:d=1  hl=2 l=  33 prim: INTEGER           :FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
  162:d=1  hl=2 l=   1 prim: INTEGER           :01

现在所有的八进制字符串都是完全相同的。据我所知,其中之一应该是私钥,不是吗?

如有任何解释,我将不胜感激。我有数学和编程背景,我了解RSA基础非对称密码背后的概念。但我对椭圆曲线密码学几乎一无所知。我只想使用它来进行ECDHE密钥交换,以便使HTTPS查询具有完善的前向保密功能。

谢谢你提前..。

EN

回答 1

Security用户

发布于 2015-12-13 11:51:31

欺骗PEM

这些钥匙不一样。他们很不一样。它们都以'MI‘开头,但这只是PEM 64编码的一个属性。

另外:我猜您的ASN1PARSE只解析该输出中的第一个PEM对象。这就是你想要的曲线。所以这应该是一样的。解析第二个PEM对象(实际的私钥),您将看到私钥(曲线点)不完全相同。

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

https://security.stackexchange.com/questions/108008

复制
相关文章

相似问题

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