2016011993 顾思宇 散列函数的应用及其安全性

本次作业为扩展有关散列函数安全性的知识扩展。

作业题目:散列函数的应用及其安全性。内容要求:

(1) 给出散列函数的具体应用。(2) 结合生日攻击、以及2004、2005年王小云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答可以结合下面给出的第一个链接。(3) 结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法来验证软件完整性时可能出现的问题。

链接1:https://www.win.tue.nl/hashclash/

链接2:http://www.win.tue.nl/hashclash/SoftIntCodeSign/

(1) 给出散列函数的具体应用。

     (1)消息认证

    在一个开放通信网络的环境中,信息面临的攻击包括窃听、伪造、修改、插入、删除、否认等。因此,需要提供用来验证消息完整性的机制或服务,即消息认证。这种服务的主要功能是确保收到的消息确实与发送的一样和确保消息的来源真实有效。用于消息认证的最常见的密码技术是基于哈希函数的消息认证码。

    (2)数字签名

    因为非对称算法的运算速度较慢,所以在数字签名协议中,哈希函数扮演了一个重要的角色。对消息摘要进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。

    (3)口令的安全性

    由于哈希函数具有单向性的特征,因此在口令保护中应用非常广泛。通常,仅将口令的哈希值进行保存,进行口令校验的时候对比哈希值即可。即使攻击者获得了保存的哈希值,也无法计算出口令。MD5 广泛用于操作系统的登陆认证上, 如在 Unix 系统中用户的密码是以 MD5 (或其它 类似的算法)经 Hash 运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密 码进行 MD5 Hash 运算,然后再去和保存在文件系统中的 MD5 值进行比较,进而确定输入 的密码是否正确。 通过这样的步骤, 系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。

    (4)数据完整性校验

    比较熟悉的校验算法有奇偶检验和循环冗余校验码CRC。这两种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信息误码,但却不能防止对数据的恶意破坏。哈希算法消息摘要的特征使它成为目前应用最广泛的一种数据完整性校验的算法。

  (5)快速访问

  散列表的寻址时间复杂度为 O(1) ,在数据存储中运用较多。

  (6)伪随机数生成

 (2) 结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。

  • 散列函数的安全性

生日攻击(Birthday Attack):

生日悖论(Birthday paradox):

生日悖论是指,如果一个房间里有23个或23个以上的人,那么至少有两个人的生日相同的概率要大于50%。这就意味着在一个典型的标准小学班级(30人)中,存在两人生日相同的可能性更高。对于60或者更多的人,这种概率要大于99%。从引起逻辑矛盾的角度来说生日悖论并不是一种悖论,从这个数学事实与一般直觉相抵触的意义上,它才称得上是一个悖论。大多数人会认为,23人中有2人生日相同的概率应该远远小于50%。
 

生日攻击原理:

由此我们可以将它用在碰撞,得到不同Message有着相同tag。
假设:取样次数为N,M:M1-Mn,取值在tag:1-B中,并且假设分布随机均匀相互独立。
取样次数n与B的关系,n=1.2*B^0.5(这是生日悖论中最坏的情况。)
证明:M2不等于M1的概率为(B-1)/B,同理可得M3为(B-2)/B,M4为(B-3)/B...Mn为(B-n+1)/B。
因此,其中有碰撞的概率为:1-(1-1/B)(1-2/B).....(1-(k-1)/B)>= (1-e)^(-n^2/2B)
因为n=1.2*B^0.5,因此(1-e)^(-n^2/2B)=1-e^-0.72=0.53>50%
 
结论,因此使用生日攻击,我们只需2^(n/2)次寻找,就有50%概率能找到相同tag的两个不同Message。
 

步骤:

1.随机在2^(n/2)信息空间中寻找一个M
2.求出相应的tag
3.寻找是否有碰撞,没有则返回步骤1
 

破解时间:

