关于 Apple 扫描儿童色情照片的技术讨论

2021-08-10 18:34:30 +08:00
 minsheng

这两天看了无数人讨论 Apple 的 CSAM,感觉大家说的话都互相冲突,也没有人讨论 Apple 所谓的本地扫描的具体实现,有点难受。于是我自己相对认真的读了一下 Apple 发布的技术总结。这里简单分享一下我的理解,欢迎做纯技术讨论。

首先,Apple 非常明确,它做的是图片匹配,不是图片识别。图片的来源是第三方 NGO 机构,但它们仅提供图片,不存在提供神经网络模型的地方。Apple 希望自己的系统实现以下几点:

我个人把系统理解成三个部分:

本地的 voucher 生成系统确保了用户既无法访问 CSAM 图片数据库,也不知道自己的哪张图片被标记了。后者则从数学上确保了 Apple 无法访问不匹配的用户图片。更重要的是,即使误伤了,也需要误伤足够多的次数,Apple 才可以解开匹配的图片。这里分别用了「 private set intersection 」和「 threshold secret sharing 」这两项技术。

NeuralHash

NeuralHash 是 neural + hash 两个部分组成。Apple 训练了一个 CNN 网络,输入图像,输出一个图像的向量表示。这个 CNN 的目的是,让相近的图片映射到相近的表示上去。紧接着,Apple 使用称之为 hyperplane locality-sensitive hashing (LSH) 的技术对生成的向量表示进行处理。

我完全没听过 LSH 这个概念,根据维基百科的描述,LSH 把近似的输入放到同一个 bucket 里面;与软件开发日常接触的 hash 相比,普通的 hash 尽可能避免碰撞,而 LSH 从某种意义上最大化了碰撞。感觉这是一种对数据集做聚类的办法。

Apple 用 NeuralHash 想解决的一个问题是优化空间。把几十万张色情图片存到每个人的手机里显然是不可能的;即使通过 CNN 提取特征向量,结果也很大,但是得到的特征向量再进一步 hash,Apple 实现了可以给每一部设备上放下完整的 CSAM 数据集。

Apple 还简单描述了一下 CNN 的训练,是一个很简单的无监督学习,即给网络一对图片,输出两张图片的差。一方面,Apple 会从一张图片生成一个篡改过但视觉相等的图片,让网络输出的差尽可能小;另一方面,将两张不同的图片放在一起,让网络输出的差尽可能大。后者很有必要,不然网络可能会给任何一对图片都输出零,这样就没有意义了。

Hyperplane LSH 跟图片没啥关系,它的任务就是对图片的特征向量做压缩,并满足让相近的两个向量输出的结果相同

Private Set Intersection

但其实 NeuralHash 只是解决了图片匹配的问题。真正体系 Apple 这套系统对隐私的保护的是 Private Set Intersection (PSI) 和 Threshold Secret Share 。没有人关心,但非常有趣,所以我就简单说一下。

首先,Apple 需要对每张图片生成一定的额外信息( payload ),这些信息的具体设计会在后面提及,而它们的目的,则是在发现某个用户匹配足够多的图片的时候,帮助 Apple 读取相应的图片,人工审核。PSI 的设计是,当且仅当某张用户的图片 NeuralHash 等于 CSAM 数据库里的某张图片的 NeuralHash 时,对应的 payload 才会被解开。因此,这个问题也就变成了根据 NeuralHash,构造一个密钥,用来加密 payload 。如果这个密钥能成功解密 payload,那么这个 payload 所属的图片,必然匹配该 NeuralHash 对应的图片。若解密失败,则该 payload 的原始图片不是我们想要的图片,且因为 payload 无法被解开,用户信息也不会被泄漏。

这里的点主要在于:

Apple 的实现思路是这样的:

在 iCloud 服务器上,服务器可以重做这一步。首先,根据用户上传的 ID 和 payload,拿到图片的 NeuralHash 。然后,用 blinded NeuralHash 和该图片的 NeuralHash 计算密钥,并解密 payload 。如果用户的图片确实对应了 CSAM 数据库里的图片,那么 payload 可以正确解密;若只是 hash 碰撞,解密会失败,匹配失败,用户的 payload 隐私得到了保护。

