

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

# 信标
<a name="beacons"></a>


****  

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

信标是一种截断的 HMAC 散列消息认证码（HMAC）标签，用于在写入字段的明文值和实际存储在数据库中的加密值之间创建映射。信标不会更改字段的加密状态。信标根据字段的明文值计算 HMAC，并将其与加密值一起存储。此 HMAC 输出与该字段的明文值进行一对一（1:1）匹配。HMAC 输出会被截断，以便多个不同的明文值映射到同一个被截断的 HMAC 标签中。这些误报限制了未经授权的用户识别有关明文值的区别信息的能力。

信标只能由您的[加密](concepts.md#crypt-actions)操作中标有`ENCRYPT_AND_SIGN``SIGN_ONLY`、或`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`的字段构建。信标本身未经过签名或加密。您无法使用标记为 `DO_NOTHING` 的字段构造信标。

您配置的信标类型决定了您能够执行的查询类型。支持可搜索加密的信标类型有两种。*标准信标*执行相等搜索。*复合信标*则组合文字明文字符串和标准信标来执行复杂的数据库操作。[配置信标](configure-beacons.md)后，必须先为每个信标配置二级索引，然后才能搜索加密的字段。有关更多信息，请参阅 [通过使用信标配置二级索引](ddb-searchable-encryption.md#ddb-beacon-indexes)。

**Topics**
+ [标准信标](#standard-beacon-overview)
+ [复合信标](#compound-beacon-overview)

## 标准信标
<a name="standard-beacon-overview"></a>

标准信标是在数据库中实现可搜索加密的最简单方法。他们只能对单个加密字段或虚拟字段执行相等搜索。要了解如何配置标准信标，请参阅[配置标准信标](configure-beacons.md#config-standard-beacons)。



构造标准信标所依据的字段称为*信标源*。它用于标识信标需要映射的数据的位置。信标源可以是加密的字段，也可以是*虚拟字段*。每个标准信标中的信标源都必须是唯一的。您不能使用相同的信标源来配置两个信标。

标准信标可用于对加密或虚拟字段执行相等搜索。或者，它们可以用来构造复合信标以执行更复杂的数据库操作。为了帮助您组织和管理标准信标， AWS 数据库加密 SDK 提供了以下可选*信标样式*，用于定义标准信标的预期用途。有关更多信息，请参阅[定义信标样式](configure-beacons.md#define-beacon-styles)。

您可以创建对单个加密字段执行相等搜索的标准信标，也可以通过创建虚拟字段来创建对多个`ENCRYPT_AND_SIGN``SIGN_ONLY`、和`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`字段的串联执行相等搜索的标准信标。



**虚拟字段**  
虚拟字段是由一个或多个源字段构成的概念字段。创建虚拟字段不会向记录中写入新字段。虚拟字段未明确存储在数据库中。它用于标准信标配置中，从而向信标提供有关如何识别字段的特定片段或连接记录中的多个字段以执行特定查询的指令。一个虚拟字段需要至少一个加密字段。  
以下示例演示了您可以使用虚拟字段执行的转换和查询的类型。在应用中，本示例中使用的示例字段可能不符合信标的[分布](searchable-encryption.md#searchable-encryption-distribution)和[关联](searchable-encryption.md#searchable-encryption-correlated-values)唯一性建议。
例如，如果要对 `FirstName` 和 `LastName` 字段的连接执行相等搜索，您可以创建以下虚拟字段之一。  
+ 一个虚拟 `NameTag` 字段，由 `FirstName` 字段的第一个字母后跟 `LastName` 字段构造而成，全部使用小写字母。此虚拟字段使您能够查询 `NameTag=mjones`。
+ 一个虚拟 `LastFirst` 字段，由 `LastName` 字段后跟 `FirstName` 字段构造而成。此虚拟字段使您能够查询 `LastFirst=JonesMary`。
或者，如果您要对加密字段的特定片段执行相等搜索，请创建一个用于标识您要查询的片段的虚拟字段。  
例如，如果您要使用 IP 地址的前三个片段查询加密的 `IPAddress` 字段，请创建以下虚拟字段。  
+ 一个虚拟 `IPSegment` 字段，由 `Segments(‘.’, 0, 3)` 构造而成。此虚拟字段使您能够查询 `IPSegment=192.0.2`。该查询返回 `IPAddress` 值以“192.0.2”开头的所有记录。
虚拟字段必须是唯一的。不能用完全相同的源字段构造两个虚拟字段。  
如需帮助配置虚拟字段和使用虚拟字段的信标，请参阅[创建虚拟字段](configure-beacons.md#create-virtual-field)。

## 复合信标
<a name="compound-beacon-overview"></a>

复合信标创建的索引可以提高查询性能，并且使您能够执行更复杂的数据库操作。您可以使用复合信标组合文字明文字符串和标准信标来对加密记录执行复杂的查询，例如从单个索引中查询两种不同的记录类型或使用排序键查询字段组合。有关更多复合信标解决方案示例，参阅[选择信标类型](choosing-beacon-type.md)。

复合信标可以由标准信标或标准信标和带符号字段的组合构建。它们由各部分的列表构造。所有复合信标都应包括用于识别信标中包含的 `ENCRYPT_AND_SIGN` 字段的[加密部分](configure-beacons.md#encrypted-parts)列表。每个 `ENCRYPT_AND_SIGN` 字段都必须用标准信标识别。更复杂的复合信标还可能包括标识信标中包含的纯文本`SIGN_ONLY`或`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`字段的[签](configure-beacons.md#signed-parts)名[部分列表，以及标识复合信标组装字段的所有可能方式的构造器部分](configure-beacons.md#constructor-parts)列表。

**注意**  
 AWS 数据库加密 SDK 还支持*签名信标*，这些信标可以完全通过纯文本`SIGN_ONLY`和字段进行配置。`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`签名信标是一种复合信标，用于对已签名但未加密的字段进行索引和执行复杂查询。有关更多信息，请参阅 [创建签名的信标](configure.md#signed-beacons)。

如需帮助配置复合信标，请参阅[配置复合信标](configure-beacons.md#config-compound-beacons)。

您配置复合信标的方式决定了您可以执行的查询类型。举例来说，您可以将一些已加密和签名的部分设为可选，以提高查询的灵活性。有关复合信标可以执行的查询类型的更多信息，请参阅 [查询信标](using-beacons.md#querying-beacons)。