在Intuit,我们团队搭建过一条处理TurboTax报税数据的数据管道。这些数据要供给仪表盘、分析任务和其他下游场景使用。最大的难题之一,是保护社保号这类个人身份信息。

社保号极度敏感,在数据管道的每个环节都必须被保护。但与此同时,分析团队有时需要做正当的业务操作,比如找出某个客户对应的记录,或者做精确匹配查询。

打开网易新闻 查看精彩图片

那么问题来了:怎么在保护敏感数据的同时,还允许受控的等值搜索,而不暴露明文?

先搞清楚:为什么要加密

社保号、邮箱地址、电话号码、财务信息,都属于高度敏感的个人身份信息。如果把明文直接存进数据湖或数据库,存储层一旦被攻破,就可能泄露大量敏感信息。

加密的作用,是把明文转换成密文。没有对应的密钥,密文不应该暴露原始值。但对数据平台来说,加密又带来了一个新要求。

假设一个分析应用需要找出社保号等于某个值的记录。如果社保号是加密的,我们并不想让应用为了做一次等值查询就把整个数据集解密。这正是确定性加密派上用场的地方。

概率加密:安全,但搜不了

先看AES。AES是一种被广泛使用的对称加密算法,用一把密钥把明文变成密文,同一把密钥再把密文解回明文。在实际系统里,AES会搭配不同的加密模式和构造,随机性、初始化向量或随机数的处理方式,会影响一个关键性质:同一段明文反复加密,得到的是相同还是不同的密文。

概率加密在加密过程中引入随机性。同一段明文、同一把密钥,每次加密出来的密文可以都不一样。这种随机性是刻意的,它能防止有人通过观察密文,轻易判断出两条密文代表同一个底层值。

它的优势很明确:能强力抵御等值模式分析,让重复的明文值在加密后看起来各不相同,适合那些不需要直接比较密文值的场景。

但随机性也带来了麻烦。假设要找出所有社保号等于某个值的记录,同一个社保号被加密多次后,密文各不相同。一句简单的等值查询就没法可靠工作了。

这就是数据平台要面对的一个权衡:随机性带来了更强的模式泄露防护,却让基于等值的搜索变得更难。当分析需要在这类敏感字段上做精确匹配时,就得换一种思路。

确定性加密:能搜,但有代价

确定性加密的设计目标是:同一段明文,在同一把密钥和加密上下文下,产生相同的密文。这个性质让等值匹配成为可能。

应用可以为搜索值生成同样的密文,再拿它去和存储的密文做比较。查询逻辑大致是这样:

  • 对搜索值做确定性加密
  • 用加密后的结果去匹配存储的密文
  • 命中即返回对应记录

但可搜索性是有代价的。设想一份密文数据集,攻击者可能并不知道某个密文对应的是哪个社保号,但他们能看出来:同一个明文出现了三次。

换句话说,确定性加密在提供搜索能力的同时,也把明文的重复模式暴露了出来。

可搜索加密的取舍

把敏感数据加密,同时保留受控的等值搜索能力,本质上是在安全和可用之间做选择。概率加密保护更强,但等值查询难以可靠执行;确定性加密让精确匹配成为可能,却会泄露重复模式。

理解这些加密概念——概率加密与确定性加密、加密数据上的等值搜索、基础密钥与派生密钥、密钥分离、本地与远程密码学操作、令牌化——是设计数据管道时绕不开的一步。至于具体怎么选,取决于业务对搜索能力的需求,和对模式泄露风险的容忍度。