苹果刚刚宣布他们将使用“感知哈希”来检测 iPhone 上的非法照片。我有一些关于这项技术的经验可以分享。在我的公司,我们使用“感知哈希”来查找图像的副本,其中每个副本都略有改动。这是在股票摄影的背景下,每个股票代理商(例如 Getty Images、Adobe Stock、Shutterstock)添加自己的水印、图像文件 ID,或者锐化图像或稍微改变颜色,例如通过添加对比度。对于我们的客户,即上传照片到这些机构并通过他们的平台出售的摄影师,我们需要在这些机构上找到他们所有照片的副本。我们使用感知哈希来找到它们。大多数公开记录的感知哈希算法的工作原理是将图像数据减少为位向量(“哈希”),然后将其与哈希数据库进行比较,通常通过应用距离度量,即在许多情况下所谓的汉明距离,两个散列不同的位数。图像数据缩减通常包括调整图像大小、丢弃其颜色信息、在频域中进行过滤(通常使用 DCT 或小波),在某些情况下(据说是专有的 PhotoDNA 算法)计算这些值的直方图,在 Apple 的情况下使用卷积神经网络将图像信息减少为浮点向量,然后将该向量量化为最终的哈希位。对于我们的产品,我已经评估了平均哈希、pHash、dHash 以及快速多分辨率图像查询论文中描述的算法,该论文也用于 imgSeek 软件。我们目前必须匹配大约 1 亿张照片,发现后者效果最好,即它导致最少的误报和最少的漏报。 (我在这里发布了一个 Golang 实现。)这些算法都不是防水的。让我给你举一个误报的例子。我们试图找到下图的副本: 这些算法有时会失败并不奇怪。但在 1 亿张照片的背景下,它们确实经常失败。而且它们不会以可接受的方式失败:很容易看出这两个图像的总体构图是相似的(米色背景,右上方中间带有深色口音)。但它们的内容完全不同。与其他散列算法遇到的冲突看起来不同,通常以意想不到的方式出现,但所有这些算法都存在冲突。当我们处理感知散列时,任何距离度量都没有固定的阈值,这将清楚地将误报与漏报分开。在上面的示例中,我们可以应用更严格的阈值,但这会导致许多照片的实际副本无法检测到。简单的修改,例如水印或轻微的颜色校正,会导致算法得出“这两张图像不一样”的结论。
特别是当使用汉明距离来比较哈希时,没有太多空间来微调阈值。让我们假设我们正在处理 256 位散列:两个图像相同的汉明距离可能只有几位,即汉明距离,比如 16,已经表明了很多差异。在数百万张图片的背景下,将汉明距离阈值上下移动 1 将对生成的误报或漏报的数量产生巨大影响。即使汉明距离阈值为 0,也就是说,当两个哈希值相同时,鉴于每年拍摄的大量照片(2021 年为 1.4 万亿,现在将其分解),我看不出 Apple 如何避免大量碰撞按 iPhone 市场份额和国家/地区来看,美国 iPhone 用户的数量仍然非常大)。根据 Apple 的说法,少量的阳性结果(错误与否)不会触发帐户被标记。但同样,在这些数字上,我相信您仍然会遇到太多情况,其中一个帐户有多张照片被触发为误报。 (Apple 表示概率为“万亿分之一”,但尚不清楚他们是如何得出这样的估计的。)这些案例将被人工审查。也就是说,根据 Apple 的说法,Apple 员工会查看您的(标记的)照片。苹果是否有足够的人力来解决他们算法的缺点?我们只能希望如此。感知哈希是混乱的。图像数据减少到少量位的简单事实会导致冲突,从而导致误报。当此类算法用于检测犯罪活动时,尤其是在 Apple 规模上,许多无辜的人可能会面临严重的问题。我公司的客户对感知散列的失败感到有些不便(我们有一个 UI 可以让他们进行手动更正)。但是当谈到 CSAM 检测及其故障潜力时,那就是完全不同的球赛了。不用说,我很担心这个。