CngKeyBlobFormat支持的实际格式是什么?

时间:2017-04-01 18:44:51

标签: c# cryptography standards cng

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

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

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

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

1 个答案:

答案 0 :(得分:10)

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

正如您在NCryptImportKey文档中看到的那样,密钥格式是一个字符串。 CngKeyBlobFormat只是这些字符串的包装。您可以查看reference source以查看这些属性如何映射到Win32字符串。例如,EccPrivateBlob属性是"ECCPRIVATEBLOB"字符串。

  

Pkcs8PrivateBlob

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

  

OpaqueTransportBlob

这个Microsoft无法真正记录,因为它是一个不透明的blob,并且在提供程序之间不可移植。从本质上讲,这是供应商选择的表示。

  

GenericPublicBlob

这将是BCRYPT_KEY_BLOB结构的二进制表示。结构中的第一个字段使用魔术值确定它的结构。例如,使用RSA公钥,它将是BCRYPT_RSAKEY_BLOB

  

GenericPrivateBlob

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

  

EccPublicBlob

这将是BCRYPT_ECCKEY_BLOB结构。它与上面类似,因为魔术值将决定blob的实际内容。

  

EccPrivateBlob

除了填写私人参数外,这与上述相同。

BCRYPT_KEY_BLOBBCRYPT_ECCKEY_BLOB结构的情况下,结构充当"标题"为了钥匙。在结构之后,实际的密钥材料将位于相同的内存块中。 "金额"密钥材料将根据魔术值以及标题中的其他值进行了解。