单向散列函数

1. 单向散列函数

  单向散列函数有一个输入和一个输出,输入的称为消息,输出的称为散列值。

  可以获取消息的指纹,从而确定文件的“完整性”(或者叫一致性)。

  输出的散列值长度是固定的。

 

2. 性质

  根据任意长度的消息,计算出固定长度的散列值。

  能够快速计算出散列值,且具备单向性。

  抗碰撞性:消息不同,散列值也不同,难以发现碰撞性。

 

3. 术语

  单向散列函数也称为摘要函数,哈希函数和杂凑函数。

 

4. 实际应用

  检测软件是否被篡改。

  用于基于口令的加密。

  使用单向散列函数可以构造消息认证码——共享密钥和消息混合后计算散列值。

  进行数字签名时也会使用单向散列函数——对消息散列,对散列值进行数字签名。

  伪随机数生成器。

  一次性口令。

 

5. 单向散列函数

  MD4:能产生128比特的散列值,但Dobbertin提出了MD4散列碰撞方法,MD4不再安全。

  MD5:能产生128比特的散列值,MD5的强抗碰撞性已经被攻破,MD5不再安全。

  SHA-1:能产生160比特的散列值,SHA-1于2005年被攻破。

  SHA-2:SHA-256 散列值长度256比特。

      SHA-384 散列值长度384比特。

      SHA-512 散列值长度512比特。

  RIPEMD-160:160比特的散列值的单向散列函数,比特币中使用该散列函数。

  SHA-3:SHA-1被攻破,Keccak算法被选为SHA-3算法。

 

6. Keccak——被选为SHA-3的算法

  可以生成任意长度的散列值,为了兼容SHA-2,SHA-3,规定了SHA3-256,SHA3-224,SHA3-384和SHA3-512 4个版本。

  采用了与SHA-2不同的结构,结构清晰,易于分析。

  能适用与各种设备,也适用于嵌入式应用,在硬件上的实现显示出了很高的性能。

  比其他候选算法安全性边际更大。

 

7. 散列算法的选择

  MD-5:不安全,不应该再使用。

  SHA-1:除了旧的运算,不应被用于新的用途。

  SHA-2:应对SHA-1的攻击是安全的,建议使用。

  SHA-3:安全,可以使用。

 

8. 对单向散列函数的使用

  暴力破解:已知文件的内容和hash,使用暴力破解,找到相同的hash,但内容有改动的冗余。

  原像攻击:给定一个散列值,给定具有该散列值消息的任意消息。

  第二原像攻击:指定消息1,找出消息2,消息2的散列值和消息1的相同。

 

9. 单向散列函数无法解决的问题

  单向散列函数能辨别出“篡改”,但无法辨别出“伪装”。

  解决这类问题的方案是认证技术,认证技术包括消息认证码和数字签名。

posted @ 2021-06-15 23:01  NiGuard  阅读(596)  评论(0)    收藏  举报