“文档” 菜单
文档首页
/
MongoDB Manual
/ / / / /

CSFLE 如何解密文档

在此页面上

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

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

使用 CSFLE 加密数据时,加密的数据将存储为 BinData子类型 6 对象,其中包括以下元数据:

  • 用于加密数据的数据加密密钥的_id

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

数据加密密钥包含元数据,描述使用什么客户主密钥对其进行加密。

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

要自动解密数据,启用 CSFLE 的客户端执行以下过程:

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

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

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

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

    对于 Amazon Web Services (AWS) KMS,请将数据加密密钥发送到您的 AWS KMS 实例进行解密。 如果 客户主密钥 不存在或者连接配置未授予对 客户主密钥 的访问权限,则解密失败,并且驱动程序会返回加密的BinData blob。

    提示

    要了解如何使用 Amazon Web Services KMS 进行自动加密,请参阅使用 Amazon Web Services 自动客户端字段级加密。

    对于 Google Cloud Platform (GCP) KMS,将数据加密密钥发送到 GCP KMS 实例进行解密。如果 CMK 不存在或者连接配置未授予对 CMK 的访问权限,则解密失败,并且驱动程序会返回加密的BinData blob。

    提示

    要了解如何使用 Google Cloud Platform 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)。

    要了解如何在 CSFLE 实施中使用远程 KMS,请参阅教程指南。

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

有权访问 MongoDB Server 的应用程序如果无权访问所需的 CMK 和数据加密密钥,则无法解密BinData值。

对于读操作,驱动程序会在发出读操作之前使用您的加密模式对查询文档中的字段值进行加密。

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

要了解有关加密模式的更多信息,请参阅加密模式。

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

要详细了解数据加密密钥和客户主密钥之间的关系,请参阅密钥和密钥保管库。

后退

CSFLE 加密组件

来年

CSFLE 密码学原语