Microsoft 页面提供了有关可使用的格式的“最少”信息CngKey.导入 https://msdn.microsoft.com/en-us/library/bb344680(v=vs.110).aspx. Which actual格式实际上由以下表示CngKeyBlobFormat https://msdn.microsoft.com/en-us/library/system.security.cryptography.cngkeyblobformat(v=vs.110).aspx特性?
-
EccPrivateBlob
-
EccPublicBlob
-
GenericPrivateBlob
GenericPublicBlob
OpaqueTransportBlob
Pkcs8PrivateBlob
只有 PKCS#8 私钥格式稍微暗示了密钥的格式,但它没有指定是否需要包装私钥或者是否只接受内部 PKCS#8 结构。
关于这些格式的信息当然越多越好。
在这一切过程中需要记住的一件事是,CNG 可以通过 CNG 提供商进行扩展,该提供商可能是默认的 Microsoft 软件、智能卡或 HSM 等第三方提供商。任何提供商都可以选择忽略或不支持任何这些格式。这最终归结为NCryptImportKey https://msdn.microsoft.com/en-us/library/windows/desktop/aa376276(v=vs.85).aspx被召唤。 CNG 支持多种格式,此处未列出。注释部分提供了大量有关数据结构的类型和链接的信息。
正如你在NCryptImportKey
文档中,密钥格式是字符串。这CngKeyBlobFormat
只是这些字符串的包装。您可以查看参考来源 https://referencesource.microsoft.com/#System.Core/System/Security/Cryptography/CngKeyBlobFormat.cs,d5fe5c517d3c590f查看这些属性如何映射到 Win32 字符串。例如,EccPrivateBlob
属性是"ECCPRIVATEBLOB"
细绳。
Pkcs8PrivateBlob
正如您所指出的,此格式由PKCS#8 https://www.ietf.org/rfc/rfc5208.txt标准。
不透明传输斑点
Microsoft 无法真正记录这一点,因为它是一个不透明的 blob,并且不能在提供商之间移植。本质上,这意味着提供者选择的表示。
通用公共 Blob
这将是以下内容的二进制表示BCRYPT_KEY_BLOB https://msdn.microsoft.com/en-us/library/windows/desktop/aa375523(v=vs.85).aspx结构。结构中的第一个字段决定了它是具有魔法值的结构。例如,对于 RSA 公钥,它将是BCRYPT_RSAKEY_BLOB https://msdn.microsoft.com/en-us/library/windows/desktop/aa375531(v=vs.85).aspx.
通用私有Blob
除了填写私有参数之外,与上面相同。
Ecc公共Blob
这将是一个BCRYPT_ECCKEY_BLOB https://msdn.microsoft.com/en-us/library/windows/desktop/aa375520(v=vs.85).aspx结构。与上面类似,魔法值将决定 blob 的实际内容。
Ecc私有Blob
除了填写私有参数之外,这与上面相同。
对于以下情况BCRYPT_KEY_BLOB
and BCRYPT_ECCKEY_BLOB
结构,结构充当密钥的“标头”。实际的密钥材料将位于结构之后的同一内存块中。密钥材料的“数量”将根据魔法值和标头中的其他值得知。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)