需要注意的一點是CNG可以通過CNG Providers(可能是默認的Microsoft Software one,智能卡或HSM等第三方提供商)進行擴展。任何提供商可能會選擇忽略或不支持任何這些格式。這最終歸結爲NCryptImportKey
被調用。 CNG支持的許多格式未在此處列出。備註部分有很多關於數據結構類型和鏈接的信息。
正如您在NCryptImportKey
文檔中看到的,密鑰格式是一個字符串。 CngKeyBlobFormat
只是這些字符串的包裝。您可以查看reference source以查看這些屬性如何映射到Win32字符串。例如,EccPrivateBlob
屬性是"ECCPRIVATEBLOB"
字符串。
Pkcs8PrivateBlob
正如你提到的,這種格式是由PKCS#8標準規定。
OpaqueTransportBlob
這一個微軟無法真正記錄,因爲它是一個不透明的斑塊,而不是供應商之間移植。實質上,這意味着供應商選擇的表示形式。
GenericPublicBlob
這將是BCRYPT_KEY_BLOB
結構的二進制表示。結構中的第一個字段確定它具有魔術值的結構。例如,使用RSA公鑰,它將是BCRYPT_RSAKEY_BLOB
。
GenericPrivateBlob
這是如上述,除了私有參數填充在相同的。
EccPublicBlob
這將是一個BCRYPT_ECCKEY_BLOB
結構。它與上面的相似之處在於,魔法值將決定blob的實際內容。
EccPrivateBlob
這將是與上述相同,除了私有參數填充。
在箱子爲BCRYPT_KEY_BLOB
和BCRYPT_ECCKEY_BLOB
結構,所述結構充當「報頭」爲鑰匙。實際的密鑰材料將在結構之後位於同一塊內存中。根據幻數值和標題中的其他值將知道密鑰材料的「數量」。
哇,沒想到這個這麼快就這麼完全回答了! –