【问题标题】:Unknown 116-byte ECDSA private key format未知的 116 字节 ECDSA 私钥格式
【发布时间】:2019-12-05 03:14:21
【问题描述】:

iOS 13 的 CryptoKit 框架为 ECDSA 公钥和私钥提供 .rawRepresentation 值。我一直在尝试对 rawRepresentation 数据类型进行逆向工程以在它和 JWK 之间进行转换。从公钥表示的 64 字节长度来看,它似乎是一个简单的x || y 连接。我猜想私钥会是x || y || d,但情况似乎并非如此,因为这样做应该会产生一个 96 字节的字符串,而实际的 rawRepresentation144 字节强>。它似乎也不是有效的 DER/ASN.1 字符串。我还没有找到符合我得到的实际值的规范。

如您所料,Apple 的文档描述性很强。

rawRepresentation:将私钥表示为字节的集合。

提供了一个十六进制的示例密钥对。

Private: 988f8187ff7f00007466815b0d6b02ae1a063198fd1e4923fb1e413195126cc00d30483284186b435726c0c69cc774274ea32eb6a17cbaf2ea88dd7f3a5a2a3ce637bc4b96523c2795035bd2fbeb093b010000000000000000000000000000000000000000000000000000000000000012b2b61abe8beae5aeb6d0bda739235364de96c7f498813cfb0336198dcf9063
Public:  2774c79cc6c02657436b18843248300dc06c129531411efb23491efd9831061a3b09ebfbd25b0395273c52964bbc37e63c2a5a3a7fdd88eaf2ba7ca1b62ea34e

这可能是什么格式?

【问题讨论】:

  • 我的 SWAG 是实际密钥本身的二进制形式,而不是通常包含的任何周围元数据。
  • 我也是这么想的,这就是我最初编码的目的,但那将是 96 个字节(x 为 32,y 为 32,d 为 32)。 iOS 似乎需要 144 字节,当我尝试使用 96 字节时会抛出错误。
  • 很难真正解释一切。它们的密钥大致介于“02”之间(根据 RFC 的 SHA256 EDCSA 私钥的开头,以及一长串 0 的结尾。其余的是标题/哈希函数。算出它应该是 96。对不起,我不能现在不能给你更好的答案,但我保证你需要的所有代码都来自这个WWDC playground。你不应该自己解析原始表示。使用完整的API。我希望以后能写完整的演示.
  • 什么 RFC 定义了这种格式?
  • 我也对这个很感兴趣。他们确实让 CryptoKit 的 API 变得很糟糕。它们不公开任何 ECC 方法,并且几乎不支持任何关键格式标准。我希望 CryptoKit 具有与 EllipticCurveKit 相同的功能和 API,但又安全又快速! github.com/Sajjon/EllipticCurveKit

标签: swift binary-data ecdsa key-pair apple-cryptokit


【解决方案1】:

我无法弄清楚rawRepresentation,所以我最终使用x963Representation,即0x04 + x + y + d 用于私钥(97 字节),04 + x + y 用于公钥(65 字节)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多