Apple 并没有讨论如果用户的图片的 NeuralHash 的 ID 不匹配数据库里的任意条目的情况。这种情况说明该图片肯定不在 CSAM 中,但是这会提前暴露用户匹配结果。我估计 Apple 的做法是通过调整 hash,是 ID 空间变小,并对不存在的条目,生成假的 blinded NeuralHash,一并发给用户。在服务器上只需要检测 ID,如果来自假的条目,则直接匹配失败,且用户设备不知道这一点。

Threshold Secret Sharing

这个系统的具体算法 Apple 一笔带过。我问了了解相关领域的同学,发现其实是一个非常基本的技术。其解决的问题 Apple 也大概描述了一下:

举个例子,比如说你有一个一元二次多项式 P(x) = ax^2 + bx + s,s 就是你要保守的秘密,有四个人,你可以告诉每个人 P(1)、P(2)、P(3)、P(4) 分别是多少。每个人都可以化简自己的等式:

当我们只知道一个或者两个人的数字的时候,是无法解密的,但比如说我们知道 P(1)、P(2)、P(3) 均是 0 的时候,就很容易解出 s = 0 。

简单来说,Apple 做了一个双重加密系统。首先,Apple 给每个账号生成一个密钥,只存在用户设备里。然后,Apple 用这个密钥加密每张图片的 payload,并且将加密的结果和这个密钥的一部分( secret share ),一起用 NeuralHash 导出的密钥进行加密。

首先,如果一张图片压根没有匹配 CSAM 数据集,那么 Apple 将无法获得用户密钥的任何 share 。只有等匹配了之后,Apple 才能拿到一个 share 。当拿到的 share 数目超过一个阈值之后,Apple 才能用这些信息构建出用户密钥,解密图片的 payload 。即使在这个时候,也只有匹配的图片的 payload 可以被解开,因为其它图片的数据被 NeuralHash 衍生的密钥保护着。

Apple 还提到用户设备会随机生成假的 voucher 。这些 voucher 在 iCloud 中会通过第一层匹配,但是其 payload 并不会包含任何有意义的信息,无法解开第二层的密钥。通过调参,这些生成的 voucher 的数目会和匹配的图片的数目处于同一数量级,这样,在解开第二层密钥之前,Apple 就无法准确判断一个用户究竟有多少图片已经匹配,最大程度保护用户隐私。不过这一段的具体思路我没有特别看懂。

欢迎大家讨论。

12077 次点击
所在节点    Apple
124 条回复
oIMOo
2021-08-10 20:11:31 +08:00
我比较好奇:虽然 hash value 极小,但是千千万万个 hash value 就不可忽视了啊。那对手机储存的影响如何解决?
minsheng
2021-08-10 20:20:29 +08:00
@oIMOo 如果能做到几十字节那几十万张图的话应该不到 100M ? CNN 特征向量假设 512 字节,压缩个十倍也许还是可以做到的。

我之前看有人分析 iOS 系统大小,里面关于神经网络的越来越大了,还好存储空间长得也快。

我比较好奇的有两点,一个是如何动态的增加这个图库。现有的照片是不是还要再扫描一遍?二就是对 NeuralHash 的 hash 要如何设计,才能保证图片之间没有碰撞且尽可能稠密分布?或许 CSAM 本身可以分成几十份,但这样的话匹配的加密操作就要跑几十次了……
jjxtrotter
2021-08-10 20:36:16 +08:00
@kop1989 苹果的这个功能从技术上讲很牛 B,但是担心的源头并不是没有,一是验证模型由苹果设定,二是所匹配的来自第三方 NGO 的图片。个人觉得让人产生隐私忧虑的主要在于第二点,也就是第三方图片来源也可能是身份证、自拍照等非儿童色情图片,从而引发隐私问题。至于第一点苹果的计算匹配模型,个人觉得苹果没有必要也没有可能会冒着巨大的风险在这方面做手脚,更有可能的是算法或者模型的漏洞被人利用所引发的风险,但个人认为这种担忧程度要远小于第二点
minsheng
2021-08-10 20:47:34 +08:00
@jjxtrotter 根据 Apple 的描述,第三方直接给的图片,所以 Apple 应该是可以手工审查的,而且即使有漏网之鱼,人工审查匹配的用户的时候也是可以查出来的。但如果给图片是全自动加入系统、人工审查也是直接外包,那就难说了。但我觉得这两者若是能同时成立,那问题就海了去了,比如骗外包的团队拿到 Apple ID 权限?这种情况下,CSAM 反而不足为虑。
oIMOo
2021-08-10 21:02:23 +08:00
@minsheng 你说的确实也是个问题,两边都是动态的。不知道除了遍历(或者真的增量遍历),还有没有什么其他的方法。
kop1989
2021-08-10 21:24:13 +08:00
@tmado 因为这并不是一个可以轻易讨论技术的话题。1 、你我楼主均不是 icloud 的核心员工。
2 、此功能的源码并不开源。
3 、这个功能的业务逻辑有非常明显的薄弱环节。且薄弱环节并不出现在技术中。(至少宣传上是这样)

