V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
minsheng
V2EX  ›  Apple

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

  •  4
     
  •   minsheng · 2021-08-10 18:34:30 +08:00 · 11322 次点击
    这是一个创建于 961 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    • 不匹配的用户图片,Apple 的系统完全无法接触;
    • 匹配的用户图片,只有等匹配数达到一定阈值,Apple 才可以接触;
    • 用户无法访问 CSAM 图片数据库(要不然就不用自己找了);
    • 用户无法了解自己的哪张图片被标记为潜在的儿童色情照片。

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

    • 一套 Apple 称之为 NeuralHash 的系统,用来回答两张图片是否匹配;
    • 本地的图片 voucher 生成系统;
    • iCloud 服务器上的 voucher 处理系统。

    本地的 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 无法被解开,用户信息也不会被泄漏。

    这里的点主要在于:

    • 用户图片的 NeuralHash 不能发给 Apple,不然 Apple 可以解开任何照片;
    • CSAM 数据库里的原始图片的 NeuralHash 不能发到用户设备上,不然用户设备就可以提前得知图片匹配结果,而 Apple 的设计原则明确不希望这一点。

    Apple 的实现思路是这样的:

    • 对 NeuralHash 本身进行传统 hash,相当于每个 NeuralHash 赋予一个 ID 。这个 hash 函数本身,iCloud 和用户设备都知道,因此用户可以在本地执行相同的 hash 。
    • 对 CSAM 数据库里的 NeuralHash 进行加密( blinding )。将 ID 以及 blinding 过的 NeuralHash 作为数据库发到用户设备上。
    • 上传图片的时候,会先计算该图片的 NeuralHash 、NeuralHash 的 ID (通过 hash )、图片的 payload,然后按照用户数据库里的 blinded NeuralHash 和图片的 NeuralHash,计算一个加密密钥,加密 payload,并将 ID 和 payload 上传给 iCloud 。
    • 注意,该图片的 ID 匹配用户数据库里的条目有两种情况,正确匹配和 hash 碰撞。

    在 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) = a + b + s
    • P(2) = 4a + 2b + s
    • P(3) = 9a + 3b + s
    • P(4) = 16a + 3b + s

    当我们只知道一个或者两个人的数字的时候,是无法解密的,但比如说我们知道 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 就无法准确判断一个用户究竟有多少图片已经匹配,最大程度保护用户隐私。不过这一段的具体思路我没有特别看懂。

    欢迎大家讨论。

    124 条回复    2021-08-22 15:03:02 +08:00
    1  2  
    yousabuk
        101
    yousabuk  
       2021-08-11 18:35:19 +08:00 via iPhone
    苹果这么搞,持怀疑态度,不愿意苹果这么搞,有点担心会不以后手伸太长越界,和现在的承诺背离呢?

    国内百度,腾讯,阿里,360 等公司这么搞,不用怀疑,我会终止使用他的服务,手会伸过界,和承诺不承诺无关。

    主要基于:
    司法惩处力度,用户容忍程度,当前企业底线界限。

    如果司法不严或惩处太轻,用户不在意,企业底线本就很低,那每一个在这样环境的企业都会伸过界。
    QNLvw5fLfr7c
        102
    QNLvw5fLfr7c  
       2021-08-11 19:40:03 +08:00 via iPhone
    @Cielsky #92 取消充电头的代价当然是要用户承担了啦,怎么可能让我 Apple 花钱
    xgfan
        103
    xgfan  
       2021-08-11 19:42:14 +08:00 via iPhone   ❤️ 1
    居然在大是大非前面谈技术。🐶
    acupnocup
        104
    acupnocup  
       2021-08-12 01:10:39 +08:00
    今天能扫描 CP,明天就可以扫描其他类型的数据。我倒是宁可苹果完全停止扫描,主要 Gv 申请就帮助解密,把凯撒的归于凯撒,罗马的归于罗马。
    RiverYKB
        105
    RiverYKB  
       2021-08-12 02:18:10 +08:00 via iPhone
    @ruixue “不针对个别用户”,而不是“不区分用户群体”……
    james504
        106
    james504  
       2021-08-12 08:45:46 +08:00
    这么理性分析的不多鼓励一下。不过于我来说我不想任何人当我的查水表的因为我不需要,而且这个标准说白了不是你说黑就黑说白就白他完全可以自己定义,所以就。
    torment5524
        107
    torment5524  
       2021-08-12 09:04:57 +08:00
    技术上没啥好说的,无非还是放模型里跑。
    用户手机本地上扫描我觉得不可接受。
    说是扫儿童色情,但是对用户来说完全是个黑盒,谁知道模型里到底是什么,算法做的怎么样都没有意义。
    这就像监控一样,你可以装在大街上楼道上,对着我的门我也能忍,但你不经过我同意就要装在我的客厅、卧室,即便打着为了保护我的名义,我也不能接受。
    现在苹果谷歌这些公司在侵犯用户隐私方面越来越过分了
    Tragfwcat
        108
    Tragfwcat  
       2021-08-12 09:06:31 +08:00 via Android
    苹果整这一出,我真心认为那些喜欢拍照的,在网上随意下载图片的那些人,应该部署一个家用私有云服务器,应该叫 nas 服务器?好像是吧。
    苹果这么瞎折腾,真是自废武功,退一万步来讲,AI 识别真的能百分百识别儿童色情照片吗?万一把私人照片给错误识别上传,那泄露隐私又算谁的?瞎折腾
    goodniuniu
        109
    goodniuniu  
       2021-08-12 09:28:19 +08:00
    不错的技术讨论。个人理解,苹果这样的做法应该属于百度盘清理的高阶方式,区别在于样本为官方提供范围、苹果过程提高基于自动匹配技术筛选+人工核定环节、最终苹果直接提交给执法机构。这也许是苹果能想到最好的技术方案,但对于用户则是免不了引起对个人私隐的担忧。
    Rrrrrr
        110
    Rrrrrr  
       2021-08-12 09:43:32 +08:00
    @xiang1xiang 国内的你觉得不会私下扫吗
    Kagari
        111
    Kagari  
       2021-08-12 10:31:52 +08:00   ❤️ 1
    上传图像的指纹可以分析出全球苹果用户的关系网了吧,后面上传同一个图像随机分布的一部分然后在服务器上拼成一起是个小问题啦
    比如说,微信群里发了张新屏幕截图(新图新指纹),然后苹果根据指纹和时间一算,这群人有一腿
    然后我拍了张照片走微信发给好友,苹果又一算,这两人有一腿
    也就是说这个关系网比微信关系网要浅,但不需要微信,能覆盖全球苹果用户
    minsheng
        112
    minsheng  
    OP
       2021-08-12 15:10:27 +08:00 via iPhone
    @Kagari wow 👏 确实是个安全隐患
    Zien
        113
    Zien  
       2021-08-12 22:38:52 +08:00
    好处确实显而易见,儿童色情的危害现在越来越猖獗了(审美白幼瘦下,这种状态会加剧恶化),但坏处可能遗祸无穷(不过也阻止不了,就算没有儿童色情的威胁,迟早也会上马这些东西)。
    tomari
        114
    tomari  
       2021-08-12 23:12:15 +08:00
    pixiv 上那么多儿童色情不管,管到用户的手机里来了,要是误删了什么东西 apple 有责任赔偿吧
    ufjfeng
        115
    ufjfeng  
       2021-08-13 08:18:06 +08:00 via iPhone
    @mikeven 我只是解答你的疑惑,关于自己手机上的照片是不是自己的问题。至于你新回复的内容就和我的回答就没关系了。同时,国内外都有机构会要求员工用 iPhone 的话不能开 iCloud 甚至直接不用 iPhone,因为开了就说明你已经同意所有条款了
    xiang1xiang
        116
    xiang1xiang  
       2021-08-13 08:43:22 +08:00
    @Rrrrrr 咋的?国外的月亮圆些还是屁香些?
    Rrrrrr
        117
    Rrrrrr  
       2021-08-13 09:44:30 +08:00
    @xiang1xiang 你就是个 sd 。我只是就事论事,开口就 zzzq 来打压别人的观点。而且国内厂商保存隐私,我可是有见识过,并不是乱说。
    aero99
        118
    aero99  
       2021-08-13 11:27:26 +08:00
    我觉的大家的主要分歧还是 iCloud 到底算私有云还是公有云,如果是公有云提供给别人下载和传播检查无可厚非
    但是如果是私有云只是个人使用,那么随便扫描你的相册,这和随意进到你家里翻东西有罪推断有什么区别?
    AlexB
        119
    AlexB  
       2021-08-14 19:21:24 +08:00
    这项技术初衷无疑是好的,但是并不妨碍可以把这个东西用在歪门邪道上,我个人有一个阴谋论角度的推断,各位大佬来判断下技术上能否实现。
    首先,这个功能允许在某国上线,但是条件是,csam 的图片数据库由 zf 提供
    然后,zf 可以在数据库中添加任意图片
    然后,通过扫描结果来判断一个人的政治倾向
    最后,借此来更隐蔽的进行言论监控和风险预估。
    这在理论上可以实现吗?
    S179276SP
        120
    S179276SP  
       2021-08-15 01:02:21 +08:00
    @aero99 iCloud 的 TOS 都写了禁止储存淫秽色情内容了或者违反当地法律的内容,固然不是私有云,很早之前 苹果就承认扫描 iCloud 照片了
    hahastudio
        121
    hahastudio  
       2021-08-18 18:20:24 +08:00
    www.reddit.com/r/MachineLearning/comments/p6hsoh/p_appleneuralhash2onnx_reverseengineered_apple/
    来吧,讨论一下碰撞?
    以及,这东西已经在 iOS/macOS 里了
    persistz
        122
    persistz  
       2021-08-21 15:23:26 +08:00
    这句话我没有理解啊:若只是 hash 碰撞,解密会失败,匹配失败,用户的 payload 隐私得到了保护。

    从算法的描述来看,hash 碰撞的时候解密是可以正常进行的。
    minsheng
        123
    minsheng  
    OP
       2021-08-22 14:56:47 +08:00 via iPhone
    @persistz 根据 Apple 的描述,它们是对 NeuralHash 做了进一步的 hash (传统 CS 意义),而加密密钥是通过 NeuralHash 推出来的,所以如果我有 NeuralHash A 的图片,你有 B 的图片,我们都分到了数据库 hash 123,那么我拿 A 衍生的密钥加密,打上标记 123,你找你服务器上的 123 对应的密钥,是根据 NeuralHash B 算出来的,无法解密
    minsheng
        124
    minsheng  
    OP
       2021-08-22 15:03:02 +08:00 via iPhone
    @persistz PSI 和 NeuralHash 其实是解耦的。PSI 解决的问题大抵是:
    我有一个 KV list,你有一堆 key,你想知道我的数据里你的 key 的对应的 value,并满足:
    - 我不需要上传完整的数据交给你处理
    - 只有你有 key 的部分我才能需要交给你
    - 但我又不能有遗漏,你有 key 的我都必须交
    Apple 的思路是弄个程序跑在你的本地,把结果提交上去匹配,公开程序的算法以及证明。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3045 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:37 · PVG 22:37 · LAX 07:37 · JFK 10:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.