如何實(shí)現(xiàn)存儲(chǔ)層數(shù)據(jù)加密,不妨試試透明加密(TDE)
數(shù)據(jù)庫透明加密(Transparent Data Encryption,簡(jiǎn)稱TDE)是一種用于加密數(shù)據(jù)庫存儲(chǔ)的數(shù)據(jù)的技術(shù),它可以在數(shù)據(jù)庫系統(tǒng)的文件或磁盤層面對(duì)數(shù)據(jù)進(jìn)行加密,而不需要修改應(yīng)用程序代碼。TDE 主要用于保護(hù)數(shù)據(jù)靜態(tài)時(shí)的安全,即數(shù)據(jù)在硬盤上或備份介質(zhì)中時(shí)的安全。
特點(diǎn):
- 透明性:用戶和應(yīng)用程序無需更改就可以使用加密功能,因?yàn)榧用芎徒饷懿僮魇亲詣?dòng)進(jìn)行的,由數(shù)據(jù)庫管理系統(tǒng)來實(shí)現(xiàn)。
- 綜合管理:加密密鑰的生命周期(創(chuàng)建、分配、旋轉(zhuǎn)和銷毀)通常由數(shù)據(jù)庫管理系統(tǒng)或?qū)S玫拿荑€管理基礎(chǔ)設(shè)施來處理。
- 性能影響最小化:TDE 旨在盡量減少對(duì)數(shù)據(jù)庫性能的影響,因此通常只加密敏感的數(shù)據(jù)(如表中的特定列)或整個(gè)數(shù)據(jù)庫文件。
工作原理:
- 密鑰生成:生成一個(gè)或多個(gè)加密密鑰用于加密數(shù)據(jù)。這些密鑰可能包括數(shù)據(jù)庫加密密鑰(DEK)和主加密密鑰(MEK)。
- 數(shù)據(jù)加密:當(dāng)數(shù)據(jù)寫入到磁盤時(shí),數(shù)據(jù)庫通過DEK進(jìn)行加密;當(dāng)數(shù)據(jù)讀取時(shí),再進(jìn)行解密。
- 密鑰管理:MEK用于保護(hù)DEK,并且通常存儲(chǔ)在受保護(hù)的密鑰庫中。MEK需要高度安全的存儲(chǔ)和管理。
- 訪問控制:通常還會(huì)結(jié)合其他數(shù)據(jù)庫安全技術(shù),如角色基礎(chǔ)的訪問控制,來確保只有授權(quán)用戶才能訪問加密數(shù)據(jù)。
應(yīng)用場(chǎng)景:
- 數(shù)據(jù)保護(hù):防止未經(jīng)授權(quán)的訪問者直接從物理介質(zhì)上讀取數(shù)據(jù)。
- 符合法規(guī):滿足數(shù)據(jù)保護(hù)法規(guī)的要求,比如GDPR、PCI DSS等,這些法規(guī)要求對(duì)敏感數(shù)據(jù)進(jìn)行加密。
- 數(shù)據(jù)隱私:保護(hù)用戶的隱私信息,防止數(shù)據(jù)泄露給非授權(quán)人員。
支持TDE的數(shù)據(jù)庫:
- Oracle Database
- Microsoft SQL Server
- IBM DB2
- MySQL Enterprise Edition
- PostgreSQL (通過第三方擴(kuò)展支持)
- OceanBase 等
OceanBase透明加密舉例
數(shù)據(jù)存儲(chǔ)加密是指對(duì)數(shù)據(jù)和 Clog 等保存在磁盤中的數(shù)據(jù)進(jìn)行無感知的加密,即透明加密(簡(jiǎn)稱 TDE)。數(shù)據(jù)在寫入存儲(chǔ)設(shè)備前自動(dòng)進(jìn)行加密,讀取時(shí)自動(dòng)解密,該過程對(duì)用戶是透明的,黑客和惡意用戶無法從數(shù)據(jù)文件、數(shù)據(jù)庫備份或磁盤中讀取到敏感數(shù)據(jù)。
兩級(jí)密鑰體系
透明數(shù)據(jù)加密使用兩級(jí)密鑰體系實(shí)現(xiàn)加解密功能。開啟加密的最小粒度為數(shù)據(jù)庫中的一個(gè)表,需要開啟加密的表需要放到一個(gè)加密的表空間(Tablespace)中。OceanBase 數(shù)據(jù)庫數(shù)據(jù)的加密單位為表空間,表空間僅是為了兼容 Oracle 數(shù)據(jù)庫而設(shè)計(jì)的概念,可以簡(jiǎn)單理解為表空間是一組表的集合。每個(gè)加密的表空間設(shè)置有加密算法及對(duì)應(yīng)的數(shù)據(jù)密鑰,用于給表空間中的數(shù)據(jù)進(jìn)行加密。每個(gè)租戶有一個(gè)主密鑰,用于對(duì)表空間的數(shù)據(jù)密鑰進(jìn)行加密,為了防止未經(jīng)授權(quán)的解密操作,通常將主密鑰存儲(chǔ)于專門的 Keystore 中。(此段內(nèi)容引用自O(shè)ceanBase官方文檔)
缺點(diǎn)
啟用透明數(shù)據(jù)加密(TDE)的列在進(jìn)行模糊查詢時(shí),會(huì)出現(xiàn)性能下降。這是因?yàn)榧用懿僮髟黾恿颂幚頂?shù)據(jù)時(shí)的計(jì)算負(fù)擔(dān),并且會(huì)影響到數(shù)據(jù)庫管理系統(tǒng)執(zhí)行查詢的方式。以下是幾個(gè)性能下降的原因:
- 加解密開銷:每當(dāng)數(shù)據(jù)從存儲(chǔ)介質(zhì)讀取或?qū)懭霑r(shí),都需要進(jìn)行加解密操作,這本身就需要額外的CPU資源。
- 索引效率降低:在一些情況下,特別是對(duì)于加密的列數(shù)據(jù)建立索引時(shí),索引的效率可能會(huì)受到影響,因?yàn)榫幹扑饕氖羌用芎蟮闹刀皇窃贾?。這意味著某些索引優(yōu)化策略可能無法應(yīng)用,從而導(dǎo)致查詢性能下降。
- 模糊查詢限制:像 LIKE 這樣的模糊查詢操作通常依賴于對(duì)數(shù)據(jù)的模式匹配。如果數(shù)據(jù)是加密的,數(shù)據(jù)庫系統(tǒng)通常無法在未解密的數(shù)據(jù)上直接應(yīng)用模式匹配。這就要求系統(tǒng)解密數(shù)據(jù)集中的每一行來進(jìn)行比較,進(jìn)一步增加了查詢時(shí)間。
- 內(nèi)存和IO壓力:大量的加解密操作可能會(huì)增加內(nèi)存和IO的壓力,尤其是在處理大量數(shù)據(jù)時(shí)。
- 并發(fā)性能影響:高并發(fā)環(huán)境下,多個(gè)查詢同時(shí)進(jìn)行加解密可能會(huì)導(dǎo)致資源競(jìng)爭(zhēng),降低整體數(shù)據(jù)庫的性能。
總結(jié)
透明加密目前是比較成熟的數(shù)據(jù)存儲(chǔ)加密方案,但在模糊查詢的場(chǎng)景下,性能會(huì)出現(xiàn)比較大的性能損耗,在使用時(shí)需要注意只加密敏感信息,并減少敏感信息的模糊查詢。