干货丨看金仓数据库如何支持透明加密!
數(shù)據(jù)庫透明加密是指對庫內(nèi)數(shù)據(jù)的加密和解密,對數(shù)據(jù)庫的訪問程序是完全無感知的。特別是應(yīng)用系統(tǒng),不需要做任何修改,就可以直接操作加密對象。
金倉數(shù)據(jù)庫支持基于透明加密,支持RC4, SM4等多種內(nèi)置的加密算法,同時金倉數(shù)據(jù)庫也支持其他加密設(shè)備,包括衛(wèi)士通,漁翁等加密設(shè)備。
如何同時支持多種加密算法呢?金倉數(shù)據(jù)庫開發(fā)了一套透明加密框架,只要加密處理算法封裝成加密框架,金倉數(shù)據(jù)庫就可以集成這種加密算法,應(yīng)用于數(shù)據(jù)庫服務(wù)器內(nèi)部的透明加密。
透明加密框架介紹
加密框架由加密方式管理,加密設(shè)備管理和密鑰管理三部分組成。加密方式包括透明加密,半透明加密和非透明加密組成;加密設(shè)備管理,包括軟加密設(shè)備和硬加密設(shè)備;密鑰管理包括主密鑰管理,對象密鑰管理等。
加密框架總覽
錢包機(jī)制
密鑰管理中包括主密鑰的生成,更換,對象密鑰的生成,對象密鑰同步到備機(jī)等內(nèi)容,其中錢包機(jī)制是最核心最重要的。數(shù)據(jù)庫透明加密框架中引入了錢包概念,錢包是一個加密容器,用于存儲所有密鑰,包括主密鑰文件和對象密鑰文件。錢包的另一個優(yōu)點(diǎn)是可以對密鑰進(jìn)行統(tǒng)一管理,與數(shù)據(jù)文件分開,因此,沒有錢包,及時得到了數(shù)據(jù)文件,數(shù)據(jù)也是不能解密的,從而大大提高了數(shù)據(jù)的安全性。錢包需要經(jīng)常備份,防止錢包因系統(tǒng)損壞或硬件設(shè)備導(dǎo)致的丟失錢包的風(fēng)險。
對于錢包自身來說,支持設(shè)置錢包密碼。在數(shù)據(jù)庫使用或關(guān)閉錢包時需要先通過錢包密碼驗(yàn)證,否則將不能使用錢包。創(chuàng)建加密對象時,錢包必須處于OPEN的狀態(tài);若錢包處于CLOSE的狀態(tài),則不能創(chuàng)建加密對象。修改錢包密碼時,錢包必須處于CLOSE的狀態(tài)。安全管理員可以通過SQL命令修改錢包密碼。
開啟/關(guān)閉錢包
密鑰管理
目前密鑰采用三級密鑰結(jié)構(gòu),分別為主密鑰和對象密鑰和塊級密鑰。
主密鑰是唯一的,安全管理員是可以通過SQL命令更新主密鑰的。主密鑰的作用用于加密對象密鑰,主密鑰自身加密存儲在主密鑰文件中。
更新主密鑰
每個加密對象都有一個對象密鑰,對象密鑰之間是不重復(fù)的。塊級密鑰是根據(jù)對象密鑰和塊標(biāo)識生成的,加密時使用的密鑰就是塊級密鑰。對象密鑰暫時不可更改并且由數(shù)據(jù)庫系統(tǒng)維護(hù)。對象密鑰是由主密鑰加密后根據(jù)對象類型不同存儲在不同的密鑰文件中,密鑰文件分為:表空間密鑰文件,表密鑰文件,表列密鑰文件,用戶密鑰文件等。
數(shù)據(jù)加解密
數(shù)據(jù)加解密目前采用的是頁面級的塊加密和塊解密。對于塊加密,分組加密算法需要的待加密數(shù)據(jù)的長度應(yīng)為算法數(shù)據(jù)對齊長度的整數(shù)倍,對于流加密算法的待加密數(shù)據(jù)的長度并沒有對齊的要求。塊加密是在數(shù)據(jù)頁面需要同步到外存時進(jìn)行加密操作;從外存讀取數(shù)據(jù)頁面到緩沖區(qū)時,首先進(jìn)行解密操作。內(nèi)存中的數(shù)據(jù)都是解密后的數(shù)據(jù)。
備份加密
數(shù)據(jù)庫的備份文件通常是明文的或是二進(jìn)制的形式存儲,這樣也是有數(shù)據(jù)泄露風(fēng)險的,
對備份文件加密是一種常用的維護(hù)數(shù)據(jù)庫安全的手段。
備份文件時需要用戶指定備份的密鑰,該密鑰不會存儲到備份文件中,這樣就確保了密鑰的安全,沒有密鑰,即使文件被盜取也沒有辦法獲取到備份出來的真實(shí)數(shù)據(jù)。與此同時,數(shù)據(jù)庫服務(wù)器會對備份文件的完整性進(jìn)行校驗(yàn),如果備份文件被人惡意破壞,那么還原數(shù)據(jù)的時候是會先檢查備份文件的完整性,完整性校驗(yàn)不通過則無法還原數(shù)據(jù)到數(shù)據(jù)庫中,防止了惡意篡改數(shù)據(jù)的操作。
加密框架
為了滿足用戶使用不同加密算法的需求并且高效的兼容各種加密硬件設(shè)備,KingbaseES增加了加密框架用以支持多種加密方式。
加密框架是以插件的形式加載到數(shù)據(jù)庫,支持軟加密及硬加密。軟加密指通過已經(jīng)封裝好的算法庫實(shí)現(xiàn)的加密方式,硬加密指的是需要通過硬件設(shè)備進(jìn)行加密的方式。在加密框架下,用戶可以通過自己編譯算法庫來實(shí)現(xiàn)使用自己指定的算法,具體實(shí)現(xiàn)時通過數(shù)據(jù)庫提供的加密框架內(nèi)部的API,在API內(nèi)實(shí)現(xiàn)自己所想要的加解密算法及密鑰生成管理等方法,編譯成可調(diào)用的動態(tài)庫并放到lib目錄下。
框架整體分為三層:
框架流程
在服務(wù)器啟動時,首先加載加密框架插件,完成加密設(shè)備初始化,包括打開加密設(shè)備,加載加密設(shè)備庫函數(shù),加載密鑰等初始化操作,然后完成服務(wù)器啟動等待處理加解密。
如何實(shí)現(xiàn)用戶自己的加密方式:
首先根據(jù)數(shù)據(jù)庫提供的API函數(shù)編譯封裝好用戶自己的設(shè)備庫,然后把設(shè)備庫和設(shè)備庫所調(diào)用的算法庫一同放到數(shù)據(jù)庫的LIB目錄下。初始化時指定自己的加密方式,包括指定設(shè)備庫名稱,算法庫名稱,密鑰最大長度以及算法對齊長度。對于算法對齊長度,分組加密算法對齊長度是不為0的偶數(shù)。對于流加密算法,算法對齊長度指定為0。
API函數(shù)主要包括五大類函數(shù):設(shè)備管理類函數(shù),密鑰管理類函數(shù),加解密算法類函數(shù),數(shù)據(jù)管理類函數(shù),錯誤處理類函數(shù)。設(shè)備管理類函數(shù)負(fù)責(zé)對加密設(shè)備的管理,打開加密設(shè)備、關(guān)閉加密設(shè)備等。密鑰管理類函數(shù)負(fù)責(zé)密鑰管理,包括生成密鑰,加載密鑰,銷毀密鑰等。加解密算法類函數(shù)負(fù)責(zé)對數(shù)據(jù)的加解密。數(shù)據(jù)管理類函數(shù)負(fù)責(zé)加密前對數(shù)據(jù)的處理操作。錯誤處理類函數(shù)負(fù)責(zé)對加解密運(yùn)行中的錯誤處理。
初始化完成后,就可以使用自己指定的加密算法來使用透明加密的功能。
透明加密框架的優(yōu)點(diǎn)
加密敏感數(shù)據(jù),降低數(shù)據(jù)庫文件失竊的風(fēng)險。
采用錢包機(jī)制,統(tǒng)一密鑰的管理,提高密鑰的維護(hù)效率與安全。
加密備份數(shù)據(jù),防止備份數(shù)據(jù)被竊取及修改。
支持加密框架,便于用戶擴(kuò)展加密算法,增加數(shù)據(jù)庫的算法多樣性,提高用戶數(shù)據(jù)安全。
總結(jié)
以上是生活随笔為你收集整理的干货丨看金仓数据库如何支持透明加密!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2016红帽年度创新大奖榜单揭晓
- 下一篇: Mysql联表update数据