使用 GAN 对感知图像哈希进行黑盒攻击(2018 年)

2021-08-07 13:21:16

tldr:这篇文章展示了 GAN 能够以两种关键方式破坏图像哈希算法:(1)反向攻击:从哈希合成原始图像(2)中毒攻击:合成任意自然图像分布的哈希冲突。感知图像哈希 (PIH) 是基于图像外观的短十六进制字符串(例如 '00081c3c3c181818' )。感知图像散列,尽管是散列,但不是加密安全的散列。这是设计使然,因为 PIH 旨在对图像中的微小变化(旋转、裁剪、伽马校正、噪声添加、添加边框)平滑地保持不变。这与专为非平滑性而设计的加密散列函数形成对比,并且在任何单个位更改时完全更改。下图的感知hash只是因为文字修改而略有变化,但它们的md5 hash却完全不同。我不会深入研究这些算法如何工作的细节:有关更多信息,请参见(此处)。尽管在密码学上不是很可靠,但 PIH 仍然用于广泛的隐私敏感应用程序中。因为感知图像散列具有将输入与输出相关联的平滑属性,我们可以对该过程及其逆过程与神经网络进行建模。 GAN 非常适合这种生成任务,特别是因为单个图像哈希中有许多潜在的图像。 GAN 允许我们学习图像流形,并使模型能够探索这些不同但有效的图像分布输出。我训练 Pix2Pix 网络(paper,github)来转换使用标准 python 哈希库 imagehash (github) 中的 a_hash 函数计算的感知图像哈希。对于这个演示,我在 celebA 人脸数据集上进行训练,尽管黑盒攻击是通用的,并且适用于其他数据集、图像分布和哈希函数。我将 a_hash 产生的图像哈希排列成一个二维数组,作为 pix2pix 模型的输入图像。

以下是此哈希反向攻击的一些结果。在许多情况下,攻击能够生成与原始图像相似的面孔,即使在失败的情况下,也经常代表原始图像的正确性别、发型和种族。注意:由于模型未完全收敛,因此面部纹理并不完美。这是使用 Google 的 Colab 工具在有限的计算资源上训练的。许多应用程序假设这些散列是隐私保护的,但上面的这些结果表明它们可以被逆转。任何通过存储敏感图像散列来声称安全的服务都会误导其用户,并有遭受此类攻击的潜在风险。一个允许用户将照片提交到图像数据库以禁止的系统。人工审查图像以确保它是值得禁止的图像(并且该图像是说,而不是可口可乐徽标)。如果获得批准,此哈希值将添加到数据库中,并在上传新图像时进行检查。如果这个新图像的哈希值与禁止的哈希值冲突,该图像将被阻止上传。如果恶意用户以某种方式欺骗人类评论者接受可口可乐徽标作为禁止图像,则数据库可能会因包含应该共享的图像散列而“中毒”。实际上,我们只需要人工审核者接受与可口可乐徽标发生哈希冲突的图像即可!这个愚弄人类的任务可以通过我们学习的生成模型来完成。在所描述的模型中,我们可以将散列反转为原始图像的近似值。然而,这些生成的图像并不总是准确地散列回原始散列。为了成功应用这种攻击,我们必须稍微修改 pix2pix 目标以确保操作正确可逆并将原始图像散列回真正的原始散列。我在标准 pix2pix 损失中添加了一个额外的哈希周期损失项。这将计算生成图像上的散列,并计算真实散列和生成图像的散列之间的逐像素交叉熵损失。在有限的实验中,这个额外的损失项使生成的哈希冲突率从 ~30% 到 ~80%。上图说明了我们的网络生成一张与可口可乐徽标发生哈希冲突的人脸图像。它们共享相同的哈希值,并允许用户毒化哈希数据库并阻止公司徽标上传到平台。这里有一些更多的公司标志,生成的面孔是哈希冲突。

不要在隐私或内容敏感的应用程序中使用感知图像散列!或者至少不要在没有一些额外的安全措施的情况下存储它们。一种更安全的方案是为图像生成许多潜在的散列(应用图像转换来创建新的散列),将这些散列通过可证明的安全散列函数(如 md5)并将这些散列的散列存储在您的数据库中以在匹配时进行检查未来的图像。一个潜在的解决方案是不透露正在使用哪个哈希函数。但这是默默无闻的安全。它不会阻止有权访问数据库或代码库的人反转存储的散列或通过详细攻击毒化散列池。感谢 Duncan Wilson、Ishaan Gulrajani、Karthik Narasimhan、Harini Suresh 和 Eduardo DeLeon 对这项工作的反馈和建议。感谢 Christopher Hesse 提供了很棒的 pix2pix 存储库,感谢 Jens Segers 提供了 imagehash python 库。如果你喜欢这篇文章,请用*鼓掌*或分享告诉我。