CngKeyBlobFormat 支持的实际格式是什么?
What are the actual formats supported by CngKeyBlobFormat?
Microsoft 页面提供了有关 CngKey.Import. Which actual formats are actually represented by the following CngKeyBlobFormat
属性可以使用的格式的 "minimal" 信息?
EccPrivateBlob
EccPublicBlob
GenericPrivateBlob
GenericPublicBlob
OpaqueTransportBlob
Pkcs8PrivateBlob
只有 PKCS#8 私钥格式稍微暗示了密钥的格式,但它没有指定是否需要包装私钥,或者是否只接受内部 PKCS#8 结构。
关于这些格式的信息越多越好。
在所有这一切中要记住的一点是,CNG 可以通过 CNG 提供程序进行扩展,这些提供程序可能是默认的 Microsoft 软件、智能卡或像 HSM 这样的第三方提供程序。任何提供商都可以选择忽略或不支持这些格式中的任何一种。这最终归结为 NCryptImportKey
被调用。这里没有列出 CNG 支持的多种格式。那里的备注部分有很多关于数据结构的类型和链接的信息。
如您在 NCryptImportKey
文档中所见,密钥格式是字符串。 CngKeyBlobFormat
只是这些字符串的包装器。您可以在 reference source 中查看这些属性如何映射到 Win32 字符串。例如,EccPrivateBlob
属性 是 "ECCPRIVATEBLOB"
字符串。
Pkcs8PrivateBlob
如您所述,此格式由 PKCS#8 标准指定。
OpaqueTransportBlob
Microsoft 无法真正记录这个,因为它是一个不透明的 blob,并且不能在提供商之间移植。本质上,这意味着提供者选择的表示。
GenericPublicBlob
这将是 BCRYPT_KEY_BLOB
structure. The first field in the structure determines which structure it is with magic values. For example, with RSA public key, it will be a BCRYPT_RSAKEY_BLOB
的二进制表示。
GenericPrivateBlob
同上,只是填写了私有参数
EccPublicBlob
这将是一个 BCRYPT_ECCKEY_BLOB
结构。它与上面的相似之处在于一个魔法值将决定 blob 的实际内容。
EccPrivateBlob
这将与上面相同,只是填写了私有参数。
在 BCRYPT_KEY_BLOB
和 BCRYPT_ECCKEY_BLOB
结构的情况下,这些结构充当键的 "header"。实际的键 material 将在同一个内存块中,在结构之后。 key material 的 "amount" 将根据 magic value 知道,而 header.
中的其他值
Microsoft 页面提供了有关 CngKey.Import. Which actual formats are actually represented by the following CngKeyBlobFormat
属性可以使用的格式的 "minimal" 信息?
EccPrivateBlob
EccPublicBlob
GenericPrivateBlob
GenericPublicBlob
OpaqueTransportBlob
Pkcs8PrivateBlob
只有 PKCS#8 私钥格式稍微暗示了密钥的格式,但它没有指定是否需要包装私钥,或者是否只接受内部 PKCS#8 结构。
关于这些格式的信息越多越好。
在所有这一切中要记住的一点是,CNG 可以通过 CNG 提供程序进行扩展,这些提供程序可能是默认的 Microsoft 软件、智能卡或像 HSM 这样的第三方提供程序。任何提供商都可以选择忽略或不支持这些格式中的任何一种。这最终归结为 NCryptImportKey
被调用。这里没有列出 CNG 支持的多种格式。那里的备注部分有很多关于数据结构的类型和链接的信息。
如您在 NCryptImportKey
文档中所见,密钥格式是字符串。 CngKeyBlobFormat
只是这些字符串的包装器。您可以在 reference source 中查看这些属性如何映射到 Win32 字符串。例如,EccPrivateBlob
属性 是 "ECCPRIVATEBLOB"
字符串。
Pkcs8PrivateBlob
如您所述,此格式由 PKCS#8 标准指定。
OpaqueTransportBlob
Microsoft 无法真正记录这个,因为它是一个不透明的 blob,并且不能在提供商之间移植。本质上,这意味着提供者选择的表示。
GenericPublicBlob
这将是 BCRYPT_KEY_BLOB
structure. The first field in the structure determines which structure it is with magic values. For example, with RSA public key, it will be a BCRYPT_RSAKEY_BLOB
的二进制表示。
GenericPrivateBlob
同上,只是填写了私有参数
EccPublicBlob
这将是一个 BCRYPT_ECCKEY_BLOB
结构。它与上面的相似之处在于一个魔法值将决定 blob 的实际内容。
EccPrivateBlob
这将与上面相同,只是填写了私有参数。
在 BCRYPT_KEY_BLOB
和 BCRYPT_ECCKEY_BLOB
结构的情况下,这些结构充当键的 "header"。实际的键 material 将在同一个内存块中,在结构之后。 key material 的 "amount" 将根据 magic value 知道,而 header.