神秘的 NeuralHash 算法,打开一看是 MobileNet V3。
本月初,当这个消息爆出之后,整个科技圈都大为震动。虽然苹果一再表示扫描照片的算法仅在本地运行,该算法也仅会在部分国家上线,但人们对于科技大厂忽视隐私安全的担忧仍然成为了主流。对于开发者们来说,机器学习算法是不是真的侵犯隐私,还是要看代码是怎么写的。近日,有程序员就把苹果的 neuralMatch 算法给逆向工程了。![](https://image.jiqizhixin.com/uploads/editor/19ff3ea2-9f5d-444d-8158-6680e7025e65/640.png)
该破解者在 GitHub 上建立了名为 AsuharietYgvar 的账号,并公开了代码。首先,他发现这个扫描色情信息的算法早在 iOS 14.3 上就已经存在,其隐藏在混淆的类名下。不过苹果在随后发给 Motherboard 的一份声明中表示,在 iOS 14.3 中发现的 NeuralHash 版本并不是与 iOS 15 一起发布的最终版本。在对隐藏的 API 进行了一些挖掘和逆向工程之后,程序员设法将其模型(即 MobileNetV3)导出到 ONNX,并在 Python 中重建了整个 NeuralHash 算法。大家现在可以直接在 Linux 上尝试了。![](https://image.jiqizhixin.com/uploads/editor/1a8664fc-9e6d-4264-83c5-98378b0113d5/640.png)
GitHub 链接:https://github.com/AsuharietYgvar/AppleNeuralHash2ONNX出于显而易见的原因,这里没有训练好的模型文件。但是按照作者的操作指南,想要导出一个非常容易,你也不需要使用任何苹果设备。经过作者的简单测试,苹果的图像识别算法可以容忍图像大小调整和压缩,但如果有人裁剪或旋转了图片,那么 AI 就无法识别了。当然你也可以使用黑客松上破解人脸识别的方法,通过加入扰动欺骗算法将两张完全不同的图片识别为同一张。现在我们可以更加全面地了解 NeuralHash 算法,并在所有 iOS 设备上启用该算法前了解它的潜在问题了。根据苹果的官方说法,其正在与儿童安全专家合作,在三个领域引入儿童安全功能。首先,新工具将使父母能够在孩子进行使用 Messages 接收到敏感信息时获得警告。接下来,iOS 和 iPadOS 将使用新的加密应用程序限制 CSAM(儿童色情内容)的传播。CSAM 检测将帮助苹果向执法部门提供有关 iCloud 照片中 CSAM 集合的信息。最后,Siri 和搜索的更新将为父母和儿童提供更多信息,并在他们遇到不安全情况时提供帮助。当用户尝试搜索 CSAM 相关主题时,Siri 和搜索也会进行干预。苹果表示在检测敏感信息的同时,自己无法获知信息本身的内容。这些功能将于今年晚些时候在 iOS 15、iPadOS 15、watchOS 8 和 macOS Monterey 的更新中推出。![](https://image.jiqizhixin.com/uploads/editor/d2ace892-0643-4993-adbf-2390149b8a31/640.jpeg)
在检测到敏感信息时,iMessage 会弹出提示。苹果的 NeuralHash 是一种基于神经网络的图像感知哈希算法,它可以实现图像缩放和压缩。哈希算法的步骤是这样的:在这个项目中,作者将苹果的 NeuralHash 模型转换为了 ONNX 格式,还提供了测试模型的演示脚本。作者表示,macOS 和 Linux 系统都可以运行。在安装 LZFSE 解码器时,对于 macOS 系统,运行 brew install lzfse 即可安装;对于 Linux 系统,从 lzfse 资源中创建和安装。此外,作者选用的 Python 版本是 3.6 及以上,需要安装以下依赖:pip install onnx coremltools
你需要最近的 macOS 或 iOS 构建中的 4 个文件,分别如下:neuralhash_128x96_seed1.dat
NeuralHashv3b-current.espresso.net
NeuralHashv3b-current.espresso.shape
NeuralHashv3b-current.espresso.weights
第一种选择是从 macOS 或 jailbroken iOS 设备中获取。如果 macOS 是 11.4 及以上或者 jailbroken iOS 是 14.7 及以上,则只需要从 macOS 上的 / System/Library/Frameworks/Vision.framework/Resources / 或 iOS 上的 / System/Library/Frameworks/Vision.framework / 中抓取以上文件即可。第二种选择是从 iOS IPSW 中获取,并将它们放在同一个目录下mkdir NeuralHashcd NeuralHash
cp /System/Library/Frameworks/Vision.framework/Resources/NeuralHashv3b-current.espresso.* .
cp /System/Library/Frameworks/Vision.framework/Resources/neuralhash_128x96_seed1.dat .
一般编译的 Core ML 模型在 model.espresso.net 中存储结构,在 model.espresso.shape 中存储形状,并且都使用 JSON 格式。NeuralHash 模型同样如此,但是使用 LZFSE 进行了压缩。步骤 3:将 NeuralHash 模型转换为 ONNX 格式最终得到的模型是 NeuralHash/model.onnx。cd ..
git clone https://github.com/AsuharietYgvar/TNN.gitcd TNN
python3 tools/onnx2tnn/onnx-coreml/coreml2onnx.py ../NeuralHash
作者在 Reddit 上回答了网友的一些疑问(以下作者回复以第一人称表述)。疑问 1:如何知道提取的模型与用于 CSAM 检测的 NeuralHash 相同首先,模型文件中有前缀 NeuralHashv3b-,它与苹果《CSAM 检测技术总结》文档中使用的 term 相同。其次,在这篇文档中,苹果在 Technology Overview -> NeuralHash 章节描述了该算法的细节,这与我发现的完全相同。如下所示,浮点数 N=128,M=96。Second, the descriptor is passed through
a hashing scheme to convert the N floating-point numbers to M bits. Here, M is much smaller than the
number of bits needed to represent the N floating-point numbers.
此外,如果你改变图像大小或压缩图像,该脚本生成的哈希几乎不会改变,这再次与苹果文档中描述的一致。《CSAM 检测技术总结》文档地址:https://www.apple.com/child-safety/pdf/CSAM_Detection_Technical_Summary.pdf疑问 2:repo 中生成的哈希为什么略有不同?(相差几个 bits)这是因为神经网络基于浮点运算,准确率高度依赖于硬件。对于较小的网络,影响不大。但是,NeuralHash 拥有 200 多个层,这导致了显著的累积误差。在实践中,苹果很可能在实现哈希比较时允许几个 bits 的误差。隐藏的 API 之前已被其他人发现了,因此我不打算过多地讨论逆向工程的过程。我所做的主要是使用 Xcode 调试器 + Hopper 反汇编器 + LLDB 命令,来理解该 API 函数如何以汇编代码在底层工作。有一些部分我没有理解,但通过猜测,我成功地从脚本中得到与从 API 函数中得到的相同的哈希结果。发现隐藏 API 的另一个项目地址:https://github.com/KhaosT/nhcalc在 NeuralHash 代码被上传到 GitHub 之后,很快就引起了人们的注意。苹果立即做出回应:用户在 GitHub 上分析的那个版本是一个通用版本,而不是用于 iCloud 照片 CSAM 检测的最终版本。苹果表示,它还公开了该算法。「NeuralHash 算法…… 是操作系统代码的一部分,(并且)安全研究人员可以验证它的行为是否符合描述,」苹果在一份文档中写道。苹果还表示,在用户存储的文件超过 30 个匹配阈值后,运行在苹果服务器上的第二个非公开算法将被激活检查结果。文档中写道:「选择这个独立的哈希是为了避免由于非 CSAM 图像被对抗性攻击干扰导致误报的可能性。」https://www.apple.com/child-safety/https://www.vice.com/en/article/wx5yzq/apple-defends-its-anti-child-abuse-imagery-tech-after-claims-of-hash-collisionshttps://www.reddit.com/r/MachineLearning/comments/p6hsoh/p_appleneuralhash2onnx_reverseengineered_apple/