

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

# 哪些域已被加密和签名？
<a name="DDB-encrypted-and-signed"></a>


****  

|  | 
| --- |
| 我们的客户端加密库已重命名为 AWS 数据库加密 SDK。本开发人员指南仍提供有关 [DynamoDB 加密客户端](legacy-dynamodb-encryption-client.md)的信息。 | 

DynamoDB AWS 数据库加密软件开发工具包是一个专为亚马逊 DynamoDB 应用程序设计的客户端加密库。Amazon DynamoDB 将数据存储在[表](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.TablesItemsAttributes)中，表是项目的集合。每个*项目* 都是*属性* 的集合。每个属性都有各自的名称和值。适用于 DynamoDB 的 AWS 数据库加密 SDK 对属性的值进行加密。然后，它将通过属性计算签名。您可以指定哪些属性值要加密，哪些属性值要包含在签名中。

加密可保护属性值的机密性。签名提供了所有已签名属性及其相互关系的完整性，并提供了身份验证。它使您能够整体检测项目的未经授权的更改（包括添加或删除属性），或者用一个加密值替换另一个加密至。

在加密项目中，某些数据保持明文形式，包括表名称、所有属性名称、未加密的属性值、主键（分区键和排序键）属性的名称和值以及属性类型。请勿在这些域中存储敏感数据。

有关适用于 DynamoDB 的 AWS 数据库加密 SDK 的工作原理的更多信息，请参阅。[AWS 数据库加密 SDK 的工作原理](how-it-works.md)

**注意**  
[适用于 DynamoDB 的 AWS 数据库加密 SDK 主题中所有提及*属性操作*的内容均指加密操作。](concepts.md#crypt-actions)

**Topics**
+ [加密属性值](#encrypt-attribute-values)
+ [签署项目](#sign-the-item)

## 加密属性值
<a name="encrypt-attribute-values"></a>

适用于 DynamoDB 的 AWS 数据库加密 SDK 对您指定的属性的值（但不加密属性名称或类型）进行加密。要确定加密的属性值，请使用[属性操作](concepts.md#crypt-actions)。

例如，此项目包含 `example` 和 `test` 属性。

```
'example': 'data',
'test': 'test-value',
...
```

如果您加密了 `example` 属性，但未加密 `test` 属性，结果将类似于以下内容。加密的 `example` 属性值是二进制数据，而不是字符串。

```
'example': Binary(b"'b\x933\x9a+s\xf1\xd6a\xc5\xd5\x1aZ\xed\xd6\xce\xe9X\xf0T\xcb\x9fY\x9f\xf3\xc9C\x83\r\xbb\\"),
'test': 'test-value'
...
```

每个项目的主键属性（分区键和排序键）必须保持明文形式，因为 DynamoDB 使用它们在表中查找项目。应该对它们进行签名而不是加密。

适用于 DynamoDB 的 AWS 数据库加密 SDK 可为您识别主键属性，并确保其值已签名，但未加密。此外，如果您标识了主键，然后尝试对其进行加密，客户端将引发异常。

客户端将[材料描述](concepts.md#material-description)存储在添加到项目的新属性（`aws_dbe_head`）中。材料描述说明了项目是如何加密和签名的。客户端使用此信息来验证和解密项目。存储材料描述的字段没有加密。

## 签署项目
<a name="sign-the-item"></a>

[加密指定属性值后，适用于 DynamoDB 的 AWS 数据库加密 SDK 会计算基于哈希的消息身份验证码 HMACs () 和[数字](concepts.md#digital-sigs)签名，而不是材料描述[、加密上下文以及属性操作中标记、](concepts.md#encryption-context)或的每个字段`ENCRYPT_AND_SIGN`的规范化。`SIGN_ONLY``SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`](concepts.md#crypt-actions)默认情况下，ECDSA 签名处于启用状态，但不是必需的。客户端将 HMACs 和签名存储在添加到项目的新属性 (`aws_dbe_foot`) 中。