数据库的透明数据加密

01.png


众所周知,数据库是应用程序中处理数据的核心。

如果不是用内存数据库,数据库文件仍然会保存在远端服务器的磁盘上。应用程序会收集用户的敏感数据,如密码,银行帐户数据,健康数据等。

如果黑客进入数据库服务器,那么他将能够读取这些内容,访问到用户相关数据。如何克服这些问题?


02.png



通过加密隐藏数据

加密技术通常用在日常的网络通信中,以保护第三方的数据。加密通过给定的密钥对数据进行加密,只有知道正确密钥的人方能读到真实的信息。

加密可以是对称加密也可以是非对称加密。在这种情况下,只需要对称加称加密即可,用户侧并不需要生成共享加密。

解决问题的最简单方法是将数据加密存储,而不再存储为纯文本文件。但加密整个文件并不是一个切合实际的解决方案,在执行SQL查询时要解密整个数据库文件,这是一个巨大的性能缺陷。

除了加密整个文件,我们还可以将数据库数据以页面(Page)的方式进行加密。页面是数据库系统的最小单位,它的大小是固定的,通常为4KB。页面用在数据库中存储 Btree 节点的页面,可以是表中行的集合或者用于索引的Key。

透明数据加密如何工作

如今,将数据保存在远程文件已不是问题,可以用加密方式存储数据。接下来,我们讨论如何将内容融合在一起。
来看一下MySQL是如何实现此功能的。


03.png



我们再来梳理一下流程。

应用程序需要在MySQL服务器中存储表,它将SQL查询发送到MySQL服务器。MySQL服务器读取数据库页面来解析SQL语句,此时的数据库页面是加密的,数据库需要找到要解密页面的关联密钥。

而密钥需要保存在一个安全的位置。在MySQL中,Key Vault 就是一个安全的密钥保管库,它用来存储密钥、证书和密码等。
MySQL从Key Vault中读取密钥后解密数据库页面,然后执行SQL查询。

如果此时对页面进行了相关修改,则对页面加密并保存在文件中。

此时AES和CBC加密模式会同时使用,用来加密和解密数据。

Key Vault 库架构


04.png



TDE中集中管理

Key Vault密钥库提供集中式存储,即例是分布式数据库也要存储密钥,维护一个称为主密钥的密钥即可。除存储密钥外,Key Vault密钥库还提供角色管理的方法。

以下是Oracle Key Vault中的角色:
1)系统管理员
2)主键管理员
3)审计管理员

系统管理员有权限创建、修改和删除用户。它可以向系统添加新的节点。此外该角色负责分派备份和配置高可用性等能力。
密钥管理员控制用户和节点对库的访问,管理用户组与节点组。审核管理员具有对全部对象的读取访问权限,负责管理审核记录。

优点与缺点

看上去,TDE是一种保存数据的好方法,黑客攻入也无济于事。但是,凡事有利有弊,我们来理一下TDE的优点和缺点。
优点:
1)易于实施
2)无需在应用层中更改
3)数据库镜像、打开和传送日志等功能可以同时使用
缺点
1)仅在静止状态下保护数据,数据库服务器仍然可以读取数据与密钥;
2)公开数据也以加密形式存储;
3)压缩后,数据库备份会更重。

其它加密方法

除了使用TDE隐藏页面级别的数据外,还可以对列级的数据加密。在此种情况下,数据库对列进行加密而不是页面。与TDE相比,列级加密更加灵活。

除此以外,数据库还可以使用单独的密钥来加密每个列。由于加密数据库有多个密钥,数据库的性能会变低。

小结

TDE通过使用加密来保护远程数据库服务器中的数据,其目的是在数据库的文件级别提供安全性保护。

所有商业数据库都可以使用TDE来保护数据。TDE可以避免数据库受到黑客攻击,但开发者仍需要采取措施防止XSS攻击、SQL注入,Replay重放攻击等。

设计在Web上运行的软件,需要更多的工作,它比在桌面上的应用程序安全性要求更高。

编译:天机
来源:https://dzone.com/articles/tra ... bases


扫一扫,在手机阅读、分享本文

0
分享 2020-08-06

0 个评论

要回复文章请先登录注册