关于机器学习数据集内的敏感数据的注意事项

在开发机器学习 (ML) 程序时,平衡公司内部的数据访问与访问的安全隐患非常重要。您可能希望原始数据集中包含可以指导机器学习训练的数据洞见,即使对敏感数据的访问会受限也是如此。为实现这两个目标,可以在原始数据的子集上训练机器学习系统,或者在部分应用任意数量的聚合或混淆技术之后,在整个数据集上训练机器学习系统。

例如,您可能希望数据工程师训练机器学习模型来衡量客户对产品的反馈,但您不希望他们知道是谁提交了反馈。然而,收货地址和购买历史等信息对于训练机器学习模型至关重要。将数据提供给数据工程师后,他们需要查询数据以进行数据探索,因此在使用敏感数据字段之前对其进行保护非常重要。在涉及商品推荐引擎的机器学习模型中,这种困境也很常见。换言之,要创建能够返回用户特定结果的模型,通常需要访问用户特定数据。

幸运的是,您可以使用一些技术从数据集中移除一些敏感数据,同时仍然可以训练高效的机器学习模型。本文重点介绍了一些识别和保护敏感信息的策略,以及帮助解决机器学习数据可能存在的安全问题的流程。

处理敏感信息

敏感信息是指您和您的法律顾问希望通过额外的安全措施(如限制访问或加密)保护的任何数据。例如,姓名、电子邮件地址、帐单信息等字段,以及可能允许数据工程师或恶意行为者间接推断出敏感信息的信息通常被视为敏感信息。

HIPAA 和 PCI-DSS 等标准规定了一套保护敏感数据的最佳做法,同时告知客户其敏感数据可能的处理方式。这些认证允许客户就其信息的安全性做出明智的决策。

出于以下原因,处理机器学习数据集中的敏感数据可能很困难:

  • 大多数基于角色的安全性都是针对所有权概念实现的,具体表现为用户可以查看和/或修改自己的数据,但无法访问不属于他们的数据。但在汇总了许多用户的数据的机器学习数据集中,这种所有权的概念失效了。因为您需要授予数据工程师对整个数据集的查看权限,以便他们有效地使用数据集。
  • 为提高安全性,我们通常会加密或降低敏感字段的解析度,但对于机器学习数据集来说,这种方法并不总是奏效。原因在于聚合数据集本身就可提供通过频率分析攻击来破解加密的方法。
  • 从数据集中随机标记化、禁用或移除敏感字段可能会隐藏必要的数据,这样就会妨碍有效的机器学习模型训练,从而导致预测性能不佳。

组织通常会开发工具和一组最佳做法,以便在安全性和实用性之间取得适当的平衡。为了帮助保护机器学习数据集中的敏感数据,请记住以下三个目标,本文档的其余部分将对此进行介绍:

  • 识别数据集中高置信度的敏感数据。
  • 保护敏感数据,同时确保不对项目产生负面影响。可以通过移除、遮盖或粗化已确定的敏感数据来实现。
  • 创建治理计划和最佳做法文档。这样,您的数据工程师和客户就可以针对敏感数据做出合适的决策,尤其是在无法可靠地识别、遮盖或移除敏感数据的场景中。

以下各部分将详细介绍这三个目标,并主要关注数据集在公司内保持不公开的场景。本文不涉及要公开共享数据集的场景。

识别敏感数据

在某些场景中,您的环境可能存在敏感数据。以下部分介绍了五种最常见的场景,并为您提供了识别每种场景中的敏感数据的方法。

列中的敏感数据

敏感数据可以限制在结构化数据集的特定列中。例如,您可能有一组包含用户名字、姓氏和邮寄地址的列。在这种情况下,您可以确定哪些列中具有敏感数据、确定如何保护这些数据,并记录这些决策。

非结构化文本数据集中的敏感数据

敏感数据可以是基于非结构化文本的数据集的一部分,通常可以使用已知模式对其进行检测。例如,可以使用信用卡号的通用正则表达式模式可靠地检测聊天记录中的信用卡号。使用更复杂的工具可以最大限度地减少导致错误分类的正则表达式检测错误,例如 Cloud Data Loss Prevention API (DLP)。

自由格式非结构化数据中的敏感数据

敏感数据可以存在于自由格式的非结构化数据中,例如文本报告、录音、照片或扫描收据。在这些数据集中识别敏感数据变得更加困难,但有许多工具可以帮到您。

  • 对于自由文本文档,您可以使用自然语言处理系统(如 Cloud Natural Language API)来识别实体、电子邮件地址和其他敏感数据。
  • 对于录音,您可以使用语音转文字服务(如 Cloud Speech API),然后应用自然语言处理程序。
  • 对于图像,您可以使用文本检测服务(如 Cloud Vision API)从图像中提取原始文本,并隔离图像中文本的位置。Vision API 可以为图像中的某些目标项提供位置坐标,例如,您可以使用此信息在训练机器学习模型之前遮掩收银台排队图中的所有人脸,以估算平均客户等待时间。
  • 对于视频,您可以将每个视频解析为单个图像帧并将其视为图像文件,或者您可以使用视频处理工具(如 Cloud Video Intelligence API 和 Cloud Speech API)来处理音频。

