哪些域已被加密和签名? - AWS 数据库加密 SDK

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

哪些域已被加密和签名?

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

DynamoDB AWS 数据库加密软件开发工具包是一个专为亚马逊 DynamoDB 应用程序设计的客户端加密库。Amazon DynamoDB 将数据存储在中,表是项目的集合。每个项目 都是属性 的集合。每个属性都有各自的名称和值。适用于 DynamoDB 的 AWS 数据库加密 SDK 对属性的值进行加密。然后,它将通过属性计算签名。您可以指定哪些属性值要加密,哪些属性值要包含在签名中。

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

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

有关适用于 DynamoDB 的 AWS 数据库加密 SDK 的工作原理的更多信息,请参阅。AWS 数据库加密 SDK 的工作原理

加密属性值

适用于 DynamoDB 的 AWS 数据库加密 SDK 对您指定的属性的值(但不加密属性名称或类型)进行加密。要确定加密的属性值,请使用属性操作

例如,此项目包含 exampletest 属性。

'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 可为您识别主键属性,并确保其值已签名,但未加密。此外,如果您标识了主键,然后尝试对其进行加密,客户端将引发异常。

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

签署项目

加密指定属性值后,适用于 DynamoDB 的 AWS 数据库加密 SDK 会计算基于哈希的消息身份验证码 (HMAC) 和数字签名,而不是材料描述、加密上下文以及属性操作中标有、或的每个字段的规范化。ENCRYPT_AND_SIGNSIGN_ONLYSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT默认情况下,ECDSA 签名处于启用状态,但不是必需的。客户端将 HMAC 和签名存储到它添加到项目的新属性(aws_dbe_foot)中。