苹果宣布即将推出 CSAM 检测系统时,遭到了 4000 多个组织及个人的公开反对,他们质疑苹果会破坏用户隐私和端到端加密机制。一位 Reddit 用户发现 CSAM 算法竟已被悄悄地隐藏在 iOS 14.3 里。算法公开几小时后,一位英特尔实验室的研究员就发现了其存在的缺陷:哈希冲突。

 

苹果宣布计划推出 CSAM 检测技术,该功能本该在今年 9-10 月份上线,将利用一种名为 NeuralHash 的加密算法,不会直接查看用户相册。

本以为这个神秘的 NeuralHash 会在苹果力排众议真正推出 CSAM 检测系统时才能感受到,不曾想却被 Reddit 网友发现 CSAM 检测技术的算法 NeuralHash 已经混进了现在的系统里。这位网友并在 GitHub 上分享了他用 Python 重建的整个 NeuralHash 算法,甚至在 macOS 和 Linux 上都可以尝试体验。

%title插图%num

这还没完,在  NeuralHash 算法被公开的几个小时后,一件令苹果更为头疼的事发生了:一位英特尔实验室的研究人员 Cory Cornelius 发现 NeuralHash 存在“哈希冲突”的问题。

%title插图%num

网友发现隐藏在 iOS 14.3 的秘密

8月18日,据 Asuhariet Ygvar 在 Reddit 上的说法,NeuralHash 算法早就存在于 iOS 14.3,只不过藏在了模糊的类名之下因此难以发现。

在对隐藏的 API 进行挖掘时,Asuhariet Ygvar 发现了 NeuralHash,随后通过逆向工程将其模型(在 iOS 14.3 中名为 MobileNetV3)导出到 ONNX,并用 Python 进行重新构建,甚至可以在Linux上测试NeuralHash。(注:ONNX 是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。)

经 Asuhariet Ygvar 研究,总体来说 NeuralHash 就是一种基于神经网络的图像感知哈希,具体步骤如下:

%title插图%num

代码:https://github.com/AsuharietYgvar/AppleNeuralHash2ONNX。

AsuharietYgvar则列举了这就是苹果所采用的算法的证据。

  • 首先,模型文件的前缀“NeuralHashv3b-”与苹果文档中所提到的术语相同。
  • 其次,苹果文档中 Technology Overview -> NeuralHash 章节所描述的算法细节与 Asuhariet Ygvar 提取的模型完全一致。

例如,文档中提到:“其次,描述符通过哈希方案将 N 个浮点数转换为 M 位。这里,M 比表示 N 个浮点数所需的位数要小得多。”

这点可从以下 Asuhariet Ygvar 在 GitHub 上分享的代码得出:N=128,M=96。

%title插图%num

此外,Asuhariet Ygvar 在 iOS 14.3 中发现的 NeuralHash 也能完美实现苹果文档中所描述的“无论调整图像大小或压缩图像,哈希值几乎不会改变”。

虽然不同设备生成的哈希值会有几位的差异,是由于神经网络基于浮点计算,精度在很大程度上取决于硬件。对于NeuralHash这种有200多层的网络来说,会导致大量的累积误差。

%title插图%num

哈希算法存在 Bug

公开代码后的短短几小时内,英特尔实验室的研究人员Cory Cornelius就发现了两张毫无关联的照片竟然有一样的哈希值!

Cory Cornelius 在 Asuhariet Ygvar 的 GitHub 下评论:你能验证下面这两张图存在哈希冲突吗?

%title插图%num

%title插图%num

Cory Cornelius 补充道,他根据  Asuhariet Ygvar 给出的 NeuralHash 用法进行操作,结果发现这两张迥然不同的图像的哈希值居然一模一样!

  1. $ python3 nnhash.py NeuralHash / model.onnx neuralhash_128x96_seed1.dat beagle360.png
  2. 59a34eabe31910abfb06f308
  3. $ python3 nnhash.py NeuralHash / model.onnx neuralhash_128x96_seed1.dat collision.png
  4. 59a34eabe31910abfb06f308

Asuhariet Ygvar 随后也证实了这个问题:“是的!我可以确认这两个图像在我的 iPhone 上生成了完全相同的哈希值,与你生成的一样。”

这种情况的出现,显然推翻了苹果在介绍 CSAM 检测系统文件所提到的描述“名为 NeuralHash 的哈希技术会分析图像并将其转换为特定于该图像的唯一编号”。有开发者向 Cory Cornelius 提问能否因此制造哈希冲突,Cory Cornelius 给予了肯定回答:“我相信可以根据一些所需的哈希值,生成对应的灰度图像。”

通常来说,哈希算法具有以下特点

相同的输入一定得到相同的输出;

不同的输入大概率得到不同的输出。

但是由于通过哈希函数产生的哈希值是有限的,当输入数据量达到一定的程度时,就会导致不同的数据在经过哈希函数处理之后产生相同的值。

这也就产生了哈希冲突。

如果有人利用被 NCMEC 标注的图片的哈希值改变其他图片,那么任何存储这些图片的人都将拥有这些图片。

%title插图%num

苹果:这只是一个早期版本罢了

有媒体向苹果询问了这个问题,苹果的回应却是:“用户在 GitHub 上分析的那个版本只是一个早期通用版本,并非是用于对 iCloud 照片进行 CSAM 检测的*终版本。”

此外,苹果还解释称,他们不仅依靠 CSAM 检测系统,还有“人工审查”这个「双保险」。

当用户上传 iCloud 照片时,苹果系统会进行扫描确定是否有与CSAM 照片匹配的哈希值,如果匹配的次数超过 30,系统将其进行标记,并交由苹果团队人工审核

但苹果始终没有正面回应 NeuralHash 算法可制造“哈希冲突”的疑问。