anishathalye/neural-hash-collider

GitHub: anishathalye/neural-hash-collider

针对 Apple NeuralHash 感知哈希函数的对抗样本生成工具,利用梯度下降在视觉相似的图像上实现目标哈希碰撞。

Stars: 674 | Forks: 33

# NeuralHash Collider 为 Apple 的 [NeuralHash] 感知哈希函数寻找目标 [hash collisions]。 例如,从[这只 猫](https://github.com/anishathalye/neural-hash-collider/raw/assets/cat.jpg)的图片开始, 我们可以找到一张对抗性图像,它与[这篇 文章][hash collisions]中狗的 [picture](https://user-images.githubusercontent.com/1328/129860794-e7eb0132-d929-4c9d-b92e-4e4faba9e849.png)具有相同的哈希值: ``` python collide.py --image cat.jpg --target 59a34eabe31910abfb06f308 ``` ![NeuralHash 为 59a34eabe31910abfb06f308 的猫咪图像](https://static.pigsec.cn/wp-content/uploads/repos/cas/26/26983ce074193014b9792d121bf01b9fabe037b8b83d3ce2ced447d777314455.png) ![NeuralHash 为 59a34eabe31910abfb06f308 的狗狗图像](https://static.pigsec.cn/wp-content/uploads/repos/cas/27/2748212e3b7f0727840e01a96e0841e5ad9500e588fec809f0d8f71da9e563fd.png) 我们可以使用 [AsuharietYgvar/AppleNeuralHash2ONNX] 中的 `nnhash.py` 来确认哈希碰撞: ``` $ python nnhash.py dog.png 59a34eabe31910abfb06f308 $ python nnhash.py adv.png 59a34eabe31910abfb06f308 ``` ## 工作原理 NeuralHash 是一种使用神经网络的[感知哈希 函数](https://en.wikipedia.org/wiki/Perceptual_hashing)。图像被调整为 360x360,并通过神经网络生成 128 维的 特征向量。然后,使用 128x96 的“种子”矩阵将该向量投影到 R^96 空间。最后,为了生成 96 位的哈希值,会对这 96 维向量进行阈值处理:负项变为 `0` 位, 非负项变为 `1` 位。 除了阈值处理外,整个过程都是可导的,因此我们 可以使用梯度下降来寻找哈希碰撞。这是神经网络的一个 众所周知的特性,即它们容易受到[对抗 样本](https://arxiv.org/abs/1312.6199)的攻击。 我们可以定义一个损失函数来捕获图像与给定目标 哈希的接近程度:这个损失函数基本上就是如上所述的 NeuralHash 算法, 只不过将最后的“硬”阈值处理步骤调整为“软”处理(特别地, 使其可导)。具体的实现方式(激活 函数、参数等的选择)会影响收敛,因此可能需要一些 实验。选择好损失函数后,我们就可以使用标准的 方法来寻找神经网络的对抗样本:梯度下降。 ### 细节 目前的实现采用交替投影风格的攻击方式,以 寻找具有目标哈希值且与原始图像相似的 对抗样本。有关完整的细节,请参见 `collide.py`。该实现使用了 两种不同的损失函数:一个用于衡量与目标哈希的距离,另 一个用于衡量扰动质量(l2 范数 + 总变分)。 我们首先针对碰撞进行优化,仅关注匹配目标哈希。 一旦找到投影,我们就在最小化扰动和 确保哈希值不改变之间交替进行。该攻击有大量 参数;运行 `python collide.py --help` 或查看代码以获取完整的 列表。调整这些参数会对收敛时间 和输出质量产生重大影响。 该实现还支持 `--blur [sigma]` 标志,它会在搜索的 每一步对扰动进行模糊处理。这可能会减慢或破坏 收敛,但在某些样本中,它有助于获得看起来 更自然、更不像故障艺术的结果。 ## 示例 复现[这篇帖子](https://github.com/AsuharietYgvar/AppleNeuralHash2ONNX/issues/1#issuecomment-903094036)中的 [Lena](https://static.pigsec.cn/wp-content/uploads/repos/cas/c8/c8610c0ec6cb2499e911d44ff4b306f81ebf02da78002c2edb8fb5faa037b616.png)/[Barbara](https://static.pigsec.cn/wp-content/uploads/repos/cas/c3/c3c1dae68966ff55b6c26226110f9f62f8ac7b39746949dde4e176908d45bdae.png) 结果: 上面的第一张图像是原始的 Lena 图像。第二张是使用 `--target a426dae78cc63799d01adc32` 生成的,目的是与 Barbara 发生碰撞。第三张是使用了附加参数 `--blur 1.0` 生成的。第四张是原始的 Barbara 图像。检查它们的哈希值: ``` $ python nnhash.py lena.png 32dac883f7b91bbf45a48296 $ python nnhash.py lena-adv.png a426dae78cc63799d01adc32 $ python nnhash.py lena-adv-blur-1.0.png a426dae78cc63799d01adc32 $ python nnhash.py barbara.png a426dae78cc63799d01adc32 ``` 复现[这篇帖子](https://github.com/anishathalye/neural-hash-collider/issues/4)中的 [Picard](https://static.pigsec.cn/wp-content/uploads/repos/cas/57/5739057f57a7c13172e4a50867c849e4ec4e803db9114ace851d0c3b5a586336.png)/[Sidious](https://static.pigsec.cn/wp-content/uploads/repos/cas/da/dac1e4fe886f535b8143b676dc5ae9e1ad6f5312ac5c8bbeb282241f2bbbefd2.png) 结果: 上面的第一张图像是原始的 Picard 图像。第二张是使用 `--target e34b3da852103c3c0828fbd1 --tv-weight 3e-4` 生成的,目的是与 Sidious 发生碰撞。第三张是使用了附加参数 `--blur 0.5` 生成的。第四张是原始的 Sidious 图像。检查它们的哈希值: ``` $ python nnhash.py picard.png 73fae120ad3191075efd5580 $ python nnhash.py picard-adv.png e34b2da852103c3c0828fbd1 $ python nnhash.py picard-adv-blur-0.5.png e34b2da852103c3c0828fbd1 $ python nnhash.py sidious.png e34b2da852103c3c0828fbd1 ``` ## 前置条件 - 按照 [AsuharietYgvar/AppleNeuralHash2ONNX] 中的说明获取 Apple 的 NeuralHash 模型,并将所有 文件放在此目录中,或者提供 `--model` / `--seed` 参数 - 安装 Python 依赖项:`pip install -r requirements.txt` ## 用法 运行 `python collide.py --image [图像路径] --target [目标哈希值]` 以 生成哈希碰撞。运行 `python collide.py --help` 可查看所有 选项,包括一些你可以调整的参数,如学习率和 其他一些参数。 ## 局限性 本仓库中的代码仅用于演示,也许可以作为 其他探索的起点。调整实现(损失 函数的选择、参数的选择等)可能会产生比当前代码好得多的结果。 ## 引用 ``` @misc{athalye2021neuralhashcollider, author = {Anish Athalye}, title = {NeuralHash Collider}, year = {2021}, howpublished = {\url{https://github.com/anishathalye/neural-hash-collider}}, } ```
标签:Apex, CNCF毕业项目, 凭据扫描, 哈希碰撞, 对抗样本, 感知哈希, 机器学习, 逆向工具