本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 列都只包含一个变量实例。fingerprint 列中的任何项目都不能重复。C3R 加密客户端将这些 cleartext 值映射为与随机值无法区分的唯一值。因此,不可能从这些随机值中推断出 cleartext 信息。
fingerprint 列中有重复值的风险在于,重复的值会导致重复的随机值。因此,从理论上讲,任何有权访问加密表的人都可以对可能揭示 cleartext 值信息的 fingerprint 列进行统计分析。
同样,假设 fingerprint 列是 State
,并且表中的每一行都对应一个美国家庭。通过频率分析,人们很有可能推断出哪个州是 California
,哪个州是 Wyoming
。这种推断是可能的,因为 California
的居民人数远远超过 Wyoming
。相比之下,假设 fingerprint 列位于家庭标识符上,在包含数百万个条目的数据库中,每个家庭出现 1 到 4 次。频率分析不太可能揭示任何有用的信息。
有关此场景的参数的更多信息,请参阅“允许重复”参数。
放宽对 fingerprint 列命名方式的限制
默认情况下,我们假设当使用加密 fingerprint 列联接两个表时,这些列在每个表中的名称相同。此结果的技术原因是,默认情况下,我们派生出不同的加密密钥来加密每个 fingerprint 列。该密钥源自协作共享密钥和列名的组合。如果我们尝试联接具有不同列名的两列,则会派生出不同的密钥,并且无法计算出有效的联接。
要解决这个问题,可以关闭从每个列名派生密钥的功能。然后,C3R 加密客户端对所有 fingerprint 列使用一个派生密钥。风险在于可以进行另一种可能揭示信息的频率分析。
让我们再次以 City
和 State
为例。如果我们为每个 fingerprint 列派生相同的随机值(不包含列名)。New York
在 City
和 State
列中的随机值相同。纽约是美国为数不多的 City
名称与 State
名称相同的城市之一。相比之下,如果数据集的每一列都有完全不同的值,则不会泄露任何信息。
有关此场景的参数的更多信息,请参阅“允许对具有不同名称的列进行 JOIN”参数。
确定 NULL 值的表示方式
您可以选择是否像处理其他值一样对 NULL 值进行加密处理(加密和 HMAC)。如果您不像处理其他值一样处理 NULL 值,可能会揭示信息。
例如,假设 cleartext 中 Middle Name
列中的 NULL 表示没有中间名的人。如果您不加密这些值,则会泄露加密表中哪些行用于没有中间名的人。对于某些人群中的某些人来说,这些信息可能是一个识别信号。但是,如果您对 NULL 值进行加密处理,某些 SQL 查询的行为就会有所不同。例如,GROUP BY 子句不会将 fingerprint 列中的 fingerprintNULL 值分组在一起。
有关此场景的参数的更多信息,请参阅“保留 NULL 值”参数。