简介
当今世界依赖数据运行。组织创建、存储和交换的数据是其最宝贵的资产。数据加密是所有组织为了保护自身、保护用户以及遵守数据隐私法规的关键实践。组织应确保内部用户只能查看与其相关的数据。更重要的是,组织需要保护其数据免受泄露和未经授权的访问。
对于处理敏感信息的组织而言,数据加密的需求更加重要。在本文中,我们将讨论除了强大的身份验证和授权措施之外,您还应该加密数据的原因、MongoDB 中不同类型的加密以及加密最佳实践。
如果您正在使用 MongoDB,请查看 Prisma 的 MongoDB 连接器!您可以使用 Prisma Client 自信地管理生产 MongoDB 数据库。
要开始使用 MongoDB 和 Prisma,请查看我们的从头开始入门指南或如何添加到现有项目。
为什么要加密数据?
基于角色的访问控制 (RBAC) 是防止数据库权限滥用的绝佳措施。但是,此功能仅涵盖了在保护系统时必须考虑的一些漏洞。RBAC 不能解决恶意行为者窥探您的网络、直接数据盗窃或访问数据库主机内存的情况。
早在 2019 年,世界经济论坛就预测,到 2020 年,整个数字宇宙中的数据单元数量将达到 44 泽字节。这个预测数字超过了宇宙中可观测恒星数量的 40 倍。截至本指南发布时(2022 年),这个数字无疑已经增长,这清楚地说明了加密的必要性。
简而言之,加密是对数据进行编码以使其对于没有访问数据授权的人来说不可读的行为。只有知道加密“密钥”的授权人员才能读取和理解数据。有效实施的加密方法应提供完全的安全保护,防止因泄露访问权限而导致数据被盗。
加密在其最基本的层面上工作,加密器用其他字符替换字母、数字和符号以创建密码。对于任何非密码学家或十二宫爱好者来说,密码是代表原始消息的字符集,在本例中,是原始数据。此密码的创建者持有加密密钥,即描述密码编码方法的数字。现代加密比简单的字符交换复杂得多。大多数现代实现都会将纯文本转换为密文,密文由文本、图像和二进制 blob 形式的字节块或字节流组成。没有这个密钥,计算机或人类都无法读取实际数据,任何未经授权的数据都无法正确呈现。
加密类型
加密方法通常分为两类:对称密钥加密和非对称加密。它们的定义是
- 对称加密 - 一种加密密钥和解密密钥相同(对称)的方法
- 非对称加密 - 一种也称为公钥密码学的方法,它创建两个不同的密钥,一个私钥和一个不相同的公钥。公钥可以与任何人共享,而私钥只能与授权人员共享。公钥可用于加密只能由私钥解密的数据。
两种方法都存在一些固有的漏洞,具体取决于数据状态,但可以弥补 RBAC 遗漏的问题,例如网络窥探和数据盗窃。正是这种保证使得 MongoDB 在其数据库中同时采用了这两种方法,具体取决于数据状态。
传输中加密
传输中加密是在数据从一个点移动到另一个点时保护数据。在发送之前,数据会为其“旅程”加密,然后在接收点解密和验证。最好的可视化是将数据想象成通过装甲货车从一个银行分行运送到另一个银行分行的钱,以补充金库。
MongoDB Atlas 支持 传输层安全性 (TSL) 和安全套接字层 (SSL),用于应用程序客户端和服务器之间以及集群内通信,方法是为服务器设置证书。证书是一种电子文档,用于证明私钥所有权的有效性。证书确保数据在可信的网络连接上进行加密传输,从而防止网络窥探活动,例如数据包嗅探或 IP/DNS 欺骗。
通过包含公钥,我们看到 MongoDB 利用非对称加密来保护运动状态的数据。对称加密将需要通过某些渠道在各方之间传递加密密钥。单个密钥在传输过程中必须保持安全,并且在此阶段存在风险。非对称加密理论上通过其公钥解决了这种不安全的传输问题。加密通信可以在没有任何事先通信的情况下进行。
通过使用公钥加密,发送者的消息只能由预期接收者使用其私钥解密。公钥密码学在传输中具有优势,因为无需共享私钥,并且签名的使用确保接收者可以验证消息是否来自可信的发送者。
非对称加密的缺点是它比对称加密花费的时间更长,并且需要消耗更多的资源才能实现。如果您的数据没有在设备到设备或网络到网络之间主动移动,则无需进行这些权衡,而对称加密提供了充足的安全性。
非对称加密的潜在风险是,如果您的私钥落入坏人之手,那么您的所有消息都可能被读取。MongoDB 通过前向保密密码套件提供额外的安全性。这些套件创建了一个由服务器私钥保护的临时会话密钥。此会话密钥永远不会传输,并且即使服务器的私钥泄露,也可以确保过去的会话无法被泄露的私钥解密。MongoDB 同时支持临时 Diffie-Hellman (DHE) 和 临时椭圆曲线 Diffie-Hellman (ECDHE) 算法。
MongoDB Atlas 使用 Let’s Encrypt 已知证书来验证启用 TLS 的客户端,一旦它们通过访问和身份验证控制。TLS 协议通过在两个或多个计算机应用程序之间使用证书来提供完整性和真实性。MongoDB 可以通过使用此协议在网络上进行通信,从而防止不必要的窃听和篡改。您可以参考 官方 MongoDB 文档,了解客户端的 TLS 配置。
静态数据加密
静态数据加密保护未处于传输状态但处于空闲状态的数据。您可以最好地将静态加密数据可视化为银行分行金库中受保护的资金。它不再传输到另一个分行,而是静止在一个地方。这种静态状态避免了非对称加密解决的传输不安全性,因此对称加密是一种强大的方法。
磁盘上的加密数据保持加密状态,除非攻击者有权访问加密密钥。静态数据加密在物理驱动器丢失或被盗或数据库文件暴露的情况下保护敏感数据。
MongoDB 静态数据加密是一项 企业版功能。这为您的数据库增加了一个保护层,保证写入存储的文件只有在经过授权的进程或应用程序解密后才能访问。
默认情况下,MongoDB Atlas 在集群中的每个节点都内置了磁盘静态数据加密。但是,您也可以从您的 WiredTiger 存储引擎启用额外的加密。此功能允许您使用首选云提供商的密钥管理服务 (KMS)。KMS 是一种实用程序,可集中管理您的所有加密密钥。
MongoDB 支持 AWS、Azure 和 Google Cloud Platform 密钥管理服务。对于那些不想仅仅依赖 MongoDB 的加密密钥并控制生成的加密密钥所有权的人来说,这是一个很棒的功能。
使用中加密
最后一种 MongoDB 加密类型是一项提供使用中加密的功能:客户端字段级加密 (CSFLE)。CSFLE 允许工程师指定 文档 中应保持加密的字段。敏感数据由客户端加密/解密,并且仅以加密形式与服务器进行通信。
此功能确保服务器和网络上加密所需字段的安全性,只有适当的客户端才能访问。在任何时候,敏感数据都在数据库主机上和网络传输中加密。安全责任转移到客户端。CSFLE 可以防止通篇描述的所有漏洞:数据库权限滥用、网络窥探、数据盗窃和访问数据库主机的内存。
轮换加密密钥
对于静态数据加密和客户端字段级加密,对称密钥始终存在泄露的风险。就像您应该对关键互联网帐户密码所做的那样,您也应该定期更改加密密钥。这种做法就是轮换加密密钥。
加密密钥轮换对于数据库管理员来说至关重要,因为虽然它不是针对密钥泄露的万无一失的保护,但它极大地限制了风险。如果密钥泄露,则很可能它已经过时,无法访问敏感数据。这是另一项需要维护的任务,但最好是采用这种做法,永远不需要它,而不是在没有做的情况下被抓住,并希望自己做过。
MongoDB Atlas 静态数据加密和 CSFLE 具有内置指南,用于为您可能使用的每个 KMS 云提供商轮换所需的密钥
如果您是自托管 MongoDB,则有指南可用于进行手动密钥轮换,以及 MongoDB 的 Ops Manager 和 Cloud Manager 平台。
结论
在本指南中,我们讨论了数据加密日益增长的重要性以及许多数据安全漏洞。MongoDB 中对数据进行加密是为了确保其在任何状态下的安全。这种状态可以是空闲、运动中或使用中。
随着越来越多的数据进入数字宇宙,越来越多的威胁试图访问它。所有组织都应采取一切预防措施来保护有价值的信息。MongoDB 提供了一套加密安全功能,最好在您需要它之前就充分了解。
如果您正在使用 MongoDB,请查看 Prisma 的 MongoDB 连接器!您可以使用 Prisma Client 自信地管理生产 MongoDB 数据库。
要开始使用 MongoDB 和 Prisma,请查看我们的从头开始入门指南或如何添加到现有项目。