简介
当今世界运行在数据之上。组织创建、存储和交换的数据是其最宝贵的资产。数据加密是所有组织为保护自己、保护用户以及遵守数据隐私法规而采取的一项重要实践。组织应该确保内部用户只能查看与其相关的数据。更重要的是,组织需要保护其数据免遭泄露和未经授权的访问。
对于处理敏感信息的组织来说,对数据加密的需求更加迫切。在本文中,我们将讨论除了强大的 身份验证 和 授权 措施外,您还应该加密数据的理由,MongoDB 中的不同加密类型以及加密最佳实践。
如果您正在使用 MongoDB,请查看 Prisma 的 MongoDB 连接器!您可以使用 Prisma Client 放心地管理生产 MongoDB 数据库。
要开始使用 MongoDB 和 Prisma,请查看我们的 从头开始指南 或如何 添加到现有项目。
为什么要加密数据?
基于角色的访问控制 (RBAC) 是防止数据库权限滥用的绝佳措施。但是,此功能仅涵盖在保护系统时必须考虑的一些漏洞。RBAC 不会解决攻击者窥探您的网络、直接盗取数据或访问数据库主机内存的情况。
早在 2019 年,世界经济论坛就预测,整个数字宇宙中的数据量到 2020 年将达到 44 ZB。这个预测数字是可观测宇宙中恒星数量的 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,请查看我们的 从头开始指南 或如何 添加到现有项目。