【问题标题】:OpenSSL EdDSA Specify Key SizeOpenSSL EdDSA 指定密钥大小
【发布时间】:2020-03-15 04:07:46
【问题描述】:

我需要为 NodeJS 的 elliptic 模块为我正在处理的项目生成一些带有 ed25519 曲线的密钥对。经过一番搜索,发现可以使用以下命令完成:

openssl genpkey -algorithm ed25519 -out private.pem

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

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

【问题讨论】:

  • 您的意思是 64 个 hex 字符吗?换句话说,32 字节

标签: node.js openssl elliptic-curve


【解决方案1】:

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

私钥是32个八位字节(256位,对应b)的
加密安全的随机数据。参见 [RFC4086] 进行讨论 关于随机性。

我不知道您在上面的问题中从哪里得到 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

实际的原始私钥本身被编码为八进制字符串上面显示的八进制字符串中(根据 RFC 8410)。正如您在上面看到的,八位字节字符串从偏移量 12 开始,标头长度为 2 - 所以数据本身位于偏移量 14:

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 字节,您无法更改。它是算法的基本属性。

【讨论】:

  • ed25519 private keys are by definition 32-bytes in length。 RSA 密钥具有可定制的长度,以备将来验证。你总是可以通过增加长度来加强。你是说 ed25519 没有这样的面向未来的功能吗?
  • 是的——没错
【解决方案2】:

@arctic_hen7 你的意思可能是 32 字节 而不是 32 位

  1. "...ed25519 私钥的定义长度为 32-。来自...的第 5.1.5 节"
  2. "...私钥为32个八位字节(256位,对应b)..."
  3. "...它向您显示了一个 32 字节 的私钥,如预期的那样......"
  4. "...但是底线是,ed25519 私钥始终是 32 位,您无法更改..."

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2011-02-24
    相关资源
    最近更新 更多