

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

# DynamoDB 加密客户端的工作原理
<a name="DDBEC-legacy-how-it-works"></a>

**注意**  
我们的客户端加密库已[重命名为 AWS 数据库加密 SDK](DDBEC-rename.md)。以下主题提供有关适用于 Java 的 DynamoDB 加密客户端版本 1.*x*—2.*x* 以及适用于 Python 的 DynamoDB 加密客户端版本 1.*x*—3.*x* 的信息。有关更多信息，请参阅[适用于 DynamoDB 的AWS 数据库加密 SDK 版本支持](legacy-dynamodb-encryption-client.md#legacy-support)。

DynamoDB 加密客户端专门设计为保护存储在 DynamoDB 中的数据。库包含可以直接扩展或使用的安全实施。大多数元素由抽象元素表示，因此可以创建和使用兼容的自定义组件。

**为表项目加密和签名**

负责对表项目进行加密、签名、验证和解密的*项目加密程序*是 DynamoDB 加密客户端的核心。它取得表项目信息，以及要加密和签名的项目说明，它将从您选择并配置的[加密材料提供程序](DDBEC-legacy-concepts.md#concept-material-provider)获取加密材料和加密材料的使用说明。

下图显示了此流程的高级视图。

![对 DynamoDB 加密客户端中的项目进行加密和签名](http://docs.aws.amazon.com/zh_cn/database-encryption-sdk/latest/devguide/images/arch-encrypt.png)


要对表项目进行加密和签名，DynamoDB 加密客户端需要：
+ **表的相关信息。**它从提供的 [DynamoDB 加密上下文](concepts.md#encryption-context)获取有关表的信息。某些帮助程序从 DynamoDB 获取必需信息并创建 DynamoDB 加密上下文。
**注意**  
*DynamoDB 加密*客户端中的 DynamoDB 加密上下文与 () 和中的加密上下*文*无关。 AWS Key Management Service AWS KMS AWS Encryption SDK
+ **要加密和签名的属性。**它从提供的[属性操作](DDBEC-legacy-concepts.md#legacy-attribute-actions)获取此信息。
+ **加密材料，包括加密密钥和签名密钥。**它从您选择并配置的[加密材料提供程序](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) 获取这些信息。
+ **为项目加密和签名的说明**。CMP 会将加密材料（包括加密和签名算法）使用说明添加到[实际材料描述](DDBEC-legacy-concepts.md#legacy-material-description)。

[项目加密程序](DDBEC-legacy-concepts.md#item-encryptor)将使用所有这些元素为项目加密和签名。此外，项目加密程序将两个属性添加到项目：包含加密和签名说明（实际材料描述）的[材料描述属性](DDBEC-legacy-concepts.md#legacy-material-description)以及包含签名的属性。可以直接与项目加密程序交互，或使用与项目加密程序交互的帮助程序功能以实施安全默认行为。

结果是包含已加密和已签名数据的 DynamoDB 项目。

**验证和解密表项目**

这些组件还一起运行来验证和解密项目，如下图所示。

![对 DynamoDB 加密客户端中的项目进行验证和解密](http://docs.aws.amazon.com/zh_cn/database-encryption-sdk/latest/devguide/images/arch-decrypt.png)


要验证和解密项目，DynamoDB 加密客户端要相同的组件、配置相同的组件或专门为解密项目设计的组件，如下所示：
+ **来自 [DynamoDB 加密上下文](concepts.md#encryption-context)的有关表的信息**。
+ **要验证和解密的属性。**它将从[属性操作](DDBEC-legacy-concepts.md#legacy-attribute-actions)获取这些属性。
+ 您选择和配置的[加密材料提供程序](DDBEC-legacy-concepts.md#concept-material-provider)（CMP）中的**解密材料，包括验证和解密密钥**。

  已加密项目不包括为它加密所使用的 CMP 的任何记录。您必须提供相同的 CMP、配置相同的 CMP 或设计为解密项目的 CMP。
+ **有关如何加密项目和为项目签名的信息**，包括加密和签名算法。客户端将从项目的[材料描述属性](DDBEC-legacy-concepts.md#legacy-material-description)中获取这些信息。

[项目加密程序](DDBEC-legacy-concepts.md#item-encryptor)将使用所有这些元素验证和解密项目。它还将删除材料描述和签名属性。结果是明文 DynamoDB 项目。