MongoDB的字段级加密可以保护隐私数据
2019年12月,流行的文档数据库MongoDB向该平台添加了一个相当激进的新功能:字段级数据库加密。乍一看,您可能会想知道,在已经具有静态存储加密和飞行中传输加密的世界中,这是否是一项有意义的功能-但经过更仔细的分析,答案是肯定的。
MongoDB使用该新技术的首批客户之一是Apervita,该供应商为2,000多家医院和近200万个人患者处理机密数据。在技术开发和完善期间,Apervita与MongoDB并肩工作。
自从12月份全面上市以来,该技术还被多家政府机构和《财富》 50强公司采用,其中包括一些最大的药房和保险提供商。
简而言之,现场级加密
MongoDB的字段级加密(FLE)提供了在加密的文档存储区中存储数据的某些部分的功能。MongoDB的社区(免费)版本允许对客户端应用程序中的字段进行显式加密。
MongoDB的企业版以及Mongo基于云的数据库即服务Atlas也支持自动加密。MongoDB Enterprise和Atlas还可以在服务器端对受保护的字段进行加密,以防止无知的终端应用程序开发人员意外地将敏感数据存储在明文中。假设应用程序具有密钥,则加密的字段可以在读取时自动解密(免费或企业版本)。
设置一个自动加密的 数据库有点麻烦,因此无法在这里的代码中查看。但是要了解加密的方式和时间,可以快速查看一下Python代码以进行单个显式加密的MongoDB插入:
# Explicitly encrypt a field: encrypted_field = client_encryption.encrypt( "123456789", Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic, key_id=data_key_id) coll.insert_one({"encryptedField": encrypted_field})
这里的显式调用非常清楚发生了什么:数据在客户端应用程序端进行加密,然后发送到MongoDB服务器实例并由其存储。显然,这给了我们飞行中和静态加密的大部分好处,但是这里提供的另一层防御可能并不那么明显。
仔细查看sysadmin问题
系统管理员和数据库管理员是最严重的数据保密问题之一。计算机需要操作员具备启动,停止,维护和监视服务所需的所有特权。这使得系统管理员可以有效地访问该系统上存储或处理的任何数据。
同样,数据库(尤其是大型数据库)必须具有数据库管理员。DBA可能没有系统管理员所能访问的系统的低级根访问权限,但是它具有数据库本身内部工作的访问权限。除了设计数据库的初始结构外,DBA还必须能够记录和监视正在运行的数据库引擎,以识别数据中的“热点”。
这些热点可能需要进行重组或建立索引,以缓解出现的性能问题。对它们进行适当的故障排除通常还意味着DBA能够重播麻烦的查询,以查看DBA的更改是否对性能产生了正面或负面的影响。
静态加密几乎无法解决sysadmin问题或DBA问题。尽管系统管理员无法通过克隆系统的原始磁盘来获取有意义的数据,但是一旦解锁了存储,他们就可以轻松地从正在运行的系统中复制未加密的数据。
如果存储加密密钥存在于硬件中(例如,内置在受信任的平台模块(TPM)中),则它几乎或根本无法缓解sysadmin问题,因为sysadmin可以访问正在运行的系统。正如Apervita首席技术官Michael Oltman告诉我们的那样,“ [我们不担心有人带着我们的服务器走出AWS数据中心。”
需要远程操作员使用引导时提供的密钥来解锁存储的静态加密系统在某种程度上缓解了此问题。但是,本地系统管理员可能仍然有机会破坏运行中的计算机,并且可用性可能会受到影响,因为远程密钥操作员的不可用性意味着在重启后的维护时段后服务不会自动恢复。
无法从系统管理员和数据库管理员那里保护私人数据的安全性,使得在不破坏保密性的情况下扩展大型操作变得更加困难和昂贵。
字段级加密通过分段访问实现扩展
既然我们了解了sysadmin问题,我们就可以看看字段级加密如何缓解它。使用FLE,应用程序在将数据发送到数据库之前先对其进行加密-并且数据库将按原样存储它。同样,当查询加密数据时,将其检索并发送回仍处于加密状态的应用程序-解密从未在服务器级别发生,实际上,服务器无权访问对其进行解密所需的密钥 。
由于数据在进入数据库之前已经过安全加密,并且直到从数据库返回后才被解密,因此 无论是讨论sysadmin还是DBA,sysadmin问题都得到了解决。具有本地root用户访问权限的系统管理员可以停止,启动和升级服务,而无需访问数据-数据库管理员可以查看和重放正在运行的查询,而无需查看私有内容。
公平地说,我们只是将这一特殊功能踢得更远。有权访问生产应用程序服务器的系统管理员和开发人员 仍然可以看到他们不应该看到的数据-毕竟,应用程序本身必须处理原始数据。
但是,分段仍然有意义,因为它可以使用自动配置的和第三方监控的服务,例如MongoDB的Atlas。如果没有字段级加密,HIPAA将与任何试图将受保护的健康信息存储在第三方管理的云服务中的供应商进行交易。
但是,使用FLE,可以将应用程序的数据库端视为非机密。这进而使负责数据的供应商可以利用数据库的集中,高级专业知识作为服务提供者。厂商还根据昂贵的HIPAA(或其他法规)物理和网络安全规则来缩小系统和设备的范围。
设计目标和方法
关于加密,至少应该问两个问题-它对性能有多大影响,更重要的是,它真的安全吗?MongoDB针对FLE的性能目标是对延迟的影响小于或等于10%。在使用标准行业数据库基准进行的内部测试中,对大容量,读取密集型工作负载的净影响为5%至10%。
同样重要的是,不使用加密字段的应用程序不会受到影响。与仅对整个文档进行加密的应用程序相比,仅对敏感数据进行加密的应用程序(例如,对社会安全号码进行加密而将名称保留为明文)的影响较小。
当我们采访MongoDB的Kenn White时,他还强调说,加密本身并不仅仅是在内部和内部熟造的。该公司从学术和行业背景中聘请了几个受人尊敬的密码学专家团队。它还委托著名安全公司Teserakt对加密和应用程序安全进行第三方审核,该公司最近因其雄心勃勃的E4协议而受到关注,该协议旨在为嵌入式设备提供动态加密。
除了获得正确的加密和性能之外,MongoDB对FLE的最重要目标之一就是确保每个人都可以使用它,并且采用的障碍最小。这意味着要为MongoDB使用的七个最受欢迎的应用程序开发平台设计自定义API,包括Node.js,Python,Java,.NET和Go。
结论
尽管我们在这里重点关注MongoDB,但这并不是提供FLE的唯一(甚至是第一个)数据库技术。一年前,一个名为Couchbase的竞争NoSQL数据库平台实施了 FLE。亚马逊还推出了 FLE,以在2017年底将供应商访问其CloudFront CDN中受保护的HTTP表单字段的细分。
正如盐化的单向哈希迅速成为密码存储的强制性标准一样,我们希望字段级加密将成为处理敏感或机密信息并出于相同原因的数据库的强制性功能–不仅保护其免受外部攻击者的攻击,而且还可以保护它来自合法的系统和基础架构管理员。
MongoDB的字段级加密可以保护隐私数据:等您坐沙发呢!