密碼編譯 API:新一代

目的

Cryptography API: Next Generation(CNG)是 CryptoAPI 的長期替代方案。 CNG 是設計成可在許多層級進行擴充,且行為上與密碼編譯無關。

開發人員受眾

CNG 是供應用程式開發人員使用,可讓使用者在安全的環境中建立和交換檔和其他數據,特別是透過因特網等不安全的媒體。 開發人員應該熟悉 C 和 C++ 程式設計語言和以 Windows 為基礎的程式設計環境。 雖然不是必備條件,但仍建議對密碼學或安全性相關主題有所了解。

如果您要開發 CNG 密碼編譯演算法提供者或金鑰儲存提供者,您必須從 Microsoft 下載 密碼編譯提供者開發工具組。

運行時間需求

從 Windows Server 2008 和 Windows Vista 開始,支援 CNG。 如需了解特定程式元素的執行時需求資訊,請參閱該元素參考頁面的需求區。

在本節中

以下主題提供有關CNG的資訊,以及如何在您的應用中使用它:

主題 描述
關於 CNG 描述 CNG 功能、密碼編譯基本類型,以及金鑰儲存、擷取、匯入和匯出。
使用 CNG 說明如何使用 CNG 和一般 CNG 程式設計的密碼編譯組態功能。
CNG 參考資料 CNG 程式設計項目的詳細描述。 這些頁面包含用來搭配 CNG 使用之 API 的參考說明。

何時使用 CNG

當你需要直接控制 Windows 應用程式中的密碼操作時,請使用 CNG。 以下指引協助您選擇合適的 API:

Scenario 推薦的 API
對稱加密/解密(AES,ChaCha20-Poly1305) CNG(BCryptEncrypt / BCryptDecrypt)
雜湊(SHA-256、SHA-384、SHA-512) CNG(BCryptCreateHash)
非對稱操作(RSA、ECDSA、ML-DSA) CNG(BCryptSignHash、 BCryptVerifySignature)
保護靜態存放的使用者資料(每位使用者或每部電腦範圍) DPAPI (較簡單,無需金鑰管理)
保護多位使用者或多台機器可存取的資料 DPAPI-NG (NCryptProtectSecret)
TLS/SSL 連線 Schannel (內部使用 CNG)
已經使用 CryptoAPI 的舊程式碼 維護時繼續使用 CryptoAPI,但新功能則規劃遷移至 CNG

Warning

常見的密碼學陷阱:

  • 不要使用 ECB 區塊密碼模式——這會洩漏明文模式。 使用搭配隨機 IV 的 CBC,或者,更理想的是使用 GCM 之類的驗證模式。
  • 不要在原始碼裡硬編碼加密金鑰。 使用金鑰儲存供應商或 DPAPI 來保護金鑰。
  • 請勿使用MD5或SHA-1來維護完整性或安全。 使用SHA-256或更強的。
  • 務必驗證來自CNG功能的回傳碼。 若密碼操作失敗且被默默忽略,可能導致資料被未加密儲存。

密碼提供商開發套件

加密API