7

Microsoft 页面提供有关CngKey.Import可以使用的格式的“最少”信息。以下属性实际上代表了哪些实际格式?CngKeyBlobFormat

  • EccPrivateBlob
  • EccPublicBlob
  • GenericPrivateBlob
  • GenericPublicBlob
  • OpaqueTransportBlob
  • Pkcs8PrivateBlob

只有 PKCS#8 私钥格式稍微暗示了密钥的格式,但它没有指定是否需要包装私钥,或者是否只接受内部 PKCS#8 结构。

当然,关于这些格式的信息越多越好。

4

1 回答 1

14

在所有这一切中要记住的一件事是,CNG 可以通过 CNG 提供程序进行扩展,这可能是默认的 Microsoft 软件、智能卡或 HSM 等第 3 方提供程序。任何提供商都可以选择忽略或不支持任何这些格式。这最终归结为NCryptImportKey被调用。CNG 支持的许多格式未在此处列出。那里的备注部分有很多关于数据结构的类型和链接的信息。

正如您在NCryptImportKey文档中看到的,密钥格式是字符串。这CngKeyBlobFormat只是这些字符串的包装。您可以查看参考源以了解这些属性如何映射到 Win32 字符串。例如,EccPrivateBlob属性是"ECCPRIVATEBLOB"字符串。

Pkcs8PrivateBlob

如您所述,此格式由PKCS#8标准指定。

不透明传输块

这个 Microsoft 无法真正记录,因为它是一个不透明的 blob,并且不能在提供程序之间移植。本质上,这意味着提供者选择的表示。

通用公共块

这将是BCRYPT_KEY_BLOB结构的二进制表示。结构中的第一个字段决定了它是哪个具有魔法值的结构。例如,使用 RSA 公钥,它将是一个BCRYPT_RSAKEY_BLOB.

GenericPrivateBlob

除了填写私有参数外,这与上面相同。

EccPublicBlob

这将是一个BCRYPT_ECCKEY_BLOB结构。它与上面的相似之处在于魔法值将确定 blob 的实际内容。

EccPrivateBlob

除了填写私有参数外,这将与上面相同。

在 forBCRYPT_KEY_BLOBBCRYPT_ECCKEY_BLOB结构的情况下,结构充当键的“标题”。实际的密钥材料将在结构之后的同一内存块中。密钥材料的“数量”将根据魔法值和标头中的其他值来知道。

于 2017-04-01T19:08:11.583 回答