参考 - AWS 数据库加密 SDK

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

参考

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

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

材料描述的格式

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

版本

aws_dbe_head 字段格式的版本。

已启用签名

对是否为此记录启用ECDSA数字签名进行编码。

字节值 含义
0x01 ECDSA启用数字签名(默认)
0x00 ECDSA已禁用数字签名
记录编号

随机生成的 256 位值,用于标识记录。记录 ID:

  • 唯一地标识加密记录。

  • 将材料描述与加密记录绑定。

加密传奇

对已加密的身份验证字段进行的序列化描述。加密图例用于确定解密方法应尝试解密哪些字段。

字节值 含义
0x65 ENCRYPT_AND_SIGN
0x73 SIGN_ONLY

按如下方法序列化加密图例:

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

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

加密上下文长度

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

加密上下文

一组名称值对,其中包含任意非机密经过身份验证的附加数据。

启用ECDSA数字签名后,加密上下文将包含键值对。{"aws-crypto-footer-ecdsa-key": Qtxt} Qtxt表示按照 SEC1 版本 2.0 Q 压缩然后按 base64 编码的椭圆曲线点。

加密数据密钥计数

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

加密的数据密钥

加密的数据密钥序列。序列长度由加密的数据密钥数和每个密钥的长度决定。该序列包含至少一个加密的数据密钥。

下表描述了组成每个加密的数据密钥的字段。字节是按显示的顺序附加的。

加密的数据密钥结构
字段 长度(字节)
Key Provider ID Length 2
Key Provider ID 变量。等于在前 2 个字节(密钥提供程序 ID 长度)中指定的值。
Key Provider Information Length 2
Key Provider Information 变量。等于在前 2 个字节(密钥提供程序信息长度)中指定的值。
Encrypted Data Key Length 2
Encrypted Data Key 变量。等于在前 2 个字节(加密的数据密钥长度)中指定的值。
密钥提供商 ID 长度

密钥提供程序标识符的长度。这是一个解释为 16 位无符号整数的 2 字节值,它指定包含密钥提供程序 ID 的字节数。

密钥提供商 ID

密钥提供程序标识符。它用于指示加密的数据密钥的提供程序,并且可以进行扩展。

密钥提供者信息长度

密钥提供程序信息的长度。这是一个解释为 16 位无符号整数的 2 字节值,它指定包含密钥提供程序信息的字节数。

密钥提供商信息

密钥提供程序信息。这是由密钥提供程序决定的。

当您使用 AWS KMS 密钥环时,此值包含的 Amazon 资源名称 (ARN)。 AWS KMS key

加密数据密钥长度

加密的数据密钥的长度。这是一个解释为 16 位无符号整数的 2 字节值,它指定包含加密的数据密钥的字节数。

加密的数据密钥

加密的数据密钥。这是密钥提供程序加密的数据密钥。

记录承诺

使用提交密钥对前面所有材料描述字节计算的不同的 256 位基于哈希的消息身份验证码 (HMAC) 哈希。

AWS KMS 分层钥匙圈技术细节

AWS KMS 分层密钥环使用唯一的数据密钥来加密每个字段,并使用派生自活动分支密钥的唯一包装密钥对每个数据密钥进行加密。它使用计数器模式下的密钥派生和带有 HMAC SHA -256 的伪随机函数,通过以下输入推导出 32 字节的包装密钥。

  • 一个 16 字节的随机加密盐

  • 活动分支密钥

  • 密钥提供程序标识符 “” 的 UTF-8 编码值 aws-kms-hierarchy

分层密钥环使用派生的包装密钥使用 AES GCM -256 加密纯文本数据密钥的副本,带有 16 字节的身份验证标签和以下输入。

  • 派生的封装密钥用作 AES-GCM 密码密钥

  • 数据密钥用作 AES-GCM 消息

  • 使用 12 字节的随机初始化向量 (IV) 作为 AES-GCM IV

  • 包含以下序列化值的其他经过身份验证的数据 (AAD)。

    长度(字节) 解释为
    "aws-kms-hierarchy" 17 UTF-8 已编码
    分支密钥标识符 Variable UTF-8 已编码
    分支密钥版本 16 UTF-8 已编码
    加密上下文 Variable UTF-8 个编码的密钥值对