作业题目:散列函数的应用及其安全性。
内容要求:
(1) 给出散列函数的具体应用。
(2) 结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答可以参考下面给出的第一个链接。
(3)结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法在验证软件完整性时可能出现的问题。
一、散列函数的具体应用
(一)Hash算法在信息安全方面的应用主要体现在以下的3个方面:
1、消息认证
消息认证是用来验证消息完整性的一种机制或服务。消息认证中使用Hash函数的本质如下,发送者根据待发送的消息使用该函数计算一组Hash值,然后将Hash值和消息一起发送过去。接受者收到后对于消息执行同样的Hash计算,并将结果与收到的Hash值进行比对。如果不匹配,则接受者推断出消息(或Hash值)遭受了篡改。
2、数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。在进行数字签名过程中使用用户的私钥加密消息的Hash值,其他任何知道该用户公钥的人都能够通过数字签名来验证消息的完整性。
· 3、其他应用
(1)用于产生单向口令文件。
(2)用于入侵检测和病毒检测。
(3)用于构建随机函数(PRF)或用伪随机数发生器(PRNG)。
(4) 文件校验:我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。 HASH函数有类似数据冗余校验类似的功能,但是它比简单的冗余校验碰撞的概率要小得多,顾而在现在密码学中总是用HASH来做关键数据的验证。MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
二、结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答可以参考下面给出的第一个链接。(https://www.win.tue.nl/hashclash/)
(一)生日攻击【4】
Hash函数的输出是定长的,输入数据的长度可以是任意的,因此杂凑函数的计算效率很重要。在安全性上,理想的Hash函数还必须具备以下性质。
1、单向性:对任何给定的杂凑值d,寻找到工使d = h(x)在计算上是不可行的。
2、弱抗碰撞性:对任何给定的x,寻找到不等于x的y,使h(y)=h(x)在计算上是不可行的。
3、强抗碰撞性:寻找任何的(x,y)对,x不等于y, 使h(y)= h(x)在计算上是不可行的。
这里进一步解释以上性质。单向性使杂凑值能安全地代表原数据,也妨碍了攻击者根据特定的杂凑值伪造希望的数据。其余两个性质都是防止碰撞性,碰撞性是指:可以找到x和y, x不等于y, 使h(y)=h(x)。以上弱抗碰撞性和强抗碰撞性在不同的前提下防止了(y, h(x)或(x,h(y))成为有效对。“生口攻击”问题可用于形象地阐述解决碰摘的重要性。(生日攻击最初是指在23个人中,存在2个人生日相同的极率至少为1/2,这类似于计算了q=23次哈希函数的值,该值的范围是1到M=365,就获得了碰撞。分析显示,q=( 2MIn(1-a)-1)1/2 式中,a表示在杂凑值上限为M、通过计算q次杂凑函数得到一个碰撞的概率,当a=0.5时,q =1.17(M)1/2。生日攻击也说明,增大M能增强抗碰撞性,因此杂凑值的长度不能太短,当前普遍在128比特以上。
(二)密码学领域重大发现:山东大学王小云教授成功破解MD5
HASH函数,又称杂凑函数,是在信息安全领域有广泛和重要应用的密码算法。MD5就是这样一个在国内外有着广泛的应用的杂凑函数算法,它曾一度被认为是非常安全的。然而,王小云教授发现,可以很快的找到MD5的“碰撞”,就是两个文件可以产生相同的“指纹”。这意味着,当你在网络上使用电子签名签署一份合同后,还可能找到另外一份具有相同签名但内容迥异的合同,这样两份合同的真伪性便无从辨别。王小云教授的研究成果证实了利用MD5算法的碰撞可以严重威胁信息系统安全,这一发现使目前电子签名的法律效力和技术体系受到挑战。因此,业界专家普林斯顿计算机教授Edward Felten等强烈呼吁信息系统的设计者尽快更换签名算法,而且他们强调这是一个需要立即解决的问题。【6】
(三)Google 宣布成功攻破 SHA-1 加密【9】
SHA-1是1995年由国家安全局(NSA)设计的,作为数字签名算法的一部分。 与其他散列一样,SHA-1还将任何输入消息转换为长字符串的数字和字母,用作该特定消息的加密指纹。
Google官方博客宣布,将在Chrome浏览器中逐渐降低SHA-1证书的安全指示。但有意思的是Google.com目前使用的也是SHA-1签名的证书,但证书将在3个月内过期,Google将从2015年起使用SHA-2签名的证书。SHA-1算法目前尚未发现严重的弱点,但伪造证书所需费用正越来越低,HAttered,成本仅为11万美元,用于在亚马逊的云计算平台上执行。
作为概念证明,新研究提出了具有相同SHA1散列的两个PDF文件[PDF1,PDF2],但是显示完全不同的内容。
根据研究人员,SHAttered攻击比蛮力攻击快100,000倍,技术可用于在GIT文件对象甚至数字证书中创建冲突。
“这种攻击需要超过9,223,372,036,854,775,808个SHA1计算,这相当于处理能力为6500年的单CPU计算和110年的单GPU计算,”研究人员解释说。
尽管研究人员在十年前宣布不安全,微软在2013年11月宣布不安全,但宣布它不会在2016年后接受SHA1证书,SHA1已经在互联网上广泛使用。
所以,现在是迁移到更安全的加密散列,如SHA-256和SHA-3的高时间。
(四)Hash 函数H的安全性需求
需 求 |
描 述 |
输入长度可变 |
H 可应用于任意大小的数据块 |
输出长度固定 |
H产生定长的输出 |
效率 |
对任意给定的x,计算H(x)比较容易,用硬件和软件均可实现 |
抗原像攻击(单向性) |
对任意给定的Hash码h,找到满足H(y)=h 的y在计算上是不可行的 |
抗第二原像攻击( 抗弱碰撞性) |
对任何给定的分块x,找到满足y#x 且H(x)=H(y)的y 在计算上是不可行的 |
抗碰撞攻击(抗强碰撞性) |
找到任何满足H(x)=H(y)的偶对(x,y)在计算上是不可行的 |
伪随机性 |
H的输出满足伪随机性测试标准 |
(五)MD5和SHA-1安全性的对比
MD5安全性 |
SHA-1安全性 |
||
碰撞率的比较 |
高 |
低 |
SHA-1的CR值比MD5低,这意味着SHA-1比MD5拥有更高的安全性 |
基于散列值长度的比较 |
MD5算法散列值为128比特 |
SHA-1算法散列值为160比特 |
对于同一文件的散列值,长度越长必然会越难破解。SHA-1比MD5更难破解。 |
已有破解方法比较 |
已有密码分析的攻击方法 |
SHA-1只是理论上被破解 |
MD5较脆弱。 |
(六)目前安全散列函数的发展
目前常用的HASH函数主要有两个系列,MD 和 SHA系列。【3】
1、MD系列主要包括 MD2,MD4,MD5,不幸的是这一系列的hash函数都已经被证实是不够安全的了,我国山东大学教授王小云就是因为在有限的时间内成功地破解了MD2和MD5算法而扬名海内外。
2、SHA系列正是因此而生,其包含SHA1 和 SHA2(SHA224, SAH256, SHA384,SHA512)系列。其中224,256,384,512都是指其输出的位长度,而SHA1是160位长(注意我们应该避免使用SHA0,那是SHA的初始版本,后来经过调整,升级为SHA0,我们在使用的时候应该使用SHA1).
3、 经过长时间的测试和软硬件的不断提升,SHA1已经不再被当成是能经得住考验的选择了。目前大多数应用场景下,推荐使用SHA256以上的算法。在概率方面有生日悖论的存在,经此推导,每种HASH算法的实际位强度只有其结果强度的一般,即如果是SHA256,实际攻击强度只有2的128次方。【8】
三、结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法在验证软件完整性时可能出现的问题。
(一)构造前缀碰撞法:通过选择不同的前缀,计算生日数和碰撞块添加到文件尾部,即可得到两个具有相同的M D5的文件。不过,要计算出这些尾部数据并不容易,直接使用hashclash[[1]]的工具需要相当大的时间成本,但是碰撞作者对该工具进行改进后已经能够高效完成大量正常程序与恶意程序的碰撞了,以下为此阶段样本的典型样例(每组正常程序与恶意程序对照),由于碰撞的原理与文件格式无关,所以样本形态呈现了多样化的特点。
(二)密码学家使用的是“构造前缀碰撞法”(chosen-prefix collisions)来进行此次攻击(是王小云所使用的攻击方法的改进版本)。
他们所使用的计算机是一台 Sony PS3,且仅用了不到两天。
他们的结论:MD5 算法不应再被用于任何软件完整性检查或代码签名的用途!
下面这两个程序会在屏幕上打印出不同的字符,但是它们的 MD5 都是一样的。【12】
另:现在,如果仅仅是想要生成 MD5 相同而内容不同的文件的话,在任何主流配置的电脑上用几秒钟就可以完成了。
这几位密码学家编写的“快速 MD5 碰撞生成器”:hashclash/fastcoll_v1.0.0.5.exe.zip
源代码:fastcoll_v1.0.0.5_source.zip
(三)md5算法在验证软件完整性时可能出现的问题
1、破解MD5主要依靠大型字典的方法,将常用密码进行MD5后建立数据库,然后和MD5数值进行对比,通过这样的方法来“破解”MD5,因此,通常直接将密码进行MD5处理的话,一些弱密码很容易可以通过这种手段“破解”出来。
2、生成 MD5 相同而内容不同的文件的话,在任何主流配置的电脑上用几秒钟就可以完成。
3、MD5值就好像是软件的指纹,每一个软件只能有唯一一个MD5值,因此我们可以通过MD5值来判断该程序或代码的完整性。使用方法是:例如某个游戏的运行文件的MD5值是X,而用HashX校验器检验出来的结果是Y,那么就有理由怀疑这个文件被加入了木马或者病毒。MD5校检是目前公认最安全的校检软件安全性的方法,但最近,国外的科学家研究出了新的MD5碰撞破解方法,可以让两个不同文件的MD5值完全一样。如果黑客从网上下载一个工具,给其捆绑上木马,然后通过工具让其MD5值和原文件一样。那么当用户下载了文件后用MD5校检工具进行校检时就会发现带毒文件和原文件MD5值完全一样,就会去放心地去运行,结果可想而知。所以,MD5校检已经不再可信了。
四、总结
1、HASH算法不是加密算法
有很多人把HASH算法当成是加密算法,这是不准确的,其实我们知道加密总是相对于解密而言的,没有解密何谈加密呢,HASH的设计以无法解为目的的。
2、HASH并不能保证网络的安全,要防止攻击者同时替换数据和HASH。正确运用中要结合加密,签名。
3、 没有永远的安全HASH,只有永远的HASH思想。
4、MD5 和SHA-1 是单项散列函数的典型代表,它们广泛地应用在信息安全和数字签名等各个领域。SHA-1比MD5安全性更高;在同一硬件上,SHA-1比MD5运行的要慢。在某种程度上,我们可以得出这样一个结论,当处理的数据很小时,我们可以选择使用MD5消息摘要而不是SHA-1消息摘要。因为此时MD5的碰撞率和运行时间都不高,这可以大大节约资源。
参考链接
【1】https://www.win.tue.nl/hashclash/
【2】http://www.win.tue.nl/hashclash/SoftIntCodeSign/
【4】密码学:生日攻击
【6】密码学领域重大发现:山东大学王小云教授成功破解MD5 (2004.09.05 来自:山大视点 )
【8】国际最新消息:Google 宣布成功攻破 SHA-1 加密
【10】MD5和SHA-1的缺陷
【11】MD5算法如何被破解
【12】关于王小云破解MD5
【13】构造前缀碰撞法可制作两个内容不同但具有相同MD5验证码的文件
原文地址:https://www.cnblogs.com/13-14/p/9016500.html