一、為什么要統(tǒng)一管控密鑰
談到信息安全免不了要解決一個問題就是數(shù)據(jù)加密较幌。加密就會涉及到密鑰相關(guān)的問題白翻,比如密鑰的生成、傳輸岛琼、保存巢株、泄露等問題。如何保護(hù)好密鑰的安全就成了信息安全的非常重要的一個部分。某司員工將密鑰泄漏到開源網(wǎng)站導(dǎo)致重要數(shù)據(jù)丟失事件灭袁,君們還記得否?如果有完善的KMS系統(tǒng)這種情況很大程度上就可以避免了倦炒。
對于大部分沒有KMS管理系統(tǒng)的公司而言软瞎,密鑰本地化會導(dǎo)致密鑰分散在代碼、配置文件中鳖藕。缺乏統(tǒng)一管理,造成開發(fā)只锭、維護(hù)成本巨大,而且導(dǎo)致密鑰容易泄露喉誊。還有一部分公司采用硬件加密機來管理密鑰即HSM,全稱Hardware Security Module,這種方式管理密鑰安全性確實很高栋盹,但是因為各級密鑰都在HSM中管理所以成本過高敷矫。
采用軟硬件結(jié)合是比較好的方式,通過項目密鑰管理服務(wù)KMS輕松創(chuàng)建和管理密鑰,同時提供對密鑰的保護(hù),避免密鑰泄漏沪饺。使開發(fā)者沒有必要投入大量時間和精力來保證密鑰的保密性整葡、完備性和可用性。通過密鑰管理服務(wù),開發(fā)者在處理密鑰時會更安全啼器、更方便簡單,這樣可以更集中時間精力去研發(fā)如何借助加解密功能來實現(xiàn)業(yè)務(wù)場景俱萍。
二、KMS設(shè)計
a)密鑰分級
這里按密鑰作用劃分為三級:
數(shù)據(jù)加密密鑰(DEK):將用于數(shù)據(jù)加密的密鑰,也稱三級密鑰(DEK);一般公司里面一個應(yīng)用對應(yīng)一個DEK损谦。
密鑰加密密鑰(KEK):保護(hù)三級的密鑰,也稱二級密鑰(KEK 即對DEK進(jìn)行加密);一般公司里面一個部門對應(yīng)一個KEK岳颇,DEK在KEK管轄之內(nèi)。
根密鑰(RootKey):保護(hù)二級密鑰的密鑰栗精,也稱一級密鑰(RootKey瞻鹏,即是對KEK進(jìn)行加密),根密鑰構(gòu)成了整個密鑰管理系統(tǒng)的關(guān)鍵薪夕。
b)基本架構(gòu)
本文中的KMS由三大部分組成SDK叭披、后臺服務(wù)玩讳、HSM嚼贡。
SDK:主要提供給服務(wù)的使用者集成到自己開發(fā)的項目中,實現(xiàn)密鑰的創(chuàng)建、導(dǎo)入樟澜、啟用叮盘、禁用等相關(guān)密鑰管理和加密以及解密等常見操作。SDK分為:Client模塊毒费、加解密模塊愈魏,主要負(fù)責(zé)提供簡單接口完成加密解密功能。
KMS服務(wù):主要負(fù)責(zé)從硬件安全模塊獲取和保存根密鑰,并且安全地保存在后臺內(nèi)存中,然后通過密鑰的派生算法生成KEK進(jìn)而生成DEK溪厘。分為牌柄,根密鑰加載模塊、密鑰派生模塊蹋宦、Server模塊咒锻。
HSM:提供根密鑰生成和保管服務(wù)。
架構(gòu)圖
架構(gòu)圖描述:
根密鑰生成,為了生成根密鑰的保密性敦捧,由三個人分別輸入三段約定好算法的隨機因子到HSM中去生成根密鑰碰镜,非法讀取HSM中的根密鑰會導(dǎo)致HSM被破壞而不可用從而保護(hù)了根密鑰不被泄露。另外為了保存好根密鑰以備及時恢復(fù)秽荤,要將三段隨機因子分別保存到三個保險柜中。
為了防止根密鑰被泄露课兄,根密鑰RootKey由密鑰管理服務(wù)KMS從硬件安全模塊即HSM中讀取,按照一定的分散算法打散存儲在內(nèi)存中晨继。
開發(fā)者將SDK集成到自己開發(fā)的服務(wù)或者系統(tǒng)的代碼中,以實現(xiàn)只需要調(diào)用較為簡單抽象的接口就能夠使用密鑰管理服務(wù)的相關(guān)功能。SDK中進(jìn)行加解密是為了防止業(yè)務(wù)方私自保存密鑰蜒茄。Client模塊主要是負(fù)責(zé)SDK的Http請求相關(guān)的功能,加解密模塊則是負(fù)責(zé)SDK加解密相關(guān)的功能餐屎。
c)運行功能
密鑰派生:
KMS中最為關(guān)鍵的模塊是密鑰派生模塊。根據(jù)用戶ID和隨機因子通過偽隨機函數(shù)派生出KEK或者DEK等密鑰屿聋。KMS杜絕明文持久化保存密鑰庆聘,派生出來的KEK通過Rootkey加密保存在數(shù)據(jù)庫,派生出來的DEK通過KEK加密保存在數(shù)據(jù)庫象对。
創(chuàng)建密鑰:
1.用戶調(diào)用KMS提供的SDK中的創(chuàng)建用戶數(shù)據(jù)密鑰接
2.用戶傳入用戶ID等必要信息(如果要創(chuàng)建KEK則傳入部門信息勒魔,如果創(chuàng)建DEK則傳入應(yīng)用信息)
3.KMS服務(wù)器驗證請求
4.驗證通過,KMS服務(wù)器在該用戶名下創(chuàng)建新的密鑰并返回密鑰ID
密鑰加密(解密同理):
1.服務(wù)調(diào)用方調(diào)用KMS提供的SDK中直接加密的接
2.服務(wù)調(diào)用方傳入用戶ID菇曲、密鑰ID、待加密明文
3.KMS服務(wù)器驗證密鑰ID弟胀、用戶ID以及是否為用戶ID名下
4.驗證通過,KMS服務(wù)器返回DEK到SDK中
5.SDK加密算法中對明文進(jìn)行加密喊式,并返回密文
三、推動業(yè)務(wù)方使用KMS
就算KMS再安全夏哭,業(yè)務(wù)方不愿意使用對于安全來說無疑也是掩耳盜鈴献联。
如何讓業(yè)務(wù)方愿意使用何址,需要技術(shù)和管理相結(jié)合去推動用爪。管理上:自上往下推動龄减,通過高管的支持通知業(yè)務(wù)方使用KMS以及講述使用KMS帶來的收益,并通過KMS管理規(guī)范約定不通過KMS來使用密鑰所承擔(dān)的責(zé)任烁巫。通過定期安全宣傳和培訓(xùn)從反面和正面去講述其中利害宠能。技術(shù)上:定期進(jìn)行專項檢查,通過代碼掃描查看代碼中存在的密鑰硬編碼阿弃,如果存在密鑰硬編碼則說明很有可能業(yè)務(wù)方自行創(chuàng)建保管密鑰羞延;定期去大數(shù)據(jù)平臺進(jìn)行掃描將個別字段傳入KMS加密接口查看返回密文跟數(shù)據(jù)庫中的密文對比,如果一樣說明采用了KMS加密入愧,如果不一樣很有可能就是自行保管密鑰嗤谚。
現(xiàn)有一切加密技術(shù)都是建立在密鑰破解時間很長的情況下,暢想下如果量子計算機出現(xiàn)了旁赊,幾秒鐘就能破解2048位的密鑰椅野,那么現(xiàn)有的加密技術(shù)都將形同虛設(shè)。