密鑰分層管理結構
- 密鑰的安全管理通常采用層次化的保護方法。密鑰管理分層管理機制將密鑰分為三層,即根密鑰、密鑰加密密鑰和工作密鑰
- 下層密鑰為上層密鑰提供加密保護,采用分層的密鑰結構有助于密鑰的管理滿足本規范的要求
工作密鑰
- 工作密鑰對本地保存的敏感數據和需要在不安全信道上傳輸的數據提供機密性、完整性保護,還可提供認證和簽名等密碼學服務。工作密鑰直接被上層應用程序所使用,包括存儲加密使用的密鑰、預共享密鑰、MAC密鑰、簽名私鑰等
密鑰加密密鑰
-
對工作密鑰提供機密性保護的密鑰,其自身受到根密鑰的保護。對于較為簡單、安全等級要求不高的密碼應用系統,密鑰加密密鑰的職能可以直接由根密鑰兼任
根密鑰
- 位于密鑰管理分層結構的最底端,用于對上層密鑰(如密鑰加密密鑰)的機密性進行保護
規則
- 密鑰分層管理至少選擇兩層結構進行管理
- 密鑰的分層管理機制最少把密鑰分為兩層,即:根密鑰和工作密鑰,根密鑰為工作密鑰提供加密保護。根密鑰、工作密鑰的生成必須滿足密鑰生成的相關要求。
密鑰分層管理結構
- 密鑰分層管理結構的選擇與其應用場景有密切的關系。選擇三層結構還是兩層結構取決于產品所涉及的加密應用場景的復雜度。應用場景復雜的情況推薦使用三層管理結構。
根密鑰更新過程產生大量的加解密運算開銷
- 在應用系統中,如果使用根密鑰直接保護工作密鑰,根密鑰的更新會導致所有受其加密保護的工作密鑰需要全部使用更新前的根密鑰解密,再重新使用更新后的根密鑰加密。當工作密鑰數量比較龐大時,對工作密鑰的解密和加密操作將耗費大量的資源并影響系統的性能。為解決上述問題,推薦使用三層密鑰管理結構,在根密鑰和工作密鑰之間增加一層密鑰加密密鑰(KEK),密鑰加密密鑰對工作密鑰進行加密保護,根密鑰則對KEK進行加密保護。當根密鑰更新時,只需要解密和重新加密KEK即可,由于KEK的數量遠遠小于工作密鑰數量,對KEK的解密和加密操作不會消耗大量資源,對系統的性能影響很小。當KEK更新時,將需要被更新的KEK和被其保護的工作密鑰都保存成歷史密鑰信息。應用系統需要解密被歷史密鑰信息加密的數據時,直接使用歷史密鑰解密即可。
系統要求頻繁的進行工作密鑰更新
- 在應用系統中,如果工作密鑰的更新頻率很高,典型的應用場景是工作密鑰作為通信密鑰(可能要求每次會話都被要求使用不同的密鑰)。該場景下的工作密鑰更新過程通常在線進行,需要使用工作密鑰的下層密鑰加密保護工作密鑰的傳輸過程。如果使用根密鑰直接保護工作密鑰,根密鑰加密的密文會頻繁的在不安全的信道上傳輸,并易于被攻擊者截獲。攻擊者可以通過分析大量密文破解根密鑰。雖然通過更新根密鑰的方法可以有效避免上述對根密鑰的攻擊,但根密鑰更新周期一般較長,且一般使用手動方式更新,無論采用白盒密碼還是基于密鑰組件的根密鑰保護方案,根密鑰的更新操作都較為繁瑣,難以廣泛的適應該應用場景的要求。為解決上述問題,推薦使用三層密鑰管理結構,在根密鑰和工作密鑰之間增加一層密鑰加密密鑰(KEK),工作密鑰的更新過程使用KEK保護,由于KEK的更新頻率遠遠小于工作密鑰的更新頻率,KEK的更新可以使用根密鑰保護。由于KEK更新周期相對較長,即使攻擊者可以截獲使用根密鑰加密的KEK密文,獲取的密文數量也非常有限,所以攻擊者很難通過分析密文破解出根密鑰。
應用系統結構復雜
- 如果應用系統中包含兩個或者兩個以上的子系統,各子系統之間的業務相互獨立,每個子系統都為用戶提供不同的服務。在這樣的場景下,各子系統使用的密鑰應該各不相同。如果不同的應用系統之間使用的工作密鑰都被根密鑰保護,根密鑰的泄露(根密鑰的泄露風險可參考“系統要求頻繁的進行密鑰更新”場景)將導致各子系統由密碼機制保障的安全性完全失效。為解決上述問題,推薦使用三層密鑰管理結構,在根密鑰和工作密鑰之間增加一層密鑰加密密鑰(KEK),為每個子系統分配各自的KEK,這樣即使某一個子系統的KEK泄露,密碼安全機制失效的威脅僅也限于該子系統內,不會影響其他子系統的安全性,而且由于KEK更新較為方便,當發生KEK泄露的事故后,可以通過立即更新KEK的方法將信息泄露的損失最小化。
密鑰的聲明周期
密鑰生命周期 | 由于不良設計可能導致的安全問題 |
生成 | 生成算法隨機性差,導致密鑰可被預測,或攻擊者可以自己生成密鑰。 |
分發 | 密鑰明文分發,導致密鑰存在被攻擊者截獲的風險。 |
更新 | 密鑰從不更新,導致攻擊者更容易獲取密鑰,從而能夠輕易獲取敏感數據的明文。 |
存儲 | 密鑰明文存儲在數據庫中,導致攻擊者容易讀取出密鑰,從而能夠輕易獲取敏感數據的明文。 |
備份 | 如果重要密鑰從不備份,一旦密鑰丟失,將導致原有加密的數據不能解密,大大降低了系統可靠性。 |
銷毀 | 密鑰僅被普通刪除,導致攻擊者有可能恢復出密鑰。 |
密鑰生命周期的安全管理
密鑰的生成
- 密鑰通常被劃分成對稱密鑰和非對稱密鑰。常用的密鑰生成方式包括:基于安全的隨機數發生器、基于密鑰導出函數、基于標準的密鑰協商機制、基于安全的密鑰生成工具等。利用隨機數發生器、密鑰導出函數、密鑰協商等方式來生成密鑰,均應遵循一些規則,以使產生的密鑰足夠安全。
密鑰必須支持可更新,并明確更新的周期
原因
- 密鑰使用時間越長,攻擊者花費精力去破解它的誘惑也越大,這使得密鑰被破解的風險也越大;
- 密鑰加密的數據量越多,攻擊者能夠獲取到密文的數據機會也越大,而對被同一個密鑰加密的多個密文進行密碼學分析相對比較容易,導致密鑰越容易被破解;
- 如果密鑰已經泄露,那么密鑰被使用的時間越久,損失越大。
密鑰的生命周期的結構因素
- 密文被攻擊者進行密碼分析的可能性
- 密鑰泄露產生的連鎖危害的嚴重程度
- 密鑰本身的保護機制(如:訪問控制)的強度
- 被密鑰保護的敏感數據的重要程度
- 密鑰因為某些管理原因造成泄露的可能性等
密鑰的更新的兩種方式
- 系統定期自動更新密鑰。執行密鑰更新時,系統根據密鑰生成的規則,重新生成新密鑰,同時使用舊密鑰解密已加密的數據,并使用新生成的密鑰重新加密,同時銷毀舊密鑰;對于加密數據量很大的場景,可以考慮保留舊密鑰,用于解密舊密鑰加密的數據,同時使用更新后的密鑰加密新數據。此方式適用于系統可自主生成密鑰的場景。
- 管理員手動更新密鑰。管理員根據實際需要,觸發密鑰更新指令,系統接收到更新指令后,根據密鑰生成規則,重新生成密鑰;或者管理員利用安全的密鑰生成工具,重新生成新密鑰。生成新密鑰后,系統利用舊密鑰解密已加密的數據,并使用新密鑰重新加密數據,同時銷毀舊密鑰;對于加密數據量很大的場景,可以考慮保留舊密鑰,用于對舊數據的解密,同時使用更新后的密鑰加密新數據。?
參考鏈接
- 密鑰安全性討論
- 網絡安全系列 之 密鑰安全管理