什么是模糊哈希?
是一种基于内容分割的分片哈希算法(context triggered piecewise hashing, CTPH),主要用于文件的相似性比较。
模糊哈希的主要原理:
使用一个弱哈希计算文件局部内容,在特定条件下对文件进行分片(利用弱哈希分析局部特点,确定分片大小)
然后使用一个强哈希对文件每片计算哈希值,取这些值的一部分并连接起来,与分片条件一起构成一个模糊哈希结果
使用一个字符串相似性对比算法判断两个模糊哈希值的相似度有多少,从而判断两个文件的相似程度。
对文件的部分变化(包括在多处修改、增加、删除部分内容),使用模糊哈希均能发现与源文件的相似关系,是目前判断相似性较好的一种方法。
模糊哈希的由来
在有意或无意的改动之后,如何去判断文件是否相似?
最直接的办法就是:对文件的每个字节逐一对比检查。
显然,采用“指纹”这样的数字特征会比较容易实现相似性对比。此时,密码学上的哈希函数正来担当文件的“指纹”。
但是,若是文件中只是变更了一个字节,那么简单的哈希函数得到的指纹对比结果便不尽人意。
后来,进一步出现了“分片哈希”,问题依旧没有得到解决。(固定间隔分片,分别计算哈希值)
直到模糊哈希出现。
其思想是:不再固定长度分片,而使用文件局部数据的特点来决定是否分片,使得局部的变化(包括修改、增加、删) 只影响局部的分片方法,而不会将影响扩散至其他分片点。
模糊哈希的组成
- 一个弱哈希算法:分析局部内容特点,得出分片条件,并进行分片
- 一个强哈希算法:计算出每个分片的模糊哈希值,并连接得到整个文件的模糊哈希值。
- 一个压缩映射算法:将每片的模糊哈希值映射为一个更短的值
- 一个比较算法:用于对两个模糊哈希值计算相似程度