本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用加密计算时的注意事项 Clean Rooms
加密计算 Clean Rooms (C3R) 力求最大限度地保护数据。但是,某些使用案例可能会受益于较低级别的数据保护,以换取额外的功能。您可以通过修改 C3R 最安全的配置来做出这些特定的权衡。作为客户,您应该了解这些权衡,并确定它们是否适合您的使用案例。要考虑的权衡包括以下内容:
有关如何为这些场景设置参数的更多信息,请参阅加密计算参数。
允许混合 cleartext 以及表中的加密数据
对所有数据进行客户端加密可最大限度地保护数据。但是,这限制了某些类型的查询(例如,SUM 聚合函数)。允许的风险 cleartext 数据是,任何有权访问加密表的人都可以推断出一些有关加密值的信息。这可以通过对以下内容进行统计分析来完成 cleartext 以及相关的数据。
例如,假设您的列为 City 和 State。该City栏目是 cleartext 并且该State列已加密。当您看到 City 列中的 Chicago 值时,这有助于您确定 State 很有可能是 Illinois。相比之下,如果一列是City,另一列是EmailAddress,那么 cleartext City不太可能透露任何关于加密的信息EmailAddress。
有关此场景的参数的更多信息,请参阅允许 cleartext 列参数。
允许输入重复的值 fingerprint 列
对于最安全的方法,我们假设任何 fingerprint 列只包含一个变量实例。任何项目都不能在 a 中重复 fingerprint 专栏。C3R 加密客户端会映射这些 cleartext 将值转换为与随机值无法区分的唯一值。因此,不可能推断出有关 cleartext 来自这些随机值。
在 a 中重复值的风险 fingerprint column 表示重复的值将导致重复的随机值。因此,从理论上讲,任何有权访问加密表的人都可以对加密表进行统计分析 fingerprint 可能泄露相关信息的列 cleartext 价值观。
再说一遍,假设 fingerprint 列为State,表中的每一行都对应一个美国家庭。通过频率分析,人们很有可能推断出哪个州是 California,哪个州是 Wyoming。这种推断是可能的,因为 California 的居民人数远远超过 Wyoming。相比之下,说 fingerprint 列位于家庭标识符上,每个家庭在包含数百万个条目的数据库中出现在数据库中 1 到 4 次。频率分析不太可能揭示任何有用的信息。
有关此场景的参数的更多信息,请参阅“允许重复”参数。
放松对方式的限制 fingerprint 列被命名
默认情况下,我们假设当两个表使用加密方式连接时 fingerprint 列,这些列在每个表中具有相同的名称。造成这种结果的技术原因是,默认情况下,我们派生出不同的加密密钥来加密每个密钥 fingerprint 专栏。该密钥源自协作共享密钥和列名的组合。如果我们尝试联接具有不同列名的两列,则会派生出不同的密钥,并且无法计算出有效的联接。
要解决这个问题,可以关闭从每个列名派生密钥的功能。然后,C3R 加密客户端对所有人使用一个派生密钥 fingerprint 列。风险在于可以进行另一种可能揭示信息的频率分析。
让我们再次以 City 和 State 为例。如果我们为每个随机值导出相同的随机值 fingerprint 列(不合并列名)。 New YorkCity和State列中的随机值相同。纽约是美国为数不多的 City 名称与 State 名称相同的城市之一。相比之下,如果数据集的每一列都有完全不同的值,则不会泄露任何信息。
有关此场景的参数的更多信息,请参阅允许 JOIN 具有不同名称的列的参数。
确定如何 NULL 值被表示出来
您可以选择是否以加密方式进行处理(加密和 HMAC) NULL 像任何其他值一样的值。如果你不处理 NULL 值与任何其他值一样,信息可能会被泄露。
例如,假设 NULL 在Middle Name栏目中 cleartext 表示没有中间名的人。如果您不加密这些值,则会泄露加密表中哪些行用于没有中间名的人。对于某些人群中的某些人来说,这些信息可能是一个识别信号。但是,如果你进行加密处理 NULL 值,某些 SQL 查询的行为会有所不同。例如,GROUP BY 子句不会分组 fingerprint
NULL 中的值 fingerprint 列在一起。
有关此场景的参数的更多信息,请参阅Preserve NULL 值参数。