拿走磁盘也甭想读数据——透明加密保安全
透明加密(Transparent Data Encrytion,TDE)是用来加密数据库文件的技术。TDE在数据库文件级别提供加密,在磁盘和备份介质上加密数据库,解决了静态数据保护问题。TDE不会保护传输阶段的数据(比如客户端与服务端传输的数据)和使用中的数据(在非持久化介质中的数据,比如在内存、CPU cache,CPU寄存器中的数据)。
为什么需要透明加密?
当文件系统访问控制受到威胁时,TDE可以防止数据泄露:
恶意用户会窃取存储设备并直接读取数据库文件。
恶意备份操作员进行备份。
解决合规性问题,比如PCI DSS(支付卡行业数据标准)。
透明加密的粒度分析
加密对象的粒度
数据库集群
数据库
表空间
表
列
表的集合比如schema
集群范围加密
好处
架构简单
密钥管理简单
适用于所有加密需求(用户表、系统表、索引等对象)
不足
加密所有数据库对象带来的性能开销
单个密钥加密整个集群,单个密钥加密的数量大。
密钥更新需要重建整个集群
细粒度加密
好处
减少性能开销
减少单个密钥加密的数据量(使密码分析更困难,即使幸运拿到了密钥,较少的数据风险)
重新加密或者密钥更新不需要重建整个数据库集群
不足
密钥管理比较复杂
通过查找加密表的密钥引入了新的性能开销
GaussDB(DWS)的实现
三层密钥结构,集群级加密。在创建集群时启用加密。当选择KMS(密钥管理服务)对DWS进行密钥管理时,加密密钥层次结构有三层。按层次结构顺序排列,这些密钥为主密钥(CMK)、集群加密密钥 (CEK)、数据库加密密钥 (DEK)。
主密钥用于给CEK加密,保存在KMS中。
CEK用于加密DEK,CEK明文保存在DWS集群内存中,密文保存在DWS服务中。
DEK用于加密数据库中的数据,DEK明文保存在DWS集群内存中,密文保存在DWS服务中。
密钥更新通过更新CEK来实现,不更新数据加密密钥DEK,避免重建数据库的性能开销。
其他系统中的TDE
PG社区的实现(预计在2021年的PG14)
集群范围的加密
内部密钥管理系统(KMS),将密钥存储在数据库中
加密所有持久化数据,不加密内存中的共享缓冲区数据
MySQL(InnoDB)
支持表空间级TDE。在MySQL中,表空间是指可以保持一个或多个表以及与表关联的索引的数据的文件。
支持两层密钥结构,为每个表空间使用一个密钥,该密钥位于表空间文件的头部。
主密钥用于保护表空间密钥,通过插件从外部系统获取。
支持redo和undo日志加密和系统表加密。使用专有密钥而不是表空间密钥对每一页的redo和undo日志加密。日志加密密钥以加密状态存储在第一个redo/undo日志文件的头部。
Oracle
Oracle支持列级和表空间级TDE。
使用两层秘钥结构。
主加密秘钥(MEK)存储在外部密钥存储中,用于保护列级和表空间级密钥。
列级TDE为每个表使用一个密钥,表空间级为每个表空间使用一个密钥。
支持3DES和AES(128,192、256)加密算法。列级别TDE默认为AES192,表空间级别TDE默认为AES128。
SQL Server
支持三层密钥结构的数据库级TDE。
服务主密钥(SMK)在安装过程中自动生成的(如postgres中的initdb)。
数据库主密钥(DMK)是在master数据库(如postgres默认数据库)中创建,并由SMK加密。
- 点赞
- 收藏
- 关注作者
评论(0)