文章关键词:电子数据取证、哈希算法
一、前言
在电子数据取证领域,哈希、哈希值几乎人人都知道,可知道是一回事,怎么充分利用就是另外一回事了。
本文可以分为两个部分:哈希的理论基础、哈希的花式用法。当然,后面那个部分才是重点,但理论基础不能少,虽然我知道你们都知道,但还是简单地解释一下哈希。
二、哈希的理论基础
什么是「哈希」、「哈希值」?
哈希定义:
英文为「Hash」,也翻译作“散列”,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法(哈希算法),变换成固定长度的输出,该输出就是哈希值。
Wendy版暴力解释:
1.「哈希」是一种算法;
2.这种算法会把「任意内容」变成一串长度固定的字符;
3.那串字符就是「哈希值」;
一句话的MD5哈希值
继续对哈希性质的解释:
4.「哈希算法」是一类算法,都有“解释2”的特性;
5.MD5、SHA-1等都是「哈希算法」,只不过算法不同,「哈希值」的固定长度也不同;
6.“解释2”中的「任意内容」可以是任何电子数据,如一串数字、一句话、一个图片、文档、音频、压缩文件……
7.任何文件的「哈希值」都是唯一的,输入的「任意内容」哪怕有一丝丝修改,都会导致输出的「哈希值」有很大的不同。
多种不同的哈希算法对比
什么是哈希库?
这个很好理解,就是已知的「哈希值」的集合。
建立哈希库,顾名思义就是把计算出来的一些文件的哈希值保存到一起,不就是哈希库吗?
形象来说,如果你把哈希库打开一看,会发现里面全是长度一样的字符串,而每一个字符串都将指向一个文件。
But!并非见到一个哈希值就往里头拉,哈希库的建立也是有分类的,如:图片的哈希库、密码的哈希库,等等。
NSRL哈希库非常有名,美国国家标准研究所出的库,包含2000年之后至今的各种软件、操作系统等相关文件的MD5和SHA1值
三、哈希的花式用法
你以为的哈希用途是校验镜像文件
镜像是为了保证源文件不被破坏,在电子数据取证中,分析镜像和分析源文件是一样的。但如何证明你拷贝的镜像文件与源文件是一模一样的呢?
创建镜像计算哈希值
这就是哈希的作用了,我们都知道。正是由于每个文件的哈希值唯一,所以只要哈希值相同,就能证明镜像文件没有被修改过,与源文件一致,因此我们每次创建镜像文件都得计算哈希值。
校验哈希值
我学到的高阶用法
首先,再次强调一遍,一个文件只有一个哈希值,一般不同的文件不会出现相同哈希值。记住并利用这一点,我们就能在电子数据取证中省力不少。
1.重复的文件,只看一份!
分析一个盘,经常会遇到这样的情况——文件名不同,但内容可能一样。
要是一个个地打开看很头疼,不看又怕错过了重要信息
都是12KB,要不要一个个点开看?
这时候,利用哈希值就能过滤掉内容相同的文件。
找到并过滤重复的文件
名字不一样?没关系!只要内容一样,哈希值就一样,我只看一份就好~
当当!重复的文件变成浅色隐藏了
方法总结:计算所选范围内文件的哈希值,隐藏哈希值重复的文件。
2.判断与案件无关的系统文件
分析嫌疑人的硬盘,我们重点关注的是他的操作痕迹,但电脑里总是有很多系统自动生成的文件,如果能把这些文件过滤掉,只看嫌疑人产生的文件,岂不事半功倍?
各种类型系统的文件哈希库
一般来说,同型号的电脑或程序产生的这类文件是相同的,如果把这些文件的哈希值集合到一起建立一个“系统文件哈希库”,那么用这个库去过滤,剩下的就是用户个性化差异的文件了。
方法总结:建立系统相同文件的哈希库,用这个哈希库过滤。
3.查看有哪些硬盘被感染
还有一种情况,就是在查找恶意程序感染了哪些硬盘或分区时,也能用哈希值迅速找出来。
各类程序的文件哈希库
恶意的程序文件也有哈希值,只要先计算出来,再和其他分区或硬盘所有文件的哈希值进行比对,只要在相应分区找到相同哈希值文件,即可证明该分区或硬盘含有恶意代码文件,说明已经被感染。
方法总结:计算恶意代码文件的哈希值,在所有盘里跑一遍对比哈希值。
4.彩虹表——密码字典库
哈希是个不可逆的算法,因此很多时候会用来保存密码口令,这样他人即便能拿到保存的哈希值,也无法猜到原始密码是什么。
但,偏偏有人还是有办法找到原始密码——用「彩虹表」。
彩虹表是一个用于加密散列函数逆运算的预先计算好的表,为破解密码的哈希值(或称散列值、哈希密文)而准备,说白了彩虹表就是一个为了破解密码的哈希库。
举个例子,我把6位数的纯数字密码全部列举出来,然后计算每一个对应的哈希值,这样建成了一个库。
如果你的密码哈希值已知,虽然不能通过算法可逆出来,我可以输入到库里去查找,比对成功就知道你的原始密码是多少了!
当然,彩虹表也分很多种,一串哈希值输入到不同的表中,对应结果不同,毕竟算法不一样嘛。
从哈希的学习中,我明白了一个道理:“知道”与“运用”之间,隔着鸿沟,需要综合思考能力去跨越它。任何东西的用途都很多,不在于告诉你怎么用,而在于从根本上理解其特性,再联系实际去寻找运用的途径。