zoukankan      html  css  js  c++  java
  • 2016012074-王文雨-散列函数的应用及其安全性

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

        1)文件校验

      我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。

      MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。

      2)数字签名

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

      3)鉴权协议

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

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

       生日攻击:利用“两个集合相交”问题的原理生成散列函数碰撞,达到目的的攻击称为生日攻击,也称为平方根攻击。 生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘要的长度,即Hash值的长度。

       单向散列函数或者安全散列函数之所以重要,不仅在于消息认证(消息摘要,数据指纹),还有数字签名(加强版的消息认证)和验证数据的完整性。常见的单向散列函数有MD5SHA

    MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1RIPEMD以及Haval

    SHA-1 存储器件将为附件/外设鉴别及防窜改、存储器认证应用提供低成本、高效的解决方案。这些SHA-1 存储器件具有可鉴别特性,特别适合那些要求防范造假的应用,如大批量消耗品、高附加值硬件、硬件许可管理、楼宇进出控制或自动售货机。

        安全散列函数:单向散列函数或者安全散列函数之所以重要,不仅在于消息认证(消息摘要,数据指纹),还有数字签名(加强版的消息认证)和验证数据的完整性。常见的单向散列函数有MD5SHA

     散列函数的安全要求:单向性:对任何给定的散列码h,找到满足H(x)hx在计算上是不可行的。

     抗弱碰撞性:对任何给定的消息x,找到满足yxH(x)=H(y)y在计算上是不可行的。

     抗强碰撞性:找到任何满足H(x)=H(y)的偶对(x,y)在计算上是不可行的。

       目前安全散列函数的发展:有两种方法可以攻击安全散列函数:密码分析法和暴力攻击法。散列函数抵抗暴力攻击的强度完全依赖于算法生成的散列码长度。

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

      MD5算法具有以下特点:

       1 、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

       2、容易计算:从原数据计算出MD5值很容易。

       3 、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

       4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

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

       1、文件篡改

       2、木马病毒植入

       3、传输错误、中断

      HASH函数,又称杂凑函数,是在信息安全领域有广泛和重要应用的密码算法,它有一种类似于指纹的应用。

      安全的杂凑函数在设计时必须满足两个要求:

      其一是寻找两个输入得到相同的输出值在计算上是不可行的,这就是我们通常所说的抗碰撞的;

     其二是找一个输入,能得到给定的输出在计算上是不可行的,即不可从结果推导出它的初始状态。现在使用的重要计算机安全协议,如SSLPGP都用杂凑函数来进行签名,一旦找到两个文件可以产生相同的压缩值,就可以伪造签名,给网络安全领域带来巨大隐患。

      MD5就是这样一个在国内外有着广泛的应用的杂凑函数算法,它曾一度被认为是非常安全的。然而,王小云教授发现,可以很快的找到MD5的“碰撞”,就是两个文件可以产生相同的“指纹”。这意味着,当你在网络上使用电子签名签署一份合同后,还可能找到另外一份具有相同签名但内容迥异的合同,这样两份合同的真伪性便无从辨别。王小云教授的研究成果证实了利用MD5算法的碰撞可以严重威胁信息系统安全,这一发现使目前电子签名的法律效力和技术体系受到挑战。

     下面这两个程序会在屏幕上打印出不同的字符,但是它们的 MD5 都是一样的。

         HelloWorld-colliding

        GoodbyeWorld-colliding.exe

      这是几位密码学家使用的是“构造前缀碰撞法”(chosen-prefix collisions)来进行此次攻击(是王小云所使用的攻击方法的改进版本)。

    他们所使用的计算机是一台 Sony PS3,且仅用了不到两天。

    他们的结论:MD5 算法不应再被用于任何软件完整性检查或代码签名的用途!

    另:现在,如果仅仅是想要生成 MD5 相同而内容不同的文件的话,在任何主流配置的电脑上用几秒钟就可以完成了。

  • 相关阅读:
    线程通信---wait notify
    线程安全方式03---Lock锁
    线程安全方式02Runnable---同步方法
    线程安全方式2Runnable---同步代码块
    线程安全方式1Thread类---同步代码块
    线程安全方式1Thread类---同步方法
    线程中的Thread类中的方法
    多线程之创建线程的方式
    python生成器
    python装饰器作业
  • 原文地址:https://www.cnblogs.com/Dear-Demon/p/9020756.html
Copyright © 2011-2022 走看看