文档菜单
文档首页
/
MongoDB 手册
/ / / / /

CSFLE 如何解密文档

本页内容

  • 用于解密的元数据
  • 自动解密过程
  • 自动加密的读取行为
  • 了解更多

本页介绍了 CSFLE 如何使用您的数据加密密钥和客户主密钥的元数据来解密数据。

当您使用 CSFLE 加密数据时,您加密的数据以以下方式存储BinData 子类型 6 对象,包括以下元数据

  • 用于加密数据的 _id

  • 用于加密数据的加密算法

数据加密密钥包含描述用于加密它们的客户主密钥的元数据。

驱动程序和mongosh 使用此元数据尝试自动解密您的数据。

为了自动解密您的数据,您的 CSFLE 启用的客户端执行以下程序

  1. 检查您打算解密的字段用于数据加密密钥和加密算法的BinData blob元数据。

  2. 检查当前数据库连接中配置的密钥保管库集合以获取指定的数据加密密钥。如果密钥保管库集合不包含指定的密钥,则自动解密失败,驱动程序返回错误。

  3. 检查用于加密密钥材料的客户主密钥(CMK)的数据加密密钥元数据。

  4. 解密数据加密密钥。此过程因KMS提供商而异

    对于亚马逊网络服务(AWS)KMS,将数据加密密钥发送到您的AWS KMS实例进行解密。如果CMK不存在或连接配置没有授予对CMK的访问权限,则解密失败,驱动程序返回加密的BinData blob。

    提示

    要了解如何使用亚马逊网络服务KMS进行自动加密,请参阅使用AWS的自动客户端侧字段级加密。

    对于谷歌云平台(GCP)KMS,将数据加密密钥发送到您的GCP KMS实例进行解密。如果CMK不存在或连接配置没有授予对CMK的访问权限,则解密失败,驱动程序返回加密的BinData blob。

    提示

    要了解如何使用谷歌云平台KMS进行自动加密,请参阅使用GCP的自动客户端侧字段级加密。

    对于Azure Key Vault,将数据加密密钥发送到您的Azure Key Vault实例进行解密。如果CMK不存在或连接配置没有授予对CMK的访问权限,则解密失败,驱动程序返回加密的BinData blob。

    提示

    要了解如何使用Azure Key Vault进行自动加密,请参阅使用Azure的自动客户端侧字段级加密。

    对于符合KMIP的KMS,从KMS检索CMK,然后使用CMK本地解密数据加密密钥。如果CMK不存在或连接配置没有授予对CMK的访问权限,则解密失败,驱动程序返回加密的BinData blob。

    提示

    要了解如何使用符合KMIP的KMS进行自动加密,请参阅使用KMIP的自动客户端侧字段级加密。

    对于本地密钥提供者,从您的文件系统检索CMK,并使用它来解密数据加密密钥。如果数据库配置中指定的本地密钥没有用于加密数据加密密钥,则解密失败,驱动程序返回加密的BinData blob。

    警告

    在生产环境中确保您的本地密钥文件安全

    我们建议将您的客户主密钥存储在远程 密钥管理系统KMS)。要了解如何在您的可查询加密实现中使用远程 KMS,请参阅 教程 指南。

    如果您选择在生产中使用本地密钥提供程序,请格外小心,不要将其存储在文件系统上。考虑使用辅助进程将密钥注入您的客户端应用程序,或使用其他保持密钥安全的方法。

  5. 使用解密的数据加密密钥和适当的算法解密 BinData 值。

如果应用程序可以访问 MongoDB 服务器,但没有访问所需的 CMK 和数据加密密钥,则无法解密 BinData 值。

对于读取操作,驱动程序会在发出读取操作之前,使用您的加密方案 预先 加密查询文档中的字段值。

您的客户端应用程序随后使用 BinData 元数据自动解密您从 MongoDB 收到的文档。

要了解更多关于加密方案的信息,请参阅 加密方案

要了解如何配置客户端字段级加密的数据库连接,请参阅CSFLE 的 MongoClient 选项。

要了解更多关于数据加密密钥与客户主密钥之间关系的信息,请参阅加密密钥和密钥库。

返回

组件