2017-04-01 154 views
5

Microsoft頁面提供有關CngKey.Import可以使用的格式的「最少」信息。其中實際格式實際上由以下CngKeyBlobFormat屬性表示?CngKeyBlobFormat支持的實際格式是什麼?

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

只有PKCS#8私鑰格式提示SL ightly密鑰的格式,但它不指定是否需要封裝私鑰或僅接受內部PKCS#8結構。

關於這些格式的更多信息當然會更好。

回答

7

需要注意的一點是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_BLOBBCRYPT_ECCKEY_BLOB結構,所述結構充當「報頭」爲鑰匙。實際的密鑰材料將在結構之後位於同一塊內存中。根據幻數值和標題中的其他值將知道密鑰材料的「數量」。

+2

哇,沒想到這個這麼快就這麼完全回答了! –