AWS 数据库加密 SDK 的工作原理 - AWS 数据库加密 SDK

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS 数据库加密 SDK 的工作原理

我们的客户端加密库已重命名为 AWS 数据库加密 SDK。本开发人员指南仍提供有关 DynamoDB 加密客户端的信息。

AWS 数据库加密 SDK 提供专为保护存储在数据库中的数据而设计的客户端加密库。库包含可以直接扩展或使用的安全实施。有关定义和使用自定义组件的更多信息,请参阅数据库实现的 GitHub 存储库。

本节中的工作流程说明了 AWS 数据库加密 SDK 如何对数据库中的数据进行加密、签名、解密和验证。这些工作流使用抽象元素和默认特征描述基本流程。有关 AWS 数据库加密 SDK 如何与您的数据库实现配合使用的详细信息,请参阅数据库的加密内容主题。

AWS 数据库加密 SDK 使用信封加密来保护您的数据。每条记录都使用唯一的数据密钥进行加密。数据密钥用于为加密操作中标记为 ENCRYPT_AND_SIGN 的每个字段派生唯一的数据加密密钥。然后,使用您指定的包装密钥对数据密钥副本进行加密。要解密加密记录, AWS 数据库加密 SDK 使用您指定的包装密钥来解密至少一个加密的数据密钥。然后其可解密加密文字并返回一条明文条目。

有关 AWS 数据库加密 SDK 中使用的术语的更多信息,请参阅AWS 数据库加密的SDK概念

加密并签名

AWS 数据库加密 SDK 的核心是一个记录加密器,用于对数据库中的记录进行加密、签名、验证和解密。它取得您的记录的信息,以及要加密和签名的字段说明。它将从通过您指定的包装密钥配置的加密材料提供程序获取加密材料和加密材料的使用说明。

以下演练描述了 AWS 数据库加密 SDK 如何对您的数据条目进行加密和签名。

  1. 加密材料管理器为 AWS 数据库加密 SDK 提供了唯一的数据加密密钥:一个纯文本数据密钥、一份由指定包装密钥加密的数据密钥副本和一个 MAC 密钥

    注意

    您可以使用多个包装密钥加密数据密钥。每个包装密钥加密数据密钥的单独副本。 AWS 数据库加密 SDK 将所有加密的数据密钥存储在材料描述中。 AWS 数据库加密 SDK 在记录中添加一个用于存储材料描述的新字段(aws_dbe_head)。

    为数据密钥的每个加密副本派生一个 MAC 密钥。MAC 密钥不存储在材料描述中。反之,解密方法使用包装密钥再次派生 MAC 密钥。

  2. 加密方法对您指定的加密操作中标记为 ENCRYPT_AND_SIGN 的每个字段进行加密。

  3. 加密方法从数据密钥中派生 commitKey,并使用它生成密钥承诺值,然后再丢弃该数据密钥。

  4. 加密方法将材料描述添加到记录中。材料描述包含加密的数据密钥以及有关加密记录的其他信息。有关材料描述中包含的信息的完整列表,请参阅材料描述格式

  5. 加密方法使用步骤 1 中返回的 MAC 密钥来计算基于哈希的消息身份验证码 (HMAC) 值,而不是材料描述、加密上下文以及加密操作中标记ENCRYPT_AND_SIGN的每个字段的规范化。SIGN_ONLY SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTHMAC 值存储在加密方法添加到记录的新字段(aws_dbe_foot)中。

  6. 加密方法根据材料描述、加密上下文和每个标有 ENCRYPT_AND_SIGN “或SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT” 的字段的规范化计算 ECDSA 签名,然后将 ECDSA 签名存储在字段中。SIGN_ONLY aws_dbe_foot

    注意

    默认情况下,ECDSA 签名处于启用状态,但不是必需的。

  7. 加密方法将已加密和签名的记录存储在您的数据库中

解密并验证

  1. 加密材料管理器(CMM)提供解密方法,其中解密材料存储在材料描述中,包括明本数据密钥和关联的 MAC 密钥。

    1. CMM 使用指定的密钥环中的包装密钥为加密的数据密钥解密,然后返回明文数据密钥。

  2. 解密方法比较并验证材料描述中的密钥承诺值。

  3. 解密方法可验证签名字段中的签名。

    SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT从您定义的允许未经身份验证的字段列表中识别哪些字段已标记ENCRYPT_AND_SIGNSIGN_ONLY、或。解密方法使用步骤 1 中返回的 MAC 密钥重新计算和比较标记为、或的字段的 HMAC 值。ENCRYPT_AND_SIGN SIGN_ONLY SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT然后,它使用存储在加密上下文中的公有密钥来验证 ECDSA 签名

  4. 解密方法使用明文数据密钥解密标记为 ENCRYPT_AND_SIGN 的每个值。然后, AWS 数据库加密 SDK 会丢弃纯文本数据密钥。

  5. 解密方法返回明文记录。