[algorithm][security] 模糊哈希(转)

modsecurity中用到:  http://ssdeep.sourceforge.net/

原文:http://www.xuebuyuan.com/1536438.html

最近看一篇paper,无意中看见了一种模糊哈希算法——fuzzy hash算法。于是立刻去翻阅相关资料,整理出如下文章

首先说说哈希算法。
     大家都知道函数实际上就是一种映射,本质是将一个集合通过对应法则f映射到另一个集合。 而哈希算法是一个特殊的函数,他具有的特点是,定义域是一个不确定的无限集合而值域是一个有限集合。简单来说,哈希算法就是将一个任意大的数据项(如计算机文件)映射为固定长度(比原数据短的多)的二进制位串,也就是哈希值。就目前而言,哈希算法依然能够确保它是原始数据的唯一标识,就像人的指纹可以唯一地标识一个人,因此哈希算法还具有精确匹配的特性。

常见的哈希算法包括:MD5、sha1、sha256、crc32等等。就不多说了

好了,对哈希算法有了基本概念,就来谈谈由此发展而来的fuzzy hash(模糊哈希)算法。

上文提及了哈希算法具有精确匹配的特性,具体来说就是,原文件哪怕仅仅只是一个字节的变化也会导致最后的哈希值发生明显的变化。这个特性使得哈希算法能够确定一个文件是否被修改过,然而这也带来了很大的局限性,那就是无法分辨内容稍有不同的同类文件。这对我们的反病毒过程来说是很不利的,因为一个样本的变种是数量最多的。

于是我们为了解决这个问题,发明了模糊哈希算法。该模糊哈希的算法与模糊逻辑搜索很像,它可以寻找相似但不完全相同的文档,即所谓的同源性文件。模糊哈希算法是基于哈希算法的,和哈希算法的不同点在于,哈希算法是将整个文件作为定义域来求算结果,而模糊哈希算法则是先对文件进行分块,计算每一块的哈希值,然后将得到的一系列哈希值利用比较函数于其他哈希值进行比较,来确定相似程度。
简而言之就是:分块——》对每个分块分别计算哈希——》结果比较

分析一下这样的算法有什么优势:比如我把一个文件的某一小部分进行了修改,如果是传统哈希由于是对整个文件进行计算,因此这一点改变就导致了结果的不同。而模糊哈希由于先对文件进行了分块,因此仅仅对某一部分进行修改只会导致某一或某几个分块的哈希值发生变化,而其他分块的哈希值并不变化,通过对比就可以很容易发现相似性。

目前模糊哈希算法,有开源研究项目

ssdeep:http://ssdeep.sourceforge.net/

原版研究在这里,Identifying almost identical ?les using context triggered piecewise hashing

然后我们来看看金山的微特征,通过对国家专利局的检索,我们发现了金山的微特征提取专利,

摘要如下:本发明涉及计算机杀毒软件领域,尤其涉及一种对病毒文件自动提取特征的方法和装置。对病毒文件自动提取特征的方法,在病毒文件中选取N个适合提取病毒特征的固定位置,每个固定位置分配一个位置ID号,以其中M个固定位置的位置ID号和这M个固定位置所对应的特征值作为病毒特征;所述特征值是指以某个所述固定位置为起点,取长度为L的一段二进制数据来计算的HASH值;其中N≥2,M≥2且M≤N,L>0。本发明方法和装置所提取的病毒特征大大提高了文件扫描的速度;而且可以用一个病毒特征匹配大量的相似或者相同的病毒文件。

从摘要就能总结出金山微特征具有如下特点:首先它是基于hash值的,并且是取固定长度的文件块来计算哈希值,且对一个文件提取了多个分块。
简而言之就是:确定分块位置并记录——》分块——》对每个分块计算哈希值——》结果比较

和模糊哈希的理论基础以及整个流程如出一辙,我不说你懂得!

时间: 2024-12-30 13:12:59

[algorithm][security] 模糊哈希(转)的相关文章

转:MD5(Message-Digest Algorithm 一种哈希算法)

什么是MD5算法 MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash value),用于确保信息传输完整一致. 实质上,MD5 只是一种哈希算法 哈希算法,即 hash,又叫散列算法,是一类把任意数据转换为定长(或限制长度)数据的算法统称.例如我叫张三,你叫李四,那么「人 -> 人名」的算法就叫属于一种哈希算法.哈希算法通常用于制作数字指纹,数字指纹的意思就是「你看到这个东

[Algorithm] 使用SimHash进行海量文本去重

