目的
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功能的回傳碼。 若密碼操作失敗且被默默忽略,可能導致資料被未加密儲存。