单向散列函数
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. 单向散列函数无法解决的问题
单向散列函数能辨别出“篡改”,但无法辨别出“伪装”。
解决这类问题的方案是认证技术,认证技术包括消息认证码和数字签名。

浙公网安备 33010602011771号