这些技术仍需经过您自己的法律顾问的审查和批准,其识别潜在敏感数据的效果取决于您的系统能够处理自由文本、转录音频、解析图像和分割视频的程度。上文列出的 Google API 以及 DLP API 是您可以整合到预处理流水线中的强大工具。但是,这些自动化方法并不完善,您需要考虑维护一项治理政策以处理清理后仍然存在的任何敏感信息。

字段组合中的敏感数据

敏感数据可以作为字段的组合存在,或者随着时间的推移从受保护字段的变更信息中显现出来。例如,降低识别用户的可能性的标准做法是将邮政编码的最后两位数字模糊处理,将邮政编码从五位缩减为三位 ("zip3")。但是,与工作相关联的 zip3 和与家庭住址相关联的 zip3 的组合可能足以识别具有不寻常的家庭工作组合信息的用户。同样,随着时间的推移,zip3 家庭住址的变更信息可能足以识别已经搬家多次的个体。

确定数据集在面对频率分析攻击时是否真正受到保护需要具备统计专业知识。任何依赖于人类专家的场景都存在可伸缩性的挑战,并且可能自相矛盾地要求同一数据工程师清理数据以检查原始数据是否存在潜在问题。理想情况下,您可以创建自动化方法来识别和量化这种风险,但这超出了本文的讨论范围。

总之,您应该与您的法律顾问和数据工程师一起评估您在这些场景中面临的风险。

非结构化内容中的敏感数据

由于嵌入了上下文信息,敏感数据有时会存在于非结构化内容中。例如,聊天记录可能包含短句“我昨天在办公室给你打电话了,但是四楼的移动信号太差,所以我必须前往十八楼 Cafe Deluxe Espresso 咖啡厅旁边的休息室。”

根据您的训练数据的上下文和范围以及您的法律顾问的建议,您可能希望过滤此内容的某些信息。由于这种场景具有非结构化性质并存在能够产生类似推断的大量短句的复杂组合,因此很难用程序化工具来解决问题,但您可以考虑对整个非结构化数据集的访问执行更严格的治理。

对于模型开发,通常有效的做法是采用已被可信人员清理和审查过的数据的子样本,并使其可用于模型开发。然后,您将能够使用安全限制和软件自动化来通过生产模型训练流程处理完整数据集。

保护敏感数据

识别敏感数据后,必须确定如何保护它。

移除敏感数据

如果项目不需要用户特定信息,请考虑在将数据集提供给数据工程师以构建机器学习模型之前从数据集中删除这些信息。但是,如前所述,在某些情况下,移除敏感数据会大幅降低数据集的价值,在这些情况下,应使用“遮盖敏感数据”部分中介绍的一种或多种技术来遮盖敏感数据。

针对数据集的不同结构,移除敏感数据需要采用不同的方法:

  • 当数据仅存在于结构化数据集中的特定列时,您可以创建一个不提供对相关列的访问权限的视图。数据工程师无法查看数据,但同时数据仍然有效,并且不需要人工干预来去除其标识以进行持续训练。
  • 当敏感数据为非结构化内容的一部分,但可以使用已知模式识别时,它可以被自动移除并替换为通用字符串。这就是 Cloud DLP 应对这一挑战的方法。
  • 当敏感数据存在于图像、视频、音频或非结构化自由格式数据中时,您可以扩展已部署的工具以识别敏感数据并对其进行遮盖或移除处理。
  • 当由于字段组合而存在敏感数据,并且您已合并自动化工具或手动数据分析步骤来量化每列所带来的风险时,您的数据工程师可以针对保留或移除任何相关列做出明智的决策。

遮盖敏感数据

当您无法移除敏感数据字段时,您的数据工程师仍有可能使用经过遮盖的数据来训练出有效模型。如果您的数据工程师确定可以遮盖部分或全部敏感数据字段而不影响机器学习训练,则您可以采用多种方式来遮盖数据。

  • 最常见的方法是使用替换加密,这种方法使用所有出现的纯文本标识符的哈希值和/或加密值对其进行替换。通常认为使用强加密哈希算法(如 SHA-256)或强加密算法(如 AES-256)来存储所有敏感字段是最佳做法。重要的是要记住,加密时使用盐不会产生可重复的值,这对机器学习训练是不利的。

  • 标记化是一种遮盖技术,它用不相关的假值替换存储在每个敏感字段中的实际值。假值到实际值的映射会在完全不同且可能更安全的数据库中加密/哈希化。值得注意的是,只有在相同的值重复使用同一标记值时,此方法才适用于机器学习数据集。在这种情况下,它类似于替换加密,并且易受频率分析攻击。两者的主要区别在于标记化通过将加密值推送到单独的数据库中来增加额外的保护层。

  • 另一种通过多列保护数据的方法使用主成分分析法 (PCA) 或其他降维技术来组合多个特征,然后仅对得到的 PCA 向量进行机器学习训练。例如,给定三个不同的字段,包括“年龄”、“是否吸烟”(以 1 或 0 表示)和“体重”。然后,这些数据会被压缩到单个 PCA 列中,该列使用以下等式:1.5 * 年龄 + 30 * 是否吸烟 + 0.2 * 体重。那么,一个 20 岁、有吸烟习惯、体重 140 磅的人的 PCA 值就是 88。这与 30 岁、不吸烟、体重 215 磅的人的 PCA 值相同。

    这种方法非常强大,因为即便能够通过某个独特属性识别出某人,也很难在没有 PCA 向量公式解释的情况下唯一确定这个人。但是,所有 PCA 处理都会减少数据分布,以准确性换取安全性。

