CNG 功能
CNG 具有下列功能。
密碼編譯靈活度
CNG 的主要價值主張之一是密碼編譯靈活度,有時稱為密碼編譯無從驗證原則。 不過,需要將安全套接字層通訊協定(SSL)或傳輸層安全性(TLS)、CMS(S/MIME)、IPsec、Kerberos 等通訊協定的實作轉換為 CNG,才能使這項能力具有價值。 在 CNG 層級,必須為所有演算法類型提供替代和可探索性(對稱式、非對稱式、哈希函式)、隨機數產生和其他公用程式函式。 通訊協定層級的變更更為重要,因為在許多情況下,新增演算法選取所需的通訊協定 API 和其他彈性選項,而先前不存在。
CNG 在 Windows Vista 中首次提供,並定位為在整個Microsoft軟體堆疊中取代 CryptoAPI 的現有用法。 第三方開發人員會在 CNG 中找到許多新功能,包括:
- 新的密碼編譯組態系統,支援更佳的密碼編譯靈活度。
- 金鑰儲存的更精細抽象概念(以及記憶體與演算法作業的分離)。
- 使用長期索引鍵進行作業的程序隔離。
- 可取代的隨機數產生器。
- 緩解導出簽署限制。
- 整個堆疊的線程安全性。
- 內核模式密碼編譯 API。
此外,CNG 也支援所有必要的 Suite B 演算法,包括 橢圓曲線加密 (ECC)。 現有的 CryptoAPI 應用程式會隨著 CNG 的可用而繼續運作。
認證與合規性
CNG 會向美國聯邦資訊處理標準 (FIPS) 140-2 進行驗證,並屬於 Windows 通用準則認證評估目標的一部分。 CNG 的設計目的是要作為 FIPS 層級 2 驗證系統中的元件使用。
CNG 會藉由在安全程式中儲存和使用長期密鑰,以符合通用準則需求。
Suite B 支援
CNG 的一個重要功能是其對 Suite B 演演算法的支援。 2005年2月,美國 國家安全局(NSA)宣佈了一組協調的對稱加密、非對稱秘密協定(也稱為密鑰交換)、數位簽名和哈希功能,供未來的美國政府使用名為 Suite B。國家安全局已宣佈,經認證的 Suite B 實作可以並用於保護指定為最高機密、秘密和私人資訊的信息,過去被描述為敏感-但未分類的資訊。 因此,Suite B 支援對於應用程式軟體廠商和系統整合者以及Microsoft非常重要。
所有 Suite B 演算法都是公開的。 它們已開發於政府密碼編譯演算法開發的歷史機密範圍之外。 在同一時間範圍內,一些歐洲國家和地區也提出了保護其資訊的相同 Suite B 需求。
Suite B 密碼編譯建議在許多現有通訊協定中使用橢圓曲線 Diffie-Hellman (ECDH),例如因特網密鑰交換(IKE,主要用於 IPsec)、 傳輸層安全性 (TLS),以及安全 MIME (S/MIME)。
CNG 包含延伸至所有必要演算法的 Suite B 支援:AES(所有密鑰大小)、SHA-256、SHA-384 和 SHA-512) 哈希演算法、ECDH 和橢圓曲線 DSA (ECDSA)在 NIST 標準質曲線 P-256、P-384 和 P-521 上。 Windows Vista 隨附的Microsoft演算法提供者不支援二進位曲線、Koblitz 曲線、自定義質曲線和橢圓曲線 Menezes-Qu-Vanstone (ECMQV)。
舊版支援
CNG 支援 CryptoAPI 1.0 中目前一組演算法。 CNG 將繼續支援 CryptoAPI 1.0 中目前支援的每個演算法。
核心模式支援
CNG 支援核心模式中的密碼編譯。 核心和使用者模式都使用相同的 API,以完全支援密碼編譯功能。 除了將使用 CNG 的開機程式之外,SSL/TLS 和 IPsec 也會以核心模式運作。 並非所有 CNG 函式都可以從核心模式呼叫。 無法從核心模式呼叫之函式的參考主題,會明確指出無法從核心模式呼叫函式。 否則,如果呼叫端在 IRQL PASSIVE_LEVEL執行,則可以從核心模式呼叫所有 CNG 函式。 此外,根據提供者的功能,某些核心模式 CNG 函式可能會在 IRQL DISPATCH_LEVEL呼叫。
Microsoft核心安全性支援提供者介面 (Ksecdd.sys) 是位於 Windows 核心模式層級的一般用途、以軟體為基礎的密碼編譯模組。 Ksecdd.sys以核心模式匯出驅動程式的形式執行,並透過其記載的介面將密碼編譯服務提供給核心元件。 Ksecdd.sys不支援的唯一內建Microsoft提供者演算法是 DSA。
Windows Server 2008 和 Windows Vista: CNG 不支援核心模式中的插入式演算法和提供者。 核心模式中唯一支援的密碼編譯演算法是透過核心模式 CNG API Microsoft所提供的實作。
稽核
為了符合一些通用準則需求,除了提供完整的安全性之外,CNG 層中發生的許多動作都會在Microsoft軟體密鑰儲存提供者 (KSP) 中稽核。 Microsoft KSP 遵循下列指導方針,在安全性記錄中建立稽核記錄:
- 必須稽核金鑰和金鑰組產生失敗,包括自我測試失敗。
- 必須稽核金鑰匯入和匯出。
- 必須稽核金鑰解構失敗。
- 寫入和讀取檔案時,必須稽核永續性密鑰。
- 必須稽核配對一致性檢查失敗。
- 秘密金鑰驗證失敗,如果有的話,必須稽核,例如 3DES 金鑰的同位檢查。
- 必須稽核加密、解密、哈希、簽章、驗證、金鑰交換和隨機數位產生失敗。
- 密碼編譯自我測試必須經過稽核。
一般而言,如果索引鍵沒有名稱,則為暫時索引鍵。 暫時金鑰不會保存,且Microsoft KSP 不會產生暫時密鑰的稽核記錄。 Microsoft KSP 只會在 LSA 程式中以使用者模式產生稽核記錄。 核心模式 CNG 不會產生稽核記錄。 系統管理員必須設定審核策略,以從安全性記錄取得所有 KSP 稽核記錄。 系統管理員必須執行下列命令行,以設定 KSP 所產生的其他稽核:
auditpol /set /subcategory:“other system events” /success:enable /failure:enable
可取代的隨機數產生器
CNG 提供的另一項改進是能夠取代預設隨機數產生器 (RNG)。 在 CryptoAPI 中,有可能提供替代 RNG 作為密碼編譯服務提供者 (CSP) 的一部分,但無法將Microsoft基底 CSP 重新導向至使用另一個 RNG。 CNG 可讓您明確指定特定 RNG 以在特定呼叫中使用。
執行緒安全
從個別線程呼叫時,修改相同記憶體區域的任何函式(重要區段)都不是安全線程。
作業模式
CNG 支援五種可透過加密 API 搭配對稱區塊加密使用的作業模式。 下表列出這些模式及其支援性。 您可以使用 BCryptSetProperty 函式來設定演算法提供者的 BCRYPT_CHAINING_MODE 屬性,即可變更作業模式。
作業模式 | BCRYPT_CHAINING_MODE值 | 演算法 | 標準 |
---|---|---|---|
歐洲央行(電子代碼簿) | BCRYPT_CHAIN_MODE_ECB | 對稱區塊加密 | SP800-38A |
CBC (加密區塊鏈結) | BCRYPT_CHAIN_MODE_CBC | 對稱區塊加密 | SP800-38A |
CFB (加密意見反應) | BCRYPT_CHAIN_MODE_CFB | 對稱區塊加密 | SP800-38A |
CCM (與 CBC 的計數器) | BCRYPT_CHAIN_MODE_CCM | AES | SP800-38C |
GCM (加洛瓦/計數器模式) | BCRYPT_CHAIN_MODE_GCM | AES | SP800-38D |
注意
Windows Vista 中只會定義 ECB、CBC 和 CFB 作業模式。 GCM 和 CCM 需要 Windows Vista Service Pack 1 (SP1) 或 Windows Server 2008。