这就像是苹果跟你说他为你造了一个能防沙皇核弹的保险柜,但苹果有保险柜的开启决定权。

在这种情况下,保险柜的用料,防护等级,其实都没有什么可讨论的动机了,因为苹果又是裁判员,又是运动员。更何况这个用料与防护等级还是苹果自己吹的,你无法进行任何佐证。

真正值得去讨论的技术话题,是如何保证这项技术真正的落实在儿童色情上,但苹果最终没有给出任何答案。
swulling
2021-08-10 21:35:56 +08:00
希望这个技术尽早用在云上贵州扫描违法图片
salor
2021-08-10 21:47:25 +08:00
![IMG_4044.PNG]( https://i.loli.net/2021/08/10/PMDourgf7CmI1Ux.png)

就像滚导在自杀小队 2 里边夹带私货一样,for kids ?
tmado
2021-08-10 21:48:17 +08:00
@kop1989

我重新组织一下你可能应该怎么回复这个主题贴


楼主,你发这个帖子的其实是没有意义的,我们并不需要讨论这个业务实现的具体技术。

“因为这并不是一个可以轻易讨论技术的话题。1 、你我均不是 icloud 的核心员工。
2 、此功能的源码并不开源。
3 、这个功能的业务逻辑有非常明显的薄弱环节。且薄弱环节并不出现在技术中。(至少宣传上是这样)”

楼主你说的这些其实不是重要的,因为

“这就像是苹果跟你说他为你造了一个能防沙皇核弹的保险柜,但苹果有保险柜的开启决定权。

在这种情况下,保险柜的用料,防护等级,其实都没有什么可讨论的动机了,因为苹果又是裁判员,又是运动员。更何况这个用料与防护等级还是苹果自己吹的,你无法进行任何佐证。

真正值得去讨论的技术话题,是如何保证这项技术真正的落实在儿童色情上,但苹果最终没有给出任何答案。”


而关于以上这一点楼主在 15 楼的想法是
“这种思路就很迷。当然人可以选择不听,代码是苹果写的,苹果编译的,苹果发布的。理论上说苹果想推什么代码都行”


单就我的认知来看,你似乎并不想要讨论楼主主题帖所希望讨论的内容,而是执拗地希望表达自己的情绪。那何不去其他的主题帖讨论或者自己开一个主题帖呢?


抱歉我的回帖依然也是在进一步污染这个热衷于顾左右而言他的环境,不再继续回帖了。
swulling
2021-08-10 21:50:56 +08:00
有没有懂技术的,一起合伙做 toG 项目,扫描暴恐图片。
icyalala
2021-08-10 22:07:49 +08:00
技术讨论当然也包括安全问题,苹果从技术上可以保证安全性和隐私,但是整个链条最初的数据源是 CSAM 。
苹果使用了什么技术手段,能确保 CSAM 数据确实只是儿童色情,是否需要人为干预,这点没有看到苹果提到。这是最让人担心的地方。

比如这些照片提供的 NGO 或者这其中某个环节有内鬼,或者有不小心混入的正常图片,后面会发生什么,苹果是否有技术层面的防护?如果这里做不好,那隐私保护就是无稽之谈了。
miku831
2021-08-10 22:08:51 +08:00
@salor 这剧情…黑镜素材?
lovestudykid
2021-08-10 22:20:54 +08:00
用了神经网络,很难保证到底是匹配还是识别
jim9606
2021-08-10 22:30:43 +08:00
我倒是不担心苹果在这套扫描系统上运用密码技术进行保护的完备性。要是不完备,Apple 也不会那么详细地把运作机制抖出来了。看这方面的分析还挺长见识的。

我就是担心这个 NGO 提供的数据库,这玩意既不在 Apple 掌控下又不能通过公共途径进行监督和审查。简而言之,为啥我要把判断的准绳交给一个 NGO 而不是行政机关呢。

还有个问题是 NeuralHash 的 false positive 该怎么控制,这个我也没谱。
Xs0ul
2021-08-10 23:25:34 +08:00
虽然说是图片匹配,但这里 CNN 起的作用看起来像 feature extracter 或者 embedding 。放在一般的机器学习论文里,提取出来的结果应该就是当成一般的 feature map 。苹果硬是存成了二进制然后给了个 hash 的名字,还是很难说服别人这是匹配而不是识别。

而且既然这个模型是无监督学习的,我理解是数据集没有特意去区别儿童色情和成年人的色情图片。那这样训练出来的网络,很难说可以区分儿童色情和成年人的裸照。

还没看原文,只看了楼主的介绍。有理解错的欢迎大佬们指出。
dingwen07
2021-08-10 23:34:51 +08:00
问题就是,Apple 可以直接访问 iCloud 图片库中的所有内容,所以这个只有一个解释:苹果不希望消耗自己的服务端算力
minsheng
2021-08-10 23:38:10 +08:00
@Xs0ul

它之所以说是 hash,是因为它通过 locality-sensitive hashing,把提取出来的特征向量做了进一步处理。LSH 的性质就是,如果输入的值近似,那么输出的值相同。LSH 的数学我没接触过,完全不懂的,抽空我想去学习一下,但是维基百科上的 LSH 条目就是这么介绍的。

因此,Apple 训练这个网络的 objective 其实很简单:

- 近似的图片,输出的向量近似,minimize loss ; Apple 通过生成扰动的图像来做了 data augmentation 。
- 不同的图片,输出的向量尽可能不同,maximize loss 。

其实这个网络本身没什么「技术」含量,很标准的思路。

@lovestudykid

此处确实就只是用来匹配,神经网络是用来消除对图片的篡改的。
minsheng
2021-08-10 23:45:46 +08:00
@jim9606

根据 Apple 的架构,CSMA 的数据要不然以图像的形式去给 Apple,要不然需要对方按照 Apple 的算法,不修改任何参数,生成 NeuralHash 。但这样的话,如果 Apple 更新了 NeuralHash 的计算方法,对方还是需要重算一次,比较麻烦。因此我觉得大概率 Apple 会直接要求图片,在此基础上应该还是会人工审查一遍图片的。特别是,你这个担忧也是一个非常主流且有意义的担忧,所以我觉得 Apple 大概率会更加小心。

当然,如果我们从心里就不信 Apple,那就像我说的一样,没啥好说的了。

关于 false positive,我觉得这里非常巧妙的一点就是 Apple 用了 threshold secret sharing 来控制概率。如果 threshold 设置的相对比较高,那么只要 NeuralHash 这个组件没有出大 bug,那么当某个账户被 flag 的时候,非常大概率这个账户确实是有问题的。误伤一次也就算了,误伤十次……

这里还有一个问题就是 false positive 的定义。可能 Apple 认为就算系统 flag 了,只要人工审查拦住了,没有直接把用户的 iCloud 封掉,就没什么问题。但是对于 Apple 这种公司,只要有人工介入,确实算是有点失败,换我做用户我心里也不舒服。
minsheng
2021-08-10 23:49:04 +08:00
@dingwen07

这里应该是涉及到系统架构。

如果要上线一套在线的扫描系统,就引入了一个 single point of failure 。如果这套系统被黑客攻陷了,它可以任意访问全部用户的照片。可如果 iCloud 照片和密钥完全分开处理,需要手工输入指令才能解锁用户的信息,系统的安全性,对意外情况的防御,就能有效提高,同时也可以满足各地法律的需求。
andywwj
2021-08-10 23:53:45 +08:00
但抛开技术,首先要承认大众是盲目的,不可否认的是这件事的出现,挑战了绝大多数普通用户对苹果隐私政策的一种信任值。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/794903

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX