

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

# 加密计算参数
<a name="crypto-computing-parameters"></a>

在[创建协作](create-collaboration.md)时，可使用 Clean Rooms 加密计算 (C3R) 为协作提供加密计算参数。您可以使用 AWS Clean Rooms 控制台或 `CreateCollaboration` API 操作创建协作。在控制台中，启用**支持加密计算**选项后，可以为**加密计算参数**中的参数设置值。有关更多信息，请参阅以下主题。

**Topics**
+ [允许 cleartext 列参数](#parameter-allowcleartext)
+ [“允许重复”参数](#parameter-allowduplicates)
+ [“允许对具有不同名称的列进行 JOIN”参数](#parameter-allowjoin)
+ [“保留 NULL 值”参数](#parameter-preservenulls)

## 允许 cleartext 列参数
<a name="parameter-allowcleartext"></a>

在控制台中，您可以在[创建协作](create-collaboration.md)时设置**允许 cleartext 列**参数，以指定是否允许在包含加密数据的表中包含 cleartext 数据。

下表描述了**允许 cleartext 列**参数的值。


| 参数值 | 说明 | 
| --- | --- | 
| 否 | 加密表中不允许有 Cleartext 列。所有数据都受到加密保护。 | 
| 是 | 加密表中允许有 Cleartext 列。<br />Cleartext 列不受加密保护，包含为 cleartext。您应该注意行中的 cleartext 数据可能揭示了表中其他数据的哪些信息。<br />要在特定列上运行 SUM 或 AVG，这些列必须是 cleartext。 | 

使用 `CreateCollaboration` API 操作，对于 `dataEncryptionMetadata` 参数，您可以将 `allowCleartext` 的值设置为 `true` 或 `false`。有关 API 操作的更多信息，请参阅 [AWS Clean Rooms API 参考](https://docs.aws.amazon.com/clean-rooms/latest/apireference/Welcome.html)。

Cleartext 列对应于按表特定架构分类为 cleartext 的列。这些列中的数据未加密，可以以任何方式使用。 Cleartext如果需要比加密列或fingerprint列所允许的更大的灵活性， and/or 则如果数据不敏感，则sealed列可能很有用。

## “允许重复”参数
<a name="parameter-allowduplicates"></a>

在控制台中，您可以在[创建协作](create-collaboration.md)时设置**允许重复**参数，以指定为 JOIN 查询加密的列是否可以包含重复的非 NULL 值。

**重要**  
**允许重复**、[**允许对不同名称列进行 JOIN**](#parameter-allowjoin) 和[**保留 NULL 值**](#parameter-preservenulls)参数具有单独但相关的效果。

下表描述了**允许重复**参数的值。


| 参数值 | 说明 | 
| --- | --- | 
| 否  | fingerprint 列中不允许有重复的值。单个 fingerprint 列中的所有值都必须是唯一的。 | 
| 是 | fingerprint 列中允许有重复的值。<br />如果需要联接具有重复值的列，请将此值设置为**是**。如果设置为**是**，则 C3R 表或结果的 fingerprint 列中出现的频率模式可能意味着有关 cleartext 数据结构的一些其他信息。 | 

使用 `CreateCollaboration` API 操作，对于 `dataEncryptionMetadata` 参数，您可以将 `allowDuplicates` 的值设置为 `true` 或 `false`。有关 API 操作的更多信息，请参阅 [AWS Clean Rooms API 参考](https://docs.aws.amazon.com/clean-rooms/latest/apireference/Welcome.html)。

默认情况下，如果必须在 JOIN 查询中使用加密数据，则 C3R 加密客户端要求这些列没有重复值。此要求是为了加强数据保护。这种行为可以帮助确保无法观察到数据中的重复模式。但是，如果您想在 JOIN 查询中使用加密数据并且不担心重复值，则**允许重复**参数可以禁用此保守检查。

## “允许对具有不同名称的列进行 JOIN”参数
<a name="parameter-allowjoin"></a>

在控制台中，您可以在[创建协作](create-collaboration.md)时设置**允许对具有不同名称的列进行 JOIN** 参数，以指定是否支持具有不同名称的列之间的 JOIN 语句。

有关更多信息，请参阅 [列标题名称的标准化](crypto-computing-column-names.md#column-header-names-normalization)。

下表描述了**允许对具有不同名称的列进行 JOIN** 参数的值。


| 参数值 | 说明 | 
| --- | --- | 
| 否  | 不支持联接具有不同名称的 fingerprint 列。JOIN 语句仅在具有相同名称的列上提供准确的结果。 **否**值可提高信息安全性，但要求协作参与者事先就列名达成共识。如果两列在加密为 fingerprint 列时具有不同的名称，并且**允许对具有不同名称的列进行 JOIN** 设置为**否**，则对这些列的 JOIN 语句不会生成任何结果。这是因为它们之间不共享加密后的值。  | 
| 是 | 支持联接具有不同名称的 fingerprint 列。为了提高灵活性，用户可以将此值设置为**是**，这样无论列名如何，都允许对列执行 JOIN 语句。<br />如果设置为**是**，则 C3R 加密客户端在保护 fingerprint 列时将不会考虑列名。因此，在 C3R 表中可以观察到不同 fingerprint 列的共同值。<br />例如，如果一行在 `City` 列和 `State` 列中都具有相同的加密 JOIN 值，则可以合理地推断出该值为 `New York`。 | 

使用 `CreateCollaboration` API 操作，对于 `dataEncryptionMetadata` 参数，您可以将 `allowJoinsOnColumnsWithDifferentNames` 的值设置为 `true` 或 `false`。有关 API 操作的更多信息，请参阅 [AWS Clean Rooms API 参考](https://docs.aws.amazon.com/clean-rooms/latest/apireference/Welcome.html)。

默认情况下，fingerprint 列加密受该列的 `targetHeader` 所影响，它在[步骤 4：为表格文件生成加密架构](gen-encryption-schema-csv.md)中设置。因此，同一个 cleartext 值在每个不同的 fingerprint 列中都有不同的加密表示。

在某些情况下，此参数可用于防止推断 cleartext 值。例如，在 fingerprint 列中看到相同的加密值时，可以通过 `City` 和 `State` 来合理地推断该值是 `New York`。但是，使用此参数需要事先进行额外的协调，以便查询中要联接的所有列都具有共享名称。

您可以使用**允许对具有不同名称的列进行 JOIN** 参数来放宽此限制。当参数值设置为 `Yes` 时，无论名称如何，都允许一起使用为 JOIN 加密的任何列。

## “保留 NULL 值”参数
<a name="parameter-preservenulls"></a>

在控制台中，您可以在[创建协作](create-collaboration.md)时设置**保留 NULL 值**参数，以指示该列不存在任何值。

下表描述了**保留 NULL 值**参数的值。


| 参数值 | 说明 | 
| --- | --- | 
| 否 | NULL 值不会被保留。NULL 值在加密表中不会显示为 NULL。NULL 值在 C3R 表中显示为唯一的随机值。 | 
| 是 | NULL 值会被保留。NULL 值在加密表中显示为 NULL。如果您需要 NULL 值的 SQL 语义，则可以将此值设置为是。因此，无论列是否加密以及允许重复的参数设置如何，NULL 条目在 C3R 表中都会显示为 NULL。 | 

使用 `CreateCollaboration` API 操作，对于 `dataEncryptionMetadata` 参数，您可以将 `preserveNulls` 的值设置为 `true` 或 `false`。有关 API 操作的更多信息，请参阅 [AWS Clean Rooms API 参考](https://docs.aws.amazon.com/clean-rooms/latest/apireference/Welcome.html)。

当协作的**保留 NULL 值**参数设置为**否**时：

1. `cleartext` 列中的 NULL 条目保持不变。

1. 加密 `fingerprint` 列中的 NULL 条目被加密为随机值以隐藏其内容。在 cleartext 中联接带有 NULL 条目的加密列不会生成任何 NULL 条目的任何匹配项。不会进行任何匹配，因为它们各自会收到自己的唯一随机内容。

1. 加密 `sealed` 列中的 NULL 条目已加密。

当协作的**保留 NULL 值**参数的值设置为**是**时，无论列是否加密，所有列中的 NULL 条目都将保持为 NULL。

**保留 NULL 值**参数在数据扩充等情况下非常有用，在这些情况下，您需要共享以 NULL 表示的信息缺失。在 fingerprint 或 HMAC 格式中，如果要进行 JOIN 或 GROUP BY 的列中有 NULL 值，**保留 NULL 值**参数也很有用。

如果**允许重复**和**保留 NULL 值**参数的值设置为**否**，则在 fingerprint 列中包含多个 NULL 条目会产生错误并停止加密。如果任一参数的值设置为**是**，则不会发生此类错误。