理论上而言,若抗碰撞性一直为2^n,而强抗碰撞性因为生日攻击的原因会降至2^(n/2)时间。
 

       由此可见,SHA-1已经越来越不安全了,数月或者数年后,2^80将不是一个无法逾越的计算时间。另外,因为计算机多为伪随机,因此现在SHA-1理论上所需的抗碰撞时间仅为2^55时间。 

  

  有两种方法可以攻击安全散列函数:密码分析法和暴力攻击法。散列函数抵抗暴力攻击的强度完全依赖于算法生成的散列码长度。Van Oorschot和Wiener曾经提出,花费1000万美元涉及一个被专门用来搜索MD5算法碰撞的机器,则平均24天内就可以找到一个碰撞。
  2004年8月中国密码学家王晓云教授等首次公布了提出一种寻找MD5碰撞的新方法。目前利用该方法用普通微机几分钟内即可找到MD5的碰撞,例如老师在链接中给出的基于王小云教授的快速MD5碰撞生成器。MD5已经被彻底攻破。

  
  hash函数安全一般是要满足三条性质:
  1.单向性(原像稳固性)。给定一个消息摘要y,很难找到符合h(x)=y的消息x。
  2.第二原像稳固性。给定x,很难找到一个x’,满足h(x)=h(x’)。
  3.碰撞稳固性。很难找到满足h(x)=h(x’)的二元组(x,x’)。
  这其中解决第三个问题碰撞问题的难度是最小的,目前对md5、sha1的攻击也基本都是在寻找碰撞。

 

  • 安全散列函数的发展

  对于Hash函数未来的研究方向,主要集中在两个方向。一是对Hash 函数本身性质的研究,Hash 函数作为密码学的基础模块,一直没有完全成熟的理论,这有待于继续完善。二是新Hash函数的设计。由于MD5,SHA-1等相继被攻破,新的安全的Hash函数的设计成为急需解决的问题。事实证明,原有的直接构造Hash函数的方式并不能抵抗差分攻击,MD5,SHA-1的失败就是例子。新Hash函数的设计可以从两种途径考虑。一是基于分组密码构造Hash。AES 等更新更安全的分组密码的出现为这一方向奠定了基础,这个方向的重点应该是双倍长度并且高效的构造方式; 二是采用新的方式直接设计新算法。.在新算法的设计中应该尽量引入分组密码的设计理念和准则。比如S 盒,线性变换,变化的循环移位,快速有效的混和等等。另外,对于分组密码的安全分析也应该用于Hash 函数的分析,比如对线性攻击,代数攻击的抵抗能力等。又因为Hash 函数有其自身的特点,还要注意某些对于分组密码并不构成足够威胁的攻击方法,比如相关密钥攻击等等。

 

  

(3)结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法来验证软件完整性时可能出现的问题。

  • 前缀碰撞

  在2004 年的国际密码学会议上,王小云等利用差分攻击 算法首次实现 MD5 随机碰撞攻击,得到 MD5 碰撞消息对。 2005 年,王小云教授和于洪波博士给出了上述随机碰撞攻击的细节,其中描述了攻击所需的差分路径,并介绍了近似碰撞块的概念,即特定的目标输出差分所需的输入消息对。随后,研究者对 MD5 随机碰撞攻击进行了一系列的改进。上述 MD5 随机碰撞攻击需要首次近似碰撞前的初始链接值的差分为 0,因此又被称为相同前缀碰撞。

  • 文件执行结果和MD5消息摘要值

  文件helloworld.exe的执行结果是窗口一闪而过,而goodbyworld.exe的执行结果是“Goodbye World :-(”的循环输出。

  在链接中给出的HelloWorld-colliding.exeGoodbyeWorld-colliding.exe尽管文件不同,但他们却拥有相同的MD5 Hash Value: 18FCC4334F44FED60718E7DACD82DDDF

  • MD5算法验证软件完整性时可能出现的问题

  不同的文件可以产生相同的检验值,故使用MD5方法验证文件未被篡改已不可靠。

  黑客可以通过软件伪造MD5值,病毒木马就能很轻松的躲过MD5校检。例如黑客从网上下载一个工具,给其捆绑上木马,然后通过工具让其MD5值和原文件一样。那么当用户下载了文件后用MD5校检工具进行校检时就会发现带毒文件和原文件MD5值完全一样,就会去放心地去运行,结果可想而知。所以,MD5校检已经不再可信了。

猜你喜欢

转载自www.cnblogs.com/DandelionClaw/p/9011912.html
今日推荐