zoukankan      html  css  js  c++  java
  • 2016012077 郭腾岳 散列函数的应用及其安全性

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

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

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

    (2) 结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答可以参考下面给出的第一个链接。

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

    一、散列函数的具体应用

    1、文件校验

      我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。

    2、数字签名

          Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。

    3、鉴权协议

      如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

    4、单向性的运用

          利用HASH函数的这个特点,我们能够实现口令,密码等安全数据的安全存储。密码等很多关键数据我们需要在数据库中存储,但是在实际运用的过程中,只是作比较操作,顾而我们可以比较HASH结果。这一点相信在银行等系统中有所运用,否则我们真的要睡不着觉了。

    5、碰撞约束以及有限固定摘要长度

         数字签名正是运用了这些特点来提高效率的。我们知道非对称加密算法速度较低,通过HASH处理我们可以使其仅仅作用于HASH摘要上,从而提高效率。

    6、可以运用HASH到随机数的生成和密码,salt值等的衍生中

         因为HASH算法能够最大限度的保证其唯一性,故而可以运用到关键数据的衍生中(从一个随机的种子数产生,并且不暴露种子本身秘密)。

    二、散列函数的安全性以及目前安全散列函数的发展

    1、 实例

    (1)、生日攻击:

          生日攻击是利用概率论中的生日问题,找到冲突的Hash值,伪造报文,使身份验证算法失效。使用生日攻击,我们只需2^(n/2)次寻找,就有50%概率能找到相同tag的两个不同信息。

    理论上而言,若抗碰撞性一直为2^n,而强抗碰撞性因为生日攻击的原因会降至2^(n/2)时间。由此可见,SHA-1已经越来越不安全了,数月或者数年后,2^80将不是一个无法逾越的计算时间。

    (2)、MD5安全性:

              MD5是一个较为古老的算法,一度被广泛应用于安全领域。比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。

    不过,由于MD5的弱点被不断发现以及计算机能力不断的提升,通过碰撞的方法有可能构造两个具有相同MD5的信息,使MD5算法在目前的安全环境下有一点落伍。从实践角度,不同信息具有相同MD5的可能性还是非常低的,通常认为是不可能的,通过碰撞的方法也很难碰撞出复杂信息的MD5数值。

    (3)、SHA-1安全性:

              SHA(Security Hash Algorithm)是美国的NIST和NSA设计的一种标准的Hash算法,SHA用于数字签名的标准算法的DSS中,也是安全性很高的一种Hash算法,该算法的输入消息长度小于2^64bit,最终输出的结果值是160bit,SHA与MD-4相比较而言,主要增加了扩展变换,将前一轮的输出也加到了下一轮,这样增加了雪崩效应,而且由于其160bit的输出,对穷举攻击更具有抵抗性。

    2、 散列函数的安全性

    (1)、单向性(原像稳固性):给定一个消息摘要y,很难找到符合h(x)=y的消息x。

    (2)、第二原像稳固性:给定x,很难找到一个x’,满足h(x)=h(x’)。

    (3)、碰撞稳固性:很难找到满足h(x)=h(x’)的二元组(x,x’)。

    (4)、雪崩性:c=Hash(m),c的每一比特都与m的每一比特有关,并有高度敏感性。即每改变m的一比特,都将对c产生明显影响。

     

    3、目前散列函数的发展

          MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

         SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布;是美国的政府标准。后四者有时并称为SHA-2。SHA-1在许多安全协定中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的杂凑函数)的后继者。但SHA-1的安全性如今被密码学家严重质疑;虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的杂凑算法。

    三、md5算法在验证软件完整性时可能出现的问题

    1、 md5算法

          MD5讯息摘要演算法 ,一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash value),用于确保信息传输完整一致。用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

         对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

    2、选择前缀碰撞以及第二个链接

         构造前缀碰撞法可以让两个内容不同的文件,发生前缀碰撞后,两个文件内容变得完全相同,即得到相同的MD5。第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的MD5消息摘要值相同,虽然这两个程序会在屏幕上打印出不同的字符,但是MD5是一样的,这也说明MD5算法存在着不安全性。

     

    3、md5算法在验证软件完整性时可能出现的问题

    (1)、它无法保证文件的完整性和正确性,即是文件可能被篡改或损坏;

    (2)、不安全,因为两个内容不同的文件也会得到完全相同的MD5,所以不能保证文件的来源可靠性,即不能确认接收方接收到的文件与发送方的发出文件一致;

    (3)、当有恶意涉入的情况下文件的正确性难以检测。

  • 相关阅读:
    AX ERROR: Could not find my mock parent, most likely I am stale 不及格的程序员
    利用Segue在视图控制器间传值的问题 不及格的程序员
    Creating a Singleton Instance 不及格的程序员
    iPad 通知 UIKeyboardWillShowNotification 不会在keyBoard处在Undock状态下接到通知 不及格的程序员
    Why RootViewController's view is rotated Automatically by System when the app first loaded? 不及格的程序员
    如何弹出UIDatePicker最好 不及格的程序员
    jQuery开始做恶了 不及格的程序员
    what is the SEL,id and IMP,Class ,Method? 不及格的程序员
    Objectivec 字符串比较的陷井 不及格的程序员
    Unable to create any keyboard shortcuts after the iOS 6.1.3 update on iPad. 不及格的程序员
  • 原文地址:https://www.cnblogs.com/benmatt/p/9028590.html
Copyright © 2011-2022 走看看