公众号/
编译/凯霞
当程序员需要为较大的文件或数据块创建较短的代理时,他们通常会使用于哈希函数(hash functions)。当程序员在分析一个数据块并产生一个短数字,它可以作为更大的字节集合的替代或速记,有时在索引中,有时在更复杂的计算中。
感知哈希函数(Perceptual hash functions)被调整为对相似的图像或声音产生相同的结果。其目标是通过关注驱动人类视觉和听觉的特征类型(颜色和频率)来模仿人类的感知。
许多流行的非感知哈希函数对最小的变化非常敏感。简单地翻转一位,例如通过将像素中的蓝色量从 200 个单位更改为 199 个单位,可能会更改哈希函数中的一半位。感知哈希函数旨在返回人类可能感觉相似的图像或声音的答案。也就是说,媒体(media)的微小变化不会影响输出。
哈希函数通过数据库和其他数据存储简化了搜索和索引。哈希表是一种以快速响应而闻名的流行数据结构,它依靠良好的哈希函数作为索引来快速定位较大的数据块。例如,面部识别算法使用感知哈希函数来组织图像中人物的照片。这些算法使用面部特征(如眼睛、鼻子和嘴巴)之间的相对距离来构建一个可以组织图像集合的短数字向量。
将名称映射到 0 到 15 之间的整数的哈希函数。(来源:Baidu)
一些算法依赖哈希函数来标记更改。这些方法通常称为「校验和」,最初是一种查找误传数据的快速方法。发送方和接收方都可能将数据中的所有字节加在一起,然后比较答案。如果双方都同意,算法可能会假设没有犯错——这一假设并不能得到保证。如果传输中的错误以某种方式发生——比如将三个字节加到一个字节,同时从另一个字节中减去三个——错误就会抵消,校验和算法将无法捕捉到这个错误。
当两个不同的数据块产生相同的哈希值时,所有哈希函数都容易受到「碰撞」的影响。由于可能的数据块的数量远远大于潜在答案的数量,因此这种情况在生成较短答案的哈希函数中更常见。
某些函数,例如美国政府的标准安全哈希算法 (SHA256),被设计成几乎不可能让任何人发现「碰撞」。它们的设计原则与强加密程序相同,以防止逆向工程。许多密码算法依赖于安全哈希函数,如 SHA256 作为构建块,有些人将它们通俗地称为密码学的「胶带」。
感知哈希函数无法抵抗。它们的设计使相似的数据产生相似的哈希值,这使得搜索「碰撞」变得容易。这使它们容易受到欺骗和误导。给定一个文件,构建外观完全不同但产生相同感知哈希值的第二个文件相对容易。
感知哈希函数如何工作?
感知哈希函数仍然是一个活跃的研究领域,并没有明确的甚至主导的标准。这些函数倾向于将声音或图像文件分成相对较大的块,然后将相似的形状或声音转换为相同的值。这些块中值的粗略模式和分布可以被认为是非常低分辨率的版本,通常是相同或非常相似的图像或声音。
例如,声音的基本功能可以将文件分成一秒钟的部分,然后分析每个部分中频率的存在与否。如果有低频声音,例如介于 100 Hz 和 300 Hz 之间,则该功能可能会为该部分指定 1。它也可以测试其他流行频率,例如人声的常见范围。一些识别流行音乐的自动功能,可以通过像这样简单的功能来完成,因为它们会感知低音节奏和有人唱歌的时刻。
块的大小和测试的频率可以根据应用进行调整。用于识别鸟鸣的哈希函数可能由更高的频率触发。较短的块提供了更高的精度——如果目标只是对相似的声音进行分组,那么这可能不是我们想要的。
图像函数在颜色和块上使用类似的技术。出于这个原因,许多感知功能通常会匹配形状。一个人的双臂放在身边,双腿分开的照片可能与埃菲尔铁塔的照片相符,因为两者具有相同的形状。
比较图像的几种常见选项是 ahash、dhash 和 phash。在将图像分成 64 个块的 8×8 网格后,ahash 计算每个块的平均颜色。phash 函数作为开源提供。
phash 函数开源地址:http://www.phash.org/
它们能做什么?
感知哈希可以支持多种应用程序:
侵犯版权 —— 相似的哈希值可以检测和匹配图像、声音或视频,即使它们已经被裁剪或缩小。
视频标记 —— 面部感知哈希可以帮助索引视频,以识别特定人何时出现。
拼写错误 —— 文本感知哈希函数可以根据发音对单词进行分类,从而可以捕捉和纠正拼错的单词。
安全性 —— 感知哈希可以在视频或静态图像中找到并识别人或动物,跟踪其运动。
合规性 —— 一些算法可以检测人们的穿着,这对建筑工地和医院很有用。例如,一种算法可以标记那些可能没有佩戴法律规定的个人防护设备的人。
传统玩家如何使用它们?
一些数据库——比如 MySQL、Oracle 和 Microsoft——使用 Soundex 算法来允许对听起来相似的单词进行「模糊搜索」,即使它们的拼写不同。该算法的答案由一个字母后跟几个数字组成。例如,「SURE」和「SHORE」产生相同的结果:「S600」。
一些云公司还提供可以轻松与其数据库集成的面部识别算法。例如,微软的 Azure 就提供了一款名为 Face 的工具,可以在一组图像中找到相似的面孔并将其归类。该公司的 API 将查找并返回人脸的属性——比如头发颜色或任何面部毛发的存在。它还将尝试构建对人的年龄和基本情绪(愤怒、蔑视、幸福等)的估计。
Amazon Rekognition 可以检测图像中的人脸,以及文本等其他有用属性。它适用于静止图像和视频,适用于许多任务,例如查找特定演员的所有场景。Rekognition 还维护着一个名人数据库,并将在你的图像中识别他们。
Google 的 Cloud Vision API 可检测图像的许多部分并对其进行分类,例如文本或地标。该工具不提供直接的面部识别,但 API 将查找和测量元素的位置,例如眼睛之间的中点和眉毛的边界。名人识别目前是受限制的测试版产品。
新贵如何应用它们?
苹果公司最近宣布将使用称为 NeuralHash 的感知哈希函数来搜索客户的 iPhone,以查找潜在的非法儿童性虐待图像。感知哈希算法的结果将与其他调查中发现的已知图像的值进行比较。该过程将是自动的,但任何匹配都可能引发调查。
苹果 CSAM。(来源:www.apple.com)
许多公司——比如 Clearview.ai 或 Facebook——正在创建充满扫描图像感知哈希的数据库。通常,他们不会将这些数据库提供给其他开发人员。
该主题是一个有待积极探索的领域。一些开源版本包括 pHash、Blockhash 和 OpenCV。
有什么感知哈希函数做不到的吗?
虽然感知哈希函数通常非常准确,但它们往往会产生错误的匹配。苹果用于解锁 iPhone 的面部识别软件有时会混淆父母和孩子,允许孩子解锁父母的手机。
一般而言,哈希函数将通常较大或复杂的数据集缩减为较短数字的能力也是这种弱点的根源。「碰撞」是不可能避免的,因为潜在答案的数量往往少得多,而输入的数量却多得多。虽然一些加密安全的哈希函数可能很难找到这些「碰撞」,但它们仍然存在。
同样,感知哈希函数的优势也是一大弱点。如果该函数在近似人类感知方面做得很好,那么人类也更容易发现甚至产生「碰撞」。有许多攻击可以利用这一点。例如,早期有实验项目提供了帮助查找甚至创建「碰撞」的软件。
参考内容:https://venturebeat.com/2021/08/24/what-is-a-perceptual-hash-function/