文件完整性校验
造冰箱的大熊猫@cnblogs 2019/2/20
emmmm,在这里把文件完整性校验相关的信息汇总一下
1、什么是文件完整性校验
所谓文件完整性校验就是对文件“验明正身”。攻击者会将恶意代码添加到某个受大众欢迎的软件中,然后发布到网络上。当用户下载并使用这种被篡改过的软件时,计算机病毒或者木马程序就会悄然进入用户的计算机。检验文件的完整性,就是检查下载到的软件是否被篡改过。
2、基于散列函数的文件完整性校验
文件完整性校验的常用方法是使用基于“散列函数”的校验算法。软件开发者在发布软件(比如一个exe文件)前,使用某个校验算法计算出该exe文件的“特征值”,然后将这个特征值和exe文件一同发布到网络上。用户使用相同的校验算法计算下载到exe文件的特征值,并与软件开发者发布的特征值比较。如果两个特征值相同,则认为下载到的exe文件是正确的。如果两个特征值不同,则认为下载到exe文件是被篡改过的。
以Ubuntu操作系统为例,在Ubuntu的下载网页上,用户既能找到Ubuntu安装镜像的下载链接,也能够找到“MD5SUMS”、“SHA1SUMS”、“SHA256SUMS”字样的文件。这些文件就是使用MD5、SHA1、SHA256等校验算法获得的Ubuntu安装镜像特征值。
点击右键看大图
校验算法本质上是建立文件和特征值的映射关系,用长度较短的特征值表征长度较长的待校验文件。由于特征值和待校验文件长度不匹配,无法保证两者的映射关系是唯一的。比如,某个校验算法使用32bit整数作为特征值,同时我们有232+1个内容互不相同的文件,那么一定有两个文件的特征值是相同的。当两个文件的特征值相同时,我们只能认为“这两个文件内容相同的可能性非常高”。在散列函数的研究领域中,如果两个不同文件具有相同的特征值,则称这种情况为“发生碰撞”。显然,特征值的长度越短,发生碰撞的概率就越高。但无限增加特征值长度,又降低了校验的可用性。好的散列函数设计,就是要在特征值长度较短的前提下,尽可能地降低碰撞概率。散列函数属于数学/密码学的研究范畴,专业性很强,它的可靠性和安全性留给数学大牛们去思考,我们作为一般计算机用户,只需要掌握以下校验工具的使用方法。
2.1、方法1:在Windows下使用7-Zip工具
如果Windows计算机上安装了7-Zip,则
1)右键点击待校验的文件(或文件夹)。
2)在弹出的菜单中选择“CRC SHA”。
3)在子菜单中可以看到“CRC-32”、“CRC-64”、“SHA-1”、“SHA-256”和“*”五个不同选项。其中,前4项分别对应采用32位循环冗余校验(CRC)、64位CRC、SHA-1和SHA-25校验算法对被选中文件进行校验。第5项“*”,则输出被选中文件的CRC-32、CRC-64、SHA-1、SHA-256和BLAKE2sp五种校验结果以及该文件的基本信息(文件名、文件大小)。
点击右键看大图
2.2、方法2:在Windows 7下使用certutil命令
在Windows命令行下输入如下命令计算文件的校验值
certutil -hashfile FileName HashAlgorithm
其中,FileName为待校验文件名(路径)。HashAlgorithm为校验算法名,可能的取值为MD2, MD4, MD5, SHA1, SHA256, SHA512。certutil命令的详细使用方法,请参考微软官网。
Windows XP不支持此命令。
2.3、方法3:在Windows XP下使用FCIV工具
微软提供了一个名为“File Checksum Integrity Verifier”(简称FCIV)的工具。该工具可在Windows 2000/XP/Server 2003上运行,计算某个文件或文件夹下所有文件的校验值(支持MD5和SHA1),并与之前记录的校验值进行比较。该工具的下载链接、安装和使用方法请参考微软官网页面。
2021.4.9补充:不知何故FCIV的微软官网页面已无法访问。虽然其它站点有提供FCIV的安装包( Windows-KB841290-x86-ENU.exe),但微软也没有提供该程序的MD5校验码,不敢用啊。
2.4、方法4:在Windows XP下使用md5sums工具
本节内容2019.4.24补充
从pc-tools.net下载md5sums软件的压缩包,解压缩获得md5sums.exe,在命令行下执行
md5sums FileName
其中,FileName为待校验文件名(路径)。详细使用方法参见解压缩获得的md5sums.txt文件。
2.5、方法5:在Windows下使用WinMD5Free工具
本节内容2021.4.9补充
从winmd5.com下载WinMD5Free安装包,绿色软件解压缩后直接使用,图形操作界面,支持Windows XP/Vista/7/8/10。
2.6、方法6:在Linux下使用xxxsum命令
在Linux命令行下输入如下命令计算文件的校验值
xxxsum FileName
其中,FileName为待校验文件名(路径)。xxxsum为校验算法命令,可能的取值为md5sum,sha1sum,sha256sum,sha512sum,crc32。
3、数字签名:下载文件的身份认证
文件完整性校验针对的是文件内容是否被篡改。如果黑客攻击软件开发者的网站,将网站服务器上的软件替换为被篡改过、含有恶意代码的软件,同时篡改了网站上发布的特征值,那该怎么办。用户如何检查文件来自合法用户(软件开发者)还是非法用户(黑客)呢。为解决这一问题,软件开发者通常采用数字签名的方式对发布内容(exe文件、特征值)进行身份标记,用户对下载文件中的数字签名进行验证,检查下载到的文件是否为软件开发者发布的。通常很少有人会对下载文件进行身份认证的情况并不常见。有关数字签名的问题,我们以后单独讨论。