首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ECDSA私钥格式

ECDSA私钥格式
EN

Cryptography用户
提问于 2017-06-29 04:11:31
回答 1查看 17.3K关注 0票数 7

下面是一个示例ECDSA私钥(我没有将它用于任何事情):

代码语言:javascript
复制
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIFL3sLnioGcDvHWM/BPlNw96BOx1KKco2qsq4UwhQUosoAcGBSuBBAAK
oUQDQgAEXs1Fmq4QdPAbn3NycdEU+HOjc3kW9efbso2kI/vdDTWcSCMk310s53G3
tRClDBPPuuJAsKghbPfaTaUpmXFCNA==
-----END EC PRIVATE KEY-----

下面是OpenSSL的asn1parse对它的看法:

代码语言:javascript
复制
    0:d=0  hl=2 l= 116 cons: SEQUENCE
    2:d=1  hl=2 l=   1 prim:  INTEGER           :01
    5:d=1  hl=2 l=  32 prim:  OCTET STRING
   39:d=1  hl=2 l=   7 cons:  cont [ 0 ]
   41:d=2  hl=2 l=   5 prim:   OBJECT            :1.3.132.0.10
   48:d=1  hl=2 l=  68 cons:  cont [ 1 ]
   50:d=2  hl=2 l=  66 prim:   BIT STRING

我的问题是:这个格式是在哪里定义的?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2017-06-29 05:09:16

您可以在RFC 5915中找到定义。

它定义了一个ECPrivateKey对象:

代码语言:javascript
复制
ECPrivateKey ::= SEQUENCE {
 version        INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1),
 privateKey     OCTET STRING,
 parameters [0] ECParameters {{ NamedCurve }} OPTIONAL,
 publicKey  [1] BIT STRING OPTIONAL
}

来自第3节:

ECPrivateKey类型的字段具有以下含义:

  • version指定椭圆曲线私钥结构的语法版本号。对于文档的这个版本,它将被设置为ecPrivkeyVer1,它的类型为INTEGER,其值为1 (1)。

  • privateKey是私钥。它是一个长度上限(\log_2(n)/8)的八进制字符串(其中n是曲线的顺序),它是通过RFC3447中定义的整数到八进制字符串-原语(I2OSP)从无符号整数中获得的。

  • parameters指定与私钥关联的椭圆曲线域参数。ECParameters类型在RFC5480中进行了讨论。正如RFC5480中所指定的,只允许使用namedCurve选择。namedCurve是一个对象标识符,它完全标识特定一组椭圆曲线域参数所需的值。尽管ASN.1表示参数字段是可选的,但符合此文档的实现必须始终包括参数字段。

  • publicKey包含与所述私钥相关联的椭圆曲线公钥。公钥的格式在RFC5480第2.2节中指定。尽管ASN.1表示publicKey是可选的,但符合此文档的实现应该始终包括publicKey字段。当公钥通过另一种机制分发时,可以省略publicKey字段,这超出了本文档的范围。给定私钥和参数,可以始终重新计算公钥;该字段的存在是为了方便使用者。

正如注释中指出的那样,OpenSSL实际上使用了一种稍微不同的格式,即在SEC1的椭圆曲线密码学中找到的SEC1格式。来自这个openssl ec命令的描述:

-inform DER+PEM

  • 这指定输入格式。带有私钥的DER选项使用ASN.1 DER编码的SEC1私钥。

然而,如前所述,即使值得注意,差异也是很小的。来自RFC 5915's附录B:

本附录列出了本文档与SECG1之间的差异:

  1. 本文档使用在I2OSP中定义的RFC3447例程,而SECG1则定义自己的例程。这两个例程产生相同的输出。

  1. SECG1将其参数(即曲线)约束为SECGCurveNames。本文档将参数从NamedCurve限制为RFC5480。

  1. 此文档要求存在参数,而SECG1不存在参数。

  1. 本文档指定编码规则的要求,而SECG1没有。
票数 12
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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