統一安全管控之密鑰管理KMS-服務器運維
2020-05-08 19:13 作者:admin
統一安全管控之密鑰管理KMS-服務器運維
談到信息安全免不了要解決一個問題就是數據加密。加密就會涉及到密鑰相關的問題,比如密鑰的生成、傳輸、保存、泄露等問題。如何保護好密鑰的安全就成了信息安全的非常重要的一個部分。
一、為什么要統一管控密鑰
談到信息安全免不了要解決一個問題就是數據加密。加密就會涉及到密鑰相關的問題,比如密鑰的生成、傳輸、保存、泄露等問題。如何保護好密鑰的安全就成了信息安全的非常重要的一個部分。某司員工將密鑰泄漏到開源網站導致重要數據丟失事件,君們還記得否?如果有完善的KMS系統這種情況很大程度上就可以避免了。
對于大部分沒有KMS管理系統的公司而言,密鑰本地化會導致密鑰分散在代碼、配置文件中。缺乏統一管理,造成開發、維護成本巨大,而且導致密鑰容易泄露。還有一部分公司采用硬件加密機來管理密鑰即HSM,全稱Hardware Security Module,這種方式管理密鑰安全性確實很高,但是因為各級密鑰都在HSM中管理所以成本過高。
采用軟硬件結合是比較好的方式,通過項目密鑰管理服務KMS輕松創建和管理密鑰,同時提供對密鑰的保護,避免密鑰泄漏。使開發者沒有必要投入大量時間和精力來保證密鑰的保密性、完備性和可用性。通過密鑰管理服務,開發者在處理密鑰時會更安全、更方便簡單,這樣可以更集中時間精力去研發如何借助加解密功能來實現業務場景。
二、KMS設計
1. 密鑰分級
這里按密鑰作用劃分為三級:
· 數據加密密鑰(DEK):將用于數據加密的密鑰,也稱三級密鑰(DEK);一般公司里面一個應用對應一個DEK。
· 密鑰加密密鑰(KEK):保護三級的密鑰,也稱二級密鑰(KEK 即對DEK進行加密);一般公司里面一個部門對應一個KEK,DEK在KEK管轄之內。
· 根密鑰(RootKey):保護二級密鑰的密鑰,也稱一級密鑰(RootKey,即是對KEK進行加密),根密鑰構成了整個密鑰管理系統的關鍵。
2. 基本架構
本文中的KMS由三大部分組成SDK、后臺服務、HSM。
SDK:主要提供給服務的使用者集成到自己開發的項目中,實現密鑰的創建、導入、啟用、禁用等相關密鑰管理和加密以及解密等常見操作。SDK分為:Client模塊、加解密模塊,主要負責提供簡單接口完成加密解密功能。
KMS服務:主要負責從硬件安全模塊獲取和保存根密鑰,并且安全地保存在后臺內存中,然后通過密鑰的派生算法生成KEK進而生成DEK。分為,根密鑰加載模塊、密鑰派生模塊、Server模塊。
HSM:提供根密鑰生成和保管服務。
架構圖
架構圖描述:
根密鑰生成,為了生成根密鑰的保密性,由三個人分別輸入三段約定好算法的隨機因子到HSM中去生成根密鑰,非法讀取HSM中的根密鑰會導致HSM被破壞而不可用從而保護了根密鑰不被泄露。另外為了保存好根密鑰以備及時恢復,要將三段隨機因子分別保存到三個保險柜中。
為了防止根密鑰被泄露,根密鑰RootKey由密鑰管理服務KMS從硬件安全模塊即HSM中讀取,按照一定的分散算法打散存儲在內存中。
開發者將SDK集成到自己開發的服務或者系統的代碼中,以實現只需要調用較為簡單抽象的接口就能夠使用密鑰管理服務的相關功能。SDK中進行加解密是為了防止業務方私自保存密鑰。Client模塊主要是負責SDK的Http請求相關的功能,加解密模塊則是負責SDK加解密相關的功能。
3. 運行功能
密鑰派生:
KMS中最為關鍵的模塊是密鑰派生模塊。根據用戶ID和隨機因子通過偽隨機函數派生出KEK或者DEK等密鑰。KMS杜絕明文持久化保存密鑰,派生出來的KEK通過Rootkey加密保存在數據庫,派生出來的DEK通過KEK加密保存在數據庫。
創建密鑰:
· 用戶調用KMS提供的SDK中的創建用戶數據密鑰接
· 用戶傳入用戶ID等必要信息(如果要創建KEK則傳入部門信息,如果創建DEK則傳入應用信息)
· KMS服務器驗證請求
· 驗證通過,KMS服務器在該用戶名下創建新的密鑰并返回密鑰ID
密鑰加密(解密同理):
· 服務調用方調用KMS提供的SDK中直接加密的接
· 服務調用方傳入用戶ID、密鑰ID、待加密明文
· KMS服務器驗證密鑰ID、用戶ID以及是否為用戶ID名下
· 驗證通過,KMS服務器返回DEK到SDK中
· SDK加密算法中對明文進行加密,并返回密文
三、推動業務方使用KMS
就算KMS再安全,業務方不愿意使用對于安全來說無疑也是掩耳盜鈴。
如何讓業務方愿意使用,需要技術和管理相結合去推動。管理上:自上往下推動,通過高管的支持通知業務方使用KMS以及講述使用KMS帶來的收益,并通過KMS管理規范約定不通過KMS來使用密鑰所承擔的責任。通過定期安全宣傳和培訓從反面和正面去講述其中利害。技術上:定期進行專項檢查,通過代碼掃描查看代碼中存在的密鑰硬編碼,如果存在密鑰硬編碼則說明很有可能業務方自行創建保管密鑰;定期去大數據平臺進行掃描將個別字段傳入KMS加密接口查看返回密文跟數據庫中的密文對比,如果一樣說明采用了KMS加密,如果不一樣很有可能就是自行保管密鑰。
現有一切加密技術都是建立在密鑰破解時間很長的情況下,暢想下如果量子計算機出現了,幾秒鐘就能破解2048位的密鑰,那么現有的加密技術都將形同虛設。