神秘的 NeuralHash 算法,打开一看是 MobileNet V3。
苹果要在新操作系统里内置机器学习扫描程序,了。
本月初,当这个消息爆出之后,整个科技圈都大为震动。虽然苹果一再表示扫描照片的算法仅在本地运行,该算法也仅会在部分国家上线,但人们对于科技大厂忽视隐私安全的担忧仍然成为了主流。
对于开发者们来说,机器学习算法是不是真的侵犯隐私,还是要看代码是怎么写的。近日,有程序员就把苹果的 neuralMatch 算法给逆向工程了。
一切都真相大白,甚至还有预料之外的发现。
该破解者在 GitHub 上建立了名为 AsuharietYgvar 的账号,并公开了代码。首先,他发现这个扫描色情信息的算法早在 iOS 14.3 上就已经存在,其隐藏在混淆的类名下。不过苹果在随后发给 Motherboard 的一份声明中表示,在 iOS 14.3 中发现的 NeuralHash 版本并不是与 iOS 15 一起发布的最终版本。
在对隐藏的 API 进行了一些挖掘和逆向工程之后,程序员设法将其模型(即 MobileNetV3)导出到 ONNX,并在 Python 中重建了整个 NeuralHash 算法。大家现在可以直接在 Linux 上尝试了。
GitHub 链接:
出于显而易见的原因,这里没有训练好的模型文件。但是按照作者的操作指南,想要导出一个非常容易,你也不需要使用任何苹果设备。
经过作者的简单测试,苹果的图像识别算法可以容忍图像大小调整和压缩,但如果有人裁剪或旋转了图片,那么 AI 就无法识别了。当然你也可以使用黑客松上破解人脸识别的方法,通过加入扰动欺骗算法将两张完全不同的图片识别为同一张。
现在我们可以更加全面地了解 NeuralHash 算法,并在所有 iOS 设备上启用该算法前了解它的潜在问题了。
根据苹果的官方说法,其正在与儿童安全专家合作,在三个领域引入儿童安全功能。首先,新工具将使父母能够在孩子进行使用 Messages 接收到敏感信息时获得警告。
接下来,iOS 和 iPadOS 将使用新的加密应用程序限制 CSAM(儿童色情内容)的传播。CSAM 检测将帮助苹果向执法部门提供有关 iCloud 照片中 CSAM 集合的信息。
最后,Siri 和搜索的更新将为父母和儿童提供更多信息,并在他们遇到不安全情况时提供帮助。当用户尝试搜索 CSAM 相关主题时,Siri 和搜索也会进行干预。
苹果表示在检测敏感信息的同时,自己无法获知信息本身的内容。这些功能将于今年晚些时候在 iOS 15、iPadOS 15、watchOS 8 和 macOS Monterey 的更新中推出。
在检测到敏感信息时,iMessage 会弹出提示。
具体怎么实现的?
苹果的 NeuralHash 是一种基于神经网络的图像感知哈希算法,它可以实现图像缩放和压缩。哈希算法的步骤是这样的:
在这个项目中,作者将苹果的 NeuralHash 模型转换为了 ONNX 格式,还提供了测试模型的演示脚本。
系统要求
作者表示,macOS 和 Linux 系统都可以运行。
在安装 LZFSE 解码器时,对于 macOS 系统,运行 brew install lzfse 即可安装;对于 Linux 系统,从 lzfse 资源中创建和安装。
此外,作者选用的 Python 版本是 3.6 及以上,需要安装以下依赖:
pip install onnx coremltools
转换指南
步骤 1:准备 NeuralHash 模型
你需要最近的 macOS 或 iOS 构建中的 4 个文件,分别如下:
具体地,你可以通过以下两种方式获取以上文件。
第一种选择是从 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 .
步骤 2:解码模型结构和形状
一般编译的 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 检测技术总结》文档地址:
疑问 2:repo 中生成的哈希为什么略有不同?(相差几个 bits)
这是因为神经网络基于浮点运算,准确率高度依赖于硬件。对于较小的网络,影响不大。但是,NeuralHash 拥有 200 多个层,这导致了显著的累积误差。在实践中,苹果很可能在实现哈希比较时允许几个 bits 的误差。
疑问 3:如何发现隐藏的 API 函数?
隐藏的 API 之前已被其他人发现了,因此我不打算过多地讨论逆向工程的过程。我所做的主要是使用 Xcode 调试器 + Hopper 反汇编器 + LLDB 命令,来理解该 API 函数如何以汇编代码在底层工作。有一些部分我没有理解,但通过猜测,我成功地从脚本中得到与从 API 函数中得到的相同的哈希结果。
发现隐藏 API 的另一个项目地址:
在 NeuralHash 代码被上传到 GitHub 之后,很快就引起了人们的注意。苹果立即做出回应:用户在 GitHub 上分析的那个版本是一个通用版本,而不是用于 iCloud 照片 CSAM 检测的最终版本。苹果表示,它还公开了该算法。
「NeuralHash 算法…… 是操作系统代码的一部分,(并且)安全研究人员可以验证它的行为是否符合描述,」苹果在一份文档中写道。苹果还表示,在用户存储的文件超过 30 个匹配阈值后,运行在苹果服务器上的第二个非公开算法将被激活检查结果。
文档中写道:「选择这个独立的哈希是为了避免由于非 CSAM 图像被对抗性攻击干扰导致误报的可能性。」
参考内容:
哈工大车万翔教授带你学习NLP新范式:基于预训练的方法
8月19日19:00-20:30,车万翔老师带来直播分享,主题为自然语言处理新范式:基于预训练的方法。本次分享介绍预训练模型的演化过程、预训练模型的最新研究进展和自然语言处理领域今后的发展趋势。
直播赠书:在本次直播过程中,我们将从所有在直播间评论区提问的小伙伴中随机抽出10位送出车万翔老师等所著的《自然语言处理:基于预训练模型的方法》。
限时特惠:本站每日持续更新5-20节内部创业项目课程,一年会员
只需199元,全站资源免费下载点击查看详情
站长微信:
jjs406