

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 哪些欄位已加密並簽署？
<a name="DDB-encrypted-and-signed"></a>


****  

|  | 
| --- |
| 我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。此開發人員指南仍提供有關 [DynamoDB 加密用戶端](legacy-dynamodb-encryption-client.md)的資訊。 | 

適用於 DynamoDB 的 AWS Database Encryption SDK 是專為 Amazon DynamoDB 應用程式設計的用戶端加密程式庫。Amazon DynamoDB 將資料存放在[資料表](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.TablesItemsAttributes)中，這是項目的集合。每個*項目*都是*屬性*的集合。每個屬性都有名稱和數值。適用於 DynamoDB 的 AWS Database Encryption SDK 會加密屬性的值。接著，它會透過屬性計算簽章。您可以指定哪些屬性值要加密，以及哪些屬性值要包含在簽章中。

加密可保護屬性值的機密性。簽署可提供所有已簽署屬性的完整性及其彼此的關係，並可提供驗證。它可讓您偵測對整體項目的未授權變更 (包括新增或刪除屬性)，或是替換已加密的值。

在加密的項目中，某些資料會保留為純文字，包括資料表名稱、所有屬性名稱、您未加密的屬性值、主索引鍵 （分割區索引鍵和排序索引鍵） 屬性的名稱和值，以及屬性類型。請勿在這些欄位中存放敏感性資訊。

如需 DynamoDB AWS 資料庫加密開發套件運作方式的詳細資訊，請參閱 [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 Database Encryption 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 Database Encryption SDK 會為您識別主要金鑰屬性，並確保其值已簽章，但未加密。而且，如果您找出您的主要索引鍵，然後試著將它加密，則用戶端會擲出例外狀況。

用戶端會將[材料描述](concepts.md#material-description)存放在新增至項目的新屬性 (`aws_dbe_head`) 中。資料描述說明項目的加密和簽署方式。用戶端會使用此資訊來驗證並解密項目。存放材料描述的欄位不會加密。

## 簽署項目
<a name="sign-the-item"></a>

加密指定的屬性值後，適用於 DynamoDB 的 AWS Database Encryption SDK 會計算雜湊型訊息驗證碼 (HMACs) 和[數位簽章](concepts.md#digital-sigs)，而不是材料描述、[加密內容](concepts.md#encryption-context)和[屬性動作](concepts.md#crypt-actions)`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`中標記為 `ENCRYPT_AND_SIGN`、 `SIGN_ONLY`或 的每個欄位的正式化。ECDSA 簽章預設為啟用，但非必要。用戶端會將 HMACs 和簽章存放在新增至項目的新屬性 (`aws_dbe_foot`) 中。