【发布时间】:2019-12-05 03:14:21
【问题描述】:
iOS 13 的 CryptoKit 框架为 ECDSA 公钥和私钥提供 .rawRepresentation 值。我一直在尝试对 rawRepresentation 数据类型进行逆向工程以在它和 JWK 之间进行转换。从公钥表示的 64 字节长度来看,它似乎是一个简单的x || y 连接。我猜想私钥会是x || y || d,但情况似乎并非如此,因为这样做应该会产生一个 96 字节的字符串,而实际的 rawRepresentation 是 144 字节强>。它似乎也不是有效的 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