一、散列函数在信息安全方面的具体应用
1、散列函数定义
Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。MD5 和 SHA1 可以说是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。
2、散列函数的具体应用
(1)文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数 据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
(2)数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。
(3)鉴权协议
如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。
3、正确的应用场景
(1)数据校验
HASH函数有类似数据冗余校验类似的功能,但是它比简单的冗余校验碰撞的概率要小得多,故而在现代密码学中总是用HASH来做关键数据的验证。
(2)单向性的运用
利用HASH函数的这个特点,我们能够实现口令,密码等安全数据的安全存储。密码等很多关键数据我们需要在数据库中存储,但是在实际运用的过程中,只是做比较操作,故而我们可以比较HASH结果。
(3)碰撞约束以及有限固定摘要长度
数字签名正是运用了这些特点来提高效率的。我们知道非对称加密算法速度较低,通过HASH处理我们可以使其仅仅作用于HASH摘要上,从而提高效率。
(4)可以运用HASH到随机数的生成和密码,salt值等的衍生中
因为HASH算法能够最大限度的保证其唯一性,故而可以运用到关键数据的衍生中(从一个随机的种子数产生,并且不暴露种子本身秘密)。
二、结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年Google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展
1、生日攻击(Birthday paradox):
生日攻击是利用概率论中的生日问题,找到冲突的Hash值,伪造报文,使身份验证算法失效。
生日悖论是指,如果一个房间里有23个或23个以上的人,那么至少有两个人的生日相同的概率要大于50%。这就意味着在一个典型的标准小学班级(30人)中,存在两人生日相同的可能性更高。对于60或者更多的人,这种概率要大于99%。从引起逻辑矛盾的角度来说生日悖论并不是一种悖论,从这个数学事实与一般直觉相抵触的意义上,它才称得上是一个悖论。大多数人会认为,23人中有2人生日相同的概率应该远远小于50%。
2、2004、2005年王晓云教授有关MD5安全性
MD5是一种不可逆的加密算法,md5的全称是message-digest algorithm 5。在90年代初开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。
MD5是一个较为古老的算法,一度被广泛应用于安全领域。比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。
在用户密码的处理方面,MD5总的来看还算是安全的,至少比明文保存密码要好的多,目前破解MD5主要依靠大型字典的方法,将常用密码进行MD5后建立数据库,然后和MD5数值进行对比,通过这样的方法来“破解”MD5,因此,通常直接将密码进行MD5处理的话,一些弱密码很容易可以通过这种手段“破解”出来。
不过,如果在散列的过程中,加入足够长的salt(即干扰字符串),并且salt加入一些动态信息,例如username、随机码等,这样生成的MD5还是很难被破解的,因为仅仅从数据库无法看到MD5具体的处理过程,必须同时看到处理时的源代码才可以,这就给破解MD5带来相当大的难度。
王晓云教授证明了MD5碰撞的存在,跟破解本身没多大关系。之前人们普遍认为用MD5加密产生的密文相当多,不可能重复,但是王晓云教授能够找到不同的明文但是它们加密后产生了相同的密文。2004年8月17日在美国加州圣巴巴拉举行了一次国际密码学学术年会(Crypto’2004),当晚来自中国山东大学的王小云教授做了关于破译 MD5、HAVAL-128、 MD4和RIPEMD算法的报告。
3、2017年Google公司SHA-1的安全性
Google 的安全团队刚刚创造了计算机加密学在 2017 年的第一个里程碑:他们攻破了SHA-1安全加密算法。
SHA-1 是什么?
SHA-1(全称 Secure Hash Algorithm-1)是一种安全加密算法,最主要的用途是数字签名。
这是因为,使用类似于 SHA-1、MD5 这样的哈希算法,对任何文件,无论文本文档、表格、音乐mp3、PDF、可执行文件等进行计算后,都会得出像上图中这样的字段(哈希值)。在过去只要文件不同,对应的哈希值都绝对不一样,就像是给每个文件都加上了数字的签名。
对于下载者来说,原文件的哈希值很重要:当你下载了一个软件,用文件校验工具查看它的 SHA-1/MD5 值,如果和原文件的不一样,你就得小心了,因为文件显然被修改过了,而里面可能包含了病毒或其他恶意代码。
SHA-1 和 MD5 是目前世界上最为常用的文件校验加密算法。其中,SHA-1 已经诞生 10 年之久,在过去一直被认为是比较安全和可靠的算法——直到今天。
这次攻破被命名为 SHAttered attack。研究者提供了两张内容截然不同,在颜色上存在明显差异,但 SHA-1 哈希值却完全相同的 PDF 文件作为证明:
哈希碰撞(hash collision,即两个不同文件哈希值一致,也有译作哈希冲突)本来不应该发生。但实际上,当哈希算法存在漏洞时,一个有足够实力的攻击者能够制造出碰撞。进而,攻击者可以用去攻击那些依靠哈希值来校验文件的系统,植入错误的文件造成恶果。
4、散列函数的安全性
生日攻击:生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘要的长度,即Hash值的长度。是对任何HASH都适用的普适的攻击方法,应对方法也很简单,增加HASH的长度,但是很难完成。
SHA-1算法:而早在 2014 年,Google 就宣布了逐渐放弃 SHA-1 的决定。去年开始,Google 的 Chrome 浏览器已经不再支持 SHA-1 证书,会将其标记为不安全。当证书过期之后,浏览器将无法访问这些网站。Google 方面也推荐 IT 人士采用 SHA-256 等更安全的算法。
MD5:2004年8月中国密码学家王晓云教授等首次公布了提出一种寻找MD5碰撞的新方法。目前利用该方法用普通微机几分钟内即可找到MD5的碰撞。MD5已经被彻底攻破。
5、安全散列函数的发展
(1)安全散列函数结构:
因为所需的安全散列长度越来越长,因此我们可以使用有限定义域上的散列函数(俗称压缩函数)通过迭代方式拓展为具有无限定义域的散列函数。而最为代表性的就Merkle-Damgard结构。
(2)Merkle-Damgard结构:
这个结构的好处是,如果压缩函数是抗碰撞的,那经过此结构处理后的散列函数也是抗碰撞的。HMAC就是基于这种结构,因为Merkle-Damgard结构并不能抵抗扩展攻击,因此HMAC引入了Key。
(3)散列函数发展:
安全Hash算法SHA(secure hash algorithm) 由美国标准与技术研究所(NIST)设计并1993年作为联邦信息处理标准(FIPS 180)发布,修改版于1995年发布,通常称之为SHA1,该标准称为安全Hash函数。
MD4是麻省理工学院教授Ronald Rivest于1990 年设计的一种信息摘要算法。它是一种用来测试信息完整性的密码散列函数的实行。其摘要长度为128位。这个算法影响了后来的算法如MD5、SHA 家族和RIPEMD等。MD5算法是1991年发布的一项数字签名加密算法,它当时解决了MD4算法的安全性缺陷,成为应用非常广泛的一种算法。
MD5多年前被设计用于安全用途,是一种计算方便,碰撞概率极低的Hash算法,不过现在已经不安全了。
三、结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法来验证软件完整性时可能出现的问题
1、md5中的选择前缀碰撞
MD5就是这样一个在国内外有着广泛的应用的杂凑函数算法,它曾一度被认为是非常安全的。然而,王小云教授发现,可以很快的找到MD5的“碰撞”,就是两个文件可以产生相同的“指纹”。构造前缀碰撞可以生成两个不同的文件,而这两文件的md5却是一样的。这意味着,当你在网络上使用电子签名签署一份合同后,还可能找到另外一份具有相同签名但内容迥异的合同,这样两份合同的真伪性便无从辨别。王小云教授的研究成果证实了利用MD5算法的碰撞可以严重威胁信息系统安全,这一发现使目前电子签名的法律效力和技术体系受到挑战。
选择前缀攻击是构造两个不同的消息s1和s2,他们不必有共同的前缀,但是经过在尾部附加不同的“碰撞块”后,两个消息的散列值相同。
2、可能出现的问题
这两个不同功能的程序会在屏幕上打印出不同的字符,(图中为其中一个的执行结果)但是它们的MD5都是一致的。不同内容不同功能的可执行文件可以伪造MD5码,如果仅仅是想要生成 MD5 相同而内容不同的文件的话,在任何主流配置的电脑上用几秒钟就可以完成了。MD5 算法不应再被用于任何软件完整性检查或代码签名的用途。即md5算法已经不安全,即使验证成功,文件也已经有可能被篡改或者加入木马病毒,则以上体现出的安全问题已经十分严重,即可能出现的问题。
参考链接:
http://www.williamlong.info/archives/3229.html
http://security.ctocio.com.cn/securitynews/371/8197871.shtml
https://blog.csdn.net/winner82/article/details/3014030