首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenSSL EdDSA指定密钥大小

OpenSSL EdDSA指定密钥大小
EN

Stack Overflow用户
提问于 2020-03-15 04:07:46
回答 2查看 3.3K关注 0票数 6

我需要为NodeJS的elliptic模块生成一些带有elliptic曲线的键盘,用于我正在进行的项目。在进行了一些搜索之后,发现可以使用以下命令来完成这一任务:

代码语言:javascript
复制
openssl genpkey -algorithm ed25519 -out private.pem

但是,这总是生成长度为64个字符的键。不过,我想为密钥指定一个特定的大小。这有可能使用OpenSSL吗?若否,可否请您指出一种方法,使我可以在其他地方安全地生成具有固定大小的此类密钥?

另外,我对椭圆曲线密码学非常陌生,而且还不太了解EdDSA密钥是如何生成的。所以,请告诉我,如果我完全没有理解这一点,并请解释我哪里出了严重的错误,如果是这样。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-16 10:42:11

根据定义,ed25519私钥的长度为32字节.来自RFC8032第5.1.5节:

私钥是32位字节(256位,对应于b)

加密安全的随机数据。有关随机性的讨论,请参见RFC4086。

我不知道你上面的问题中有64个字是从哪里来的。我可能以为你在看编码长度--但这也是没有道理的。

如果我这么做:

代码语言:javascript
复制
openssl genpkey -algorithm ed25519 -out private.pem

然后,我得到一个PEM编码的私钥,长度为119字节。这是根据RFC8410第7节编码的。您可以这样查看内容:

代码语言:javascript
复制
openssl asn1parse -in private.pem
    0:d=0  hl=2 l=  46 cons: SEQUENCE          
    2:d=1  hl=2 l=   1 prim: INTEGER           :00
    5:d=1  hl=2 l=   5 cons: SEQUENCE          
    7:d=2  hl=2 l=   3 prim: OBJECT            :ED25519
   12:d=1  hl=2 l=  34 prim: OCTET STRING      [HEX DUMP]:0420F897797B25D84588192CE39F0E6311954034CB80F6D8CD648A3BCBFC2346A83E

实际的原始私钥本身被编码为上述八进制字符串中的八位串(根据RFC 8410)。如上文所示,八进制字符串从偏移量12开始,标题长度为2,因此数据本身位于偏移量14处:

代码语言:javascript
复制
openssl asn1parse -in private.pem -offset 14
    0:d=0  hl=2 l=  32 prim: OCTET STRING      [HEX DUMP]:F897797B25D84588192CE39F0E6311954034CB80F6D8CD648A3BCBFC2346A83E

它显示的私钥长度为32字节,如预期的那样。

有些软件可能以不符合RFC8410的不同格式存储密钥(例如,将私钥和公钥存储在一起)--因此,如果您已经将该密钥加载到其他东西中,那么这可能解释64来自何处。但是,您不能使用OpenSSL生成这些格式。

但是底线是,ed25519私钥总是32字节,您不能更改它。它是该算法的一个基本性质。

票数 8
EN

Stack Overflow用户

发布于 2021-03-08 19:12:55

@arctic_hen7您可能指的是32字节而不是32位

  1. "...ed25519私钥定义为32-长度.从.“
  2. ”...The私钥是32 octets (256位,对应于
  3. 显示一个长度为32字节的私钥)作为...The的底线是,ed25519私钥总是32位的,您不能更改它.“

G 221

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

https://stackoverflow.com/questions/60689653

复制
相关文章

相似问题

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