简介
当今世界依赖数据运行。组织创建、存储和交换的数据是其最有价值的资产。数据加密是所有组织保护自身、用户以及遵守数据隐私法规的关键实践。组织应确保内部用户只能查看与其相关的数据。更重要的是,组织需要保护其数据免受泄露和未经授权的访问。
对于处理敏感信息的组织而言,数据加密的需求更加至关重要。在本文中,除了强大的 身份验证 和 授权 措施之外,我们还将讨论为什么要加密数据,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 同时支持 Ephemeral Diffie-Hellman (DHE) 和 Ephemeral Elliptic Curve 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,请查看我们的 从零开始入门指南 或如何 添加到现有项目。