拿走磁盘也甭想读数据——透明加密保安全

举报
zhangkunhn 发表于 2020/08/20 17:50:11 2020/08/20
【摘要】 简要介绍了数据库透明加密的基本概念,分析了加密粒度和优缺点,介绍了GaussDB(DWS)和其他系统的实现。

透明加密是什么?

透明加密(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加密。

  • DMK用于生成实际用于数据加密密钥(DEK)的证书。DEK是每个数据库的秘钥,用户加密数据和日志文件。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。