

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

# 参考
<a name="reference"></a>


****  

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

以下主题提供了 AWS 数据库加密 SDK 的技术细节。

## 材料描述的格式
<a name="material-description-format"></a>

[材料描述](concepts.md#material-description)将用作加密记录的标题。当您使用 AWS 数据库加密 SDK 对字段进行加密和签名时，加密器会在组装加密材料时记录材料描述，并将材料描述存储在加密器添加到记录中的新字段 (`aws_dbe_head`) 中。材料描述是一种可移植的格式化数据结构，其中包含加密的数据密钥，以及有关如何对记录进行加密和签名的信息。下表描述了构成材料描述的值。字节是按显示的顺序附加的。


| 值 | 长度（字节） | 
| --- | --- | 
| [Version](#format-version) | 1 | 
| [Signatures Enabled](#format-signatures) | 1 | 
| [Record ID](#format-recordID) | 32 | 
| [Encrypt Legend](#format-encrypt-legend) | 变量 | 
| [Encryption Context Length](#format-encrypt-context-length) | 2 | 
| [Encryption Context](#format-encrypt-context) | 变量 | 
| [Encrypted Data Key Count](#format-data-key-count) | 1 | 
| [Encrypted Data Keys](#format-data-keys) | 变量 | 
| [Record Commitment](#format-commitment) | 1 | 

**版本**  
该 `aws_dbe_head` 字段格式的版本。

**已启用签名**  
对是否为此记录启用 ECDSA 数字签名进行编码。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/database-encryption-sdk/latest/devguide/reference.html)

**记录编号**  
随机生成的 256 位值，用于标识记录。记录 ID：  
+ 唯一地标识加密记录。
+ 将材料描述与加密记录绑定。

**加密传奇**  
对已加密的身份验证字段进行的序列化描述。加密图例用于确定解密方法应尝试解密哪些字段。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/database-encryption-sdk/latest/devguide/reference.html)
按如下方法序列化加密图例：  

1. 按字典顺序按代表其规范路径的字节序列排列。

1. 对于每个字段，按顺序附加上面指定的字节值之一，从而指示是否应加密该字段。

**加密上下文长度**  
加密上下文的长度。这是一个解释为 16 位无符号整数的 2 字节值。最大长度为 65535 个字节。

**加密上下文**  
一组名称值对，其中包含任意非机密经过身份验证的附加数据。  
启用 [ECDSA 数字签名](concepts.md#digital-sigs)后，加密上下文将包含密钥值对。`{"aws-crypto-footer-ecdsa-key": Qtxt}` `Qtxt`表示按照 [SEC 1 版本 2.0 `Q`](https://www.secg.org/sec1-v2.pdf) 压缩然后经过 base64 编码的椭圆曲线点。

**加密数据密钥计数**  
加密的数据密钥数。这是一个解释为 8 位无符号整数的 1 字节值，它指定加密的数据密钥数。每条记录中加密数据密钥的最大数量为 255。

**加密的数据密钥**  
加密的数据密钥序列。序列长度由加密的数据密钥数和每个密钥的长度决定。该序列包含至少一个加密的数据密钥。  
下表描述了组成每个加密的数据密钥的字段。字节是按显示的顺序附加的。    
**加密的数据密钥结构**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/database-encryption-sdk/latest/devguide/reference.html)  
**密钥提供商 ID 长度**  
密钥提供程序标识符的长度。这是一个解释为 16 位无符号整数的 2 字节值，它指定包含密钥提供程序 ID 的字节数。  
**密钥提供商 ID**  
密钥提供程序标识符。它用于指示加密的数据密钥的提供程序，并且可以进行扩展。  
**密钥提供者信息长度**  
密钥提供程序信息的长度。这是一个解释为 16 位无符号整数的 2 字节值，它指定包含密钥提供程序信息的字节数。  
**密钥提供商信息**  
密钥提供程序信息。这是由密钥提供程序决定的。  
当您使用 AWS KMS 密钥环时，此值包含的亚马逊资源名称 (ARN)。 AWS KMS key  
**加密数据密钥长度**  
加密的数据密钥的长度。这是一个解释为 16 位无符号整数的 2 字节值，它指定包含加密的数据密钥的字节数。  
**加密的数据密钥**  
加密的数据密钥。这是密钥提供程序加密的数据密钥。

**记录承诺**  
使用提交密钥计算出的 256 位基于哈希的消息身份验证码 (HMAC) 哈希值，计算出前面的所有材料描述字节。

## AWS KMS 分层钥匙圈技术细节
<a name="hierarchical-keyring-details"></a>

[AWS KMS 分层密钥环](use-hierarchical-keyring.md)使用唯一的数据密钥来加密每个字段，并使用派生自活动分支密钥的唯一包装密钥对每个数据密钥进行加密。该技术使用计数器模式的[密钥派生](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-108r1.pdf)和带有 HMAC SHA-256 的伪随机函数，通过以下输入派生出 32 字节的包装密钥。
+ 一个 16 字节的随机加密盐
+ 活动分支密钥
+ 密钥提供程序标识符 “” aws-kms-hierarchy 的 [UTF-8 编码](https://en.wikipedia.org/wiki/UTF-8)值

分层密钥环使用派生的包装密钥，使用带有 16 字节身份验证标签和以下输入的 AES-GCM-256 对明文数据密钥的副本进行加密。
+ 派生的包装密钥用作 AES-GCM 密码密钥
+ 数据密钥用作 AES-GCM 消息
+ 使用 12 字节的随机初始化向量（IV）作为 AES-GCM IV
+ 包含以下序列化值的其他额外验证数据（AAD）。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/database-encryption-sdk/latest/devguide/reference.html)