gpt4 book ai didi

node.js - OpenSSL EdDSA 指定 key 大小

转载 作者:行者123 更新时间:2023-12-03 12:17:31 25 4
gpt4 key购买 nike

我需要用 ed25519 曲线为 NodeJS 的 elliptic 生成一些 key 对。我正在从事的项目的模块。经过一番搜索,发现可以使用以下命令完成此操作:

openssl genpkey -algorithm ed25519 -out private.pem

但是,这始终会生成长度为 64 个字符的 key 。我希望为 key 指定一定的大小。这可能使用 OpenSSL 吗?如果没有,我能否指出一种在其他地方安全地生成具有设定大小的 key 的方法?

另外,我对椭圆曲线密码学非常陌生,还不太了解 EdDSA key 是如何生成的。所以请告诉我我是否完全无法理解这一点,如果是,请解释我在哪里犯了严重错误。

最佳答案

ed25519 私钥的定义长度为 32 字节。从 RFC8032 的第 5.1.5 节:

The private key is 32 octets (256 bits, corresponding to b) of
cryptographically secure random data. See [RFC4086] for a discussionabout randomness.


我不知道您在上面的问题中从哪里得到 64 个字符。我可能希望您正在查看编码长度 - 但这也没有意义。
如果我这样做:
openssl genpkey -algorithm ed25519 -out private.pem
然后我得到一个长度为 119 字节的 PEM 编码私钥。这是根据 RFC8410 的第 7 节编码的。你可以这样看内容:
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
实际的原始私钥本身被编码为上面显示的 OCTET STRING 内的 OCTET STRING(根据 RFC 8410)。正如您在上面看到的,八位字节字符串从偏移量 12 开始, header 长度为 2 - 所以数据本身位于偏移量 14:
openssl asn1parse -in private.pem -offset 14
0:d=0 hl=2 l= 32 prim: OCTET STRING [HEX DUMP]:F897797B25D84588192CE39F0E6311954034CB80F6D8CD648A3BCBFC2346A83E
这向您显示了一个长度为 32 字节的私钥,如预期的那样。
某些软件可能以不符合 RFC8410 的不同格式存储 key (例如,通过将私钥和公钥存储在一起) - 因此,如果您将此 key 加载到其他东西中,那么这可能会解释 64 的来源。但是,您不能使用 OpenSSL 生成这些格式。
但是底线是,ed25519 私钥始终为 32 字节,您无法更改它。它是算法的基本属性。

关于node.js - OpenSSL EdDSA 指定 key 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60689653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com