转载:http://toutiao.com/news/6253252096791937537/?iid=3521431589 在之前的两篇博文分别介绍了常用的hash方法([Data Structure & Algorithm] Hash那点事儿)以及局部敏感hash算法([Algorithm] 局部敏感哈希算法(Locality Sensitive Hashing)),本文介绍的SimHash是一种局部敏感hash,它也是Google公司进行海量网页去重使用的主要算法. 1. SimHash与

数据加密与解密

加密是以某种特殊的算法改变原有的信息数据使得未授权的用户即使获得了已加密的信息但因不知解密的方法仍然无法了解信息的内容.在互联网上对数据的加密主要是保证三个方面内容数据的保密性.完整性以及对方的身份验证. 安全实现的目标: 机密性:confidentiality,保证信息不泄露 完整性:integrity,保证信息不被篡改 可用性:availability,保证信息内在价值 威胁机密性的攻击行为: 窃听 嗅探 扫描 通信量分析 威胁完整性的攻击行为 更改 伪装 重放 否认 威胁可用性的攻击行为:

Linux之加密和解密技术

加密和解密技术 本章内容: 安全机制 对称加密 不对称加密 散列算法 PKI和CA 相关知识: 1)传输层协议: TCP(面向连接),UDP(面向无连接),SCTP(流控协议) 2)port(端口):传输层协议都会提供端口, 端口(port)是标记进程的地址,进程向内核注册才能使用某端口(独占) 任何一个进程占领某个端口之后,其他进程进不能使用了: 3)同一主机上的进程间通信: IPC,message qoeue(消息队列),shm(共享内存),semerphor 4)不同主机间的进程通信: 通

Linux之加密解密基础技术

下文主要介绍了什么是加密解密:为何要用到加密解密技术:加密解密技术能够为我们带来什么样的好处:常见的几种加密解密技术介绍以及Linux中的openssl. 一.什么是加密,解密 加密技术是一种常用的安全保密手段,利用各种技术手段把重要的数据进行加密传送:再用对应的技术手段进行解封,该过程的逆过程就称为解密.这里用一个不太恰当的例子说一下:也就好比你去办一张银行卡,需要你设置一个密码,就可以理解成在为这张银行卡做一个加密的操作:用银行卡到提款机取钱需要你输入密码,这就是一个解密的操作. 二.为什么

数据的加密和解密初识

数据的加密和解密 加密是让数据从明文变成密文,传输过程中是密文,传送过去之后对方接收到的也是密文. 可以理解为密文就是乱码,看不出内在的任何意义,通常也都是逐位对应的. 在接收方接收到密文之后只有把它还原为原来的样子才可以理解对方说的具体是什么,此过程就叫做解密. 1.不同主机之间的进程间通信:Socket-pair,套接字对 套接字Socket的三种类型: 流套接字(Socket_Stream):基于TCP协议通信的套接字 数据报套接字(Socket_Dgram):基于UDP协议通信的套接字

MPLS VPN与IPSec VPN对比分析

转:http://www.xzbu.com/8/view-7456625.htm 1 引言 互联网的快速发展大大促进了信息资源的交流,与此同时,人们对频繁出现的安全保密问题也愈加关注.通过传统的方式构建企业内部或企 业之间的安全通信环境,必须通过自建通信干道或租用电缆和光缆,利用ISDN(Integrated Services Digital Network,综合业务数字网)或DDN(Digital Data Network,数字数据网)等技术构建企业专用网,若想在安全性和可靠性上得到保障,获得

加密解密过程

1,首先来说说有关加密解密有关的信息 信息安全标准NIST(National Institute of Standards and Technology)美国国家标准与技术研究院 openssl有CIA C:保密性: 数据保密性 隐私性 A:完整性: 数据完整性 系统完整性 I:可用性 真实性:一个实体是真实的,可被验证的. 可追溯性:一旦被攻击,能够追溯攻击源在哪 2,OSI规定的X.800 1)安全攻击: 被动攻击:窃听 主动攻击:1,伪装 2,重播 3,消息修改 4,拒绝攻击等 2)安全服

网络安全简介

在一个面向公共网络的项目中,安全无疑是项目面临的巨大挑战之一.在公网上,蛋疼份子与无聊人士无时无刻嗅探着我们的服务器,有些人是想要展示自己的能力,而还有着一部分不法分子,想要监听拦截我们的敏感信息,进入我们的主机进行各种各样的破坏与偷窃.这些人一旦得手,轻则降低系统的稳定性,重则使企业的敏感数据丢失,毁掉企业的信誉.所以,向用户提供可靠与稳定的服务,防止重要数据的丢失与盗取,是我们在构建一个面向公共网络的WEB系统中一定要做到的. 要想构建一个安全的网络环境,首先我们必须了解安全威胁来自哪里.以