简介: 深入MongoDB4.2新特性:字段级加密 Client-Side Field Level Encryption
徐雷,
2)《MongoDB实战》第2版译者;
3)阿里云大学讲师;阿里云栖 区讲师;
4)目前就职于阿里巴巴,架构师
(因为内容较多,进行了文章删减,阅读全文可以通过点击底部的“了解更多”进行浏览)
文章摘自:阿里云开发者 区
MongoDB4.2已经发布,新增了几大特性,其中安全改进,提供了字段级加密 Client-Side Field Level Encryption加密新特性。今天我们来深入学习一下这个新特性,以及使用的场景。
1、MongoDB字段级加密新特性介绍
MongoDB4.2驱动程序也提供客户端字段级加密支持。
这种加密机制依赖于客户端代码实现。
1.1加密场景
作为使用过MySQL或者之前MongoDB数据库的同学,应该很容易理解,绝大部分的电商、银行、 交平台的数据库敏感字段都会考虑加密处理。例如:支付宝、微信、微博账 的密码、账户余额、银行卡账 、授权码等等。一些商品的进货价格,供货商联系方式等。
但是也有很多系统不会做加密,比如早期的12306数据库里的用户信息字段(后面已经修复漏洞)。
早期的做法,如果有加密字段的需求,都是在业务逻辑层,设计加密算法。
常见的做法,比如对商品原始价格加密,对称加密Key直接计算。或者变换方式处理。
这些通常要程序员写代码完成。
1.2数据库透明加密
现在一些先进的数据库都开始提供DB级别的加密支持,比如Oracle、SQL Server,阿里云MySQL,现在MongoDB也开始支持这个特性。
应用程序可以在通过 络将数据传输到服务器之前提前加密Document文档中的某些字段,比如商品的价格Price,或者用户账 的存款余额。
只有能够访问正确加密密钥的应用程序才能解密和读取受保护的数据。
删除加密密钥会将使用该密钥加密的所有数据呈现为永久不可读。
MongoDB集群使用TLS加密来保护传输中的数据。集群还使用MongoDB加密存储引擎来保护磁盘上的数据。
请思考以下安全场景:
A、员工具有集群及其主机的管理访问权限。员工的访问级别允许他们在解密状态下查看敏感数据。
B、第三方托管MongoDB集群。提供程序具有主机或数据库级安全漏洞,未授权方在解密状态下访问数据。
C、第三方数据分析公司可以访问包含私人,个人或机密数据。第三方公司将解密的数据加载到未经授权的各方可以访问的不安全的存储区中。
对于上面的每种情况,具有MongoDB群集或主机的特权访问权限的用户都可以绕过加密来读取私有的机密数据。
所以在写入服务器之前,我们使用客户端字段级加密新特性,可以保护数据,降低在 络传输中暴露数据或绕过磁盘加密窃取数据的风险。
2、用户文档加密字段例子
下面是一个用户Document文档数据的例子:
{ "name" : "Frank Xu", "address" : { "street" : "1234前门外大街", "city" : "杭州", "zip" : 99999 }, "phone" : "123-45-6789", "age" : "18"}
假设是一个恋爱交友 站,手机 、年龄是敏感字段,不希望泄露。
我们可以使用客户端字段级加密功能,专门加密敏感信息,如age和phone。 加密数据可以保存为具有子类型的二进制数据格式。
{ "name" : "Frank Xu", "address" : { "street" : "1234 前门外大街", "city" : "杭州", "zip" : 99999 }, "phone" : BinData(6,"U2FsdGVkX1+CGIDGUnGgtS46+c7R5u17SwPDEmzyCbA="), "age" : BinData(6,"AaloEw285E3AnfjP+r8ph2YCvMI1+rWzpZK97tV6iz0jx")}
那些黑客,无法访问所需密,因此这些非法的MongoDB服务器的用户无法解密加密过的字段。
MongoDB支持两种使用官方MongoDB 4.2兼容驱动程序进行客户端字段级加密的方法:
3、字段的显式(手动)加密方式
MongoDB4.2兼容驱动程序支持使用特定数据密钥和加密算法显式加密或解密字段。
应用程序必须修改与构造读写操作相关的任何代码,以通过驱动程序加密库包含加密/解密逻辑。应用程序负责根据每个操作选择适当的加密/解密数据密钥。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!