透明數據加密TDE
RDS PostgreSQL支持透明數據加密(Transparent Data Encryption,簡稱TDE),對數據文件進行實時加密和解密,保護用戶數據隱私,本文介紹透明數據加密的基本概念和加密原理。
什么是透明數據加密
透明數據加密指對數據文件執行實時I/O加密和解密。通過在數據庫層執行靜態數據加密,阻止可能的攻擊者繞過數據庫直接從存儲中讀取敏感信息。經過數據庫身份驗證的應用和用戶可以繼續透明地訪問應用數據(不需要更改應用代碼或配置),而嘗試讀取表空間文件中的敏感數據的OS用戶以及嘗試讀取磁盤或備份信息的未知用戶將不允許訪問明文數據。
透明:數據在使用過程中無感知,數據在寫入磁盤時自動加密,在數據被讀取時自動解密。
數據加密:使用密鑰管理服務(Key Management Service,簡稱KMS)提供的服務密鑰或您上傳至KMS的自定義密鑰,對數據文件進行加密。
說明TDE加密使用的密鑰由KMS產生和管理,RDS不提供加密所需的密鑰和證書。
RDS PostgreSQL支持Aliyun_AES_256和Aliyun_SM4兩種類型的KMS密鑰。
透明數據加密的優勢
阿里云RDS PostgreSQL透明數據加密具有以下優勢:
表級、索引級加密粒度:支持對表級別、索引級別進行TDE加密和解密。
批量對象加密解密:支持表中所有索引批量加密和解密,支持數據庫內所有表批量加密和解密。
性能損耗低:開啟TDE功能后,性能影響小,常規業務場景下加密的表性能損耗約4%。
TDE加密解密原理
名詞解釋
加密密鑰(Key Encryption Key,簡稱KEK):可使用KMS服務密鑰或用戶自定義密鑰(Customer Master Key,簡稱CMK),用于保護數據密鑰。
數據密鑰(Data Encryption Key,簡稱DEK):由數據庫生成,用于加密或解密數據。
加密解密流程
所有加密解密操作均在內存中進行,內存中的數據是明文,磁盤中的數據是密文,這可以避免因磁盤被盜而產生的數據泄露問題,同時數據庫的使用方式保持不變,沒有適配成本。
數據庫啟動時會從KMS獲取KEK,從而解密DEK,解密后的DEK存放在內存中,用于寫入數據或讀取數據時進行加密或解密。