zoukankan      html  css  js  c++  java
  • Hash函数

    1、Hash函数的作用

         具有极强的错误检测能力

         用Hash码作MAC,可用于认证

         用Hash码辅助数字签名

         Hash函数可用于保密

    2、Hash函数的定义

         1.Hash函数将任意长的数据M变换成定长的码h,记为:h=HASH(M) 或 h=H(M)。

         2.实用性:对于给定的数据M,计算h=HASH(M)是高效的。

         3.安全性:

             1)单向性:对于给定的Hash值h,找到满足H(x)=h的x在计算上是不可行的。

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

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

    3、Hash函数的一般结构

          分组:将输入分成L-1个大小为b位的分组。

          填充:若第L-1分组不足b位,则将其填充为b位。

          附加:附加上一个表示输入的总长度的分组。

          一共L个大小为b位的分组。

          由于输入中包含长度,所以攻击者必须找出具有相同Hash值且长度相等的两条报文,或者找出两条长度不等但加入长度后Hash值相同的报文,从而增加了攻击难度。

          

     4、Hash函数的应用

     5、经典的Hash算法

        1.MD5

          由Ronald Rivest设计(RSA设计者之一),一系列的Hash算法MD2,MD4...,生成128-bit的哈希值,曾经是广泛使用的哈希算法,成为Internet标准-RFC1321。

          山东大学王小云教授等提出的比特跟踪法能快速寻找哈希碰撞,故,现今不可用

        2.SHA-1

          SHA最初由NIST和NSA于1993年设计,于1995年修订为SHA-1,与DSA签名方案一起只用作为美国标准,标注号为FIPS 180-1 1995,也是因特网标准RFC3174,基于MD4设计,生成160-bit的哈希值。

          但是2005年起,针对SHA-1安全性的最新碰撞分析研究成果,引起了一定程度担忧。

          2002年,NIST发布了修订版FIPS 180-2,给出了3种新的SHA版本:SHA-256、SHA-384、SHA-512,是为了兼容AES密码提供的更高的安全性设计,结构和相关细节与SHA-1类似,因此,相关密码分析是相似的。安全级别更高。    

          

        3.PIPEMD-160

           在欧洲开发,参与攻击MD4/5的研究人员设计,某些方面与MD5/SHA类似,生成160-bit哈希值,比SHA-1慢,但更安全。

    6、哈希函数的安全性讨论

        像分组密码一样,穷举攻击是最好的选择,前提是算法没有漏洞。

        暴力破解:
            穷举攻击的平均尝试次数是 2m/2 :其中m是输出的哈希值的bit数量。

            目前,128-bit哈希安全性较弱,160-bit甚至哈希值更长更好。

        注:分组密码穷举攻击的平均尝试次数是 (1/2)*2m ,其中m是秘钥长度。所以Hash函数的暴力破解相对更容易。

  • 相关阅读:
    DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践
    UVA10071 Back to High School Physics
    UVA10071 Back to High School Physics
    UVA10055 Hashmat the Brave Warrior
    UVA10055 Hashmat the Brave Warrior
    UVA458 The Decoder
    UVA458 The Decoder
    HDU2054 A == B ?
    HDU2054 A == B ?
    POJ3414 Pots
  • 原文地址:https://www.cnblogs.com/msq2000/p/12734882.html
Copyright © 2011-2022 走看看