如前所述,有时可以使用不同标识符在自然情况下出现的频率的先验知识来破坏替换密文,并从各种加密标识符的实际出现频率得出推论。例如,婴儿姓名公开数据集中的名字分布可用于推断特定加密标识符可能代表的名字。鉴于不良行为者可能有权访问完整数据集,加密、哈希化和标记化很容易受到频率分析攻击。此外,泛化和量化在其替换中使用多对一映射,相应的推断会稍弱,但仍然容易受到频率分析攻击。由于机器学习数据集具有许多相应的变量,因此频率分析攻击可以使用出现的联合概率,使得密文更容易被破解。

因此,所有遮盖方法都必须与有效的审计和治理机制相结合,以限制对可能包含敏感数据的所有机器学习数据集的访问。这包括所有敏感字段已禁用、加密、量化或泛化的数据集。

粗化敏感数据

粗化是另一种用于降低数据精度或粒度的技术,旨在使数据集中的敏感数据更难以识别,同时仍然可以提供接近使用粗化前数据训练模型的性能。以下字段特别适合使用此方法:

  • 位置。全球各地有着各不相同的人口密度,并且您很难确定应该将位置坐标粗化到哪种程度。例如,基于小数的经纬度,四舍五入到小数点后一位(例如 -90.3,约 10 公里内),可能足以确定农村地区拥有大农场的居民。当舍入不足以粗化坐标时,您可以使用位置标识符,例如城市、州或邮政编码。它们覆盖了更大的区域,因此更难区分某个人。请选择足够大的存储分区大小以充分粗化任何一行的独特特征。
  • 邮政编码。5+4 形式的美国邮政编码可以识别家庭,但也可以进行粗化,使其仅包含前三位(“zip3”)。这限制了通过将许多用户放入同一个存储分区来识别特定用户的能力。同样,建议您量化这种风险,因为巨大的数据集可能会带来越来越复杂的攻击。
  • 数字。可以对数字进行分箱以降低通过它识别出某个人的可能性。例如,通常不需要知道精确的生日,只需要用户出生的年份或月份即可。因此,可以通过替换范围来粗化年龄、生日和类似的数字字段。
  • IP 地址。IP 地址通常是涉及应用日志的任何机器学习工作流的一部分,并且在敏感程度方面,它们经常被视为物理地址。使 IPv4 地址的最后八位字节归零(如果使用 IPv6,则为最后 80 位)是一种很好的粗化技术。这与将经纬度四舍五入或将街道地址精简为邮政编码相同,即以地理准确性换取安全性。我们的建议是在流水线中尽早进行 IP 地址粗化,您甚至可以修改日志记录软件,在将 IP 地址写入磁盘之前遮盖或禁用 IP 地址。

制定治理政策

如果您的数据集包含任意数量的敏感数据,建议您咨询法律顾问以制定治理政策并编写最佳做法文档。政策详情由您自行决定,也有很多资源供您参考,例如 PCI 安全标准委员会的维护 PCI DSS 合规性的最佳做法,以及 ISO/IEC 27001:2013 安全技术要求(可点击此处预览)。以下列表还包含您在制定政策框架时可以考虑的一些常见概念:

  • 为治理文档建立安全位置。
  • 从文档中排除加密密钥、哈希函数或其他工具。
  • 记录所有已知的传入敏感数据来源。
  • 记录存储的敏感数据的所有已知位置以及存在的数据类型。包括为保护它而采取的所有补救措施。
  • 记录已知、且在其中很难或不可能实施补救措施、或者补救措施不一致的敏感数据位置。这包括怀疑可能受到频率分析攻击的情况。
  • 建立一个持续扫描和识别敏感数据新来源的流程。
  • 记录已被授予临时或永久访问敏感数据权限的角色和个人员工姓名(尽量)。包括他们需要此访问权限的原因信息。
  • 记录员工请求访问敏感数据的过程。指定他们可以访问敏感数据的位置,复制敏感数据的权限、方式和地点,以及与访问权限相关的任何其他限制。
  • 建立流程以定期审核哪个员工有权访问哪些敏感数据,并确定其是否仍需要访问权限。在离职流程中加入一段内容,概述员工离职或更改角色时应采取的措施。
  • 建立流程来传达、执行并定期审查政策。

后续步骤