哈希值有以下四个特点:
1. 计算效率高(要计算任何输入值的哈希值非常容易)
2. 抗冲突(没有两条输入值可以给出相同的哈希值)
3. 隐藏输入信息(不能通过哈希值推算出输入值)
4. 输出应该看起来随机(但是一样的输入值会得到一样的哈希值)
1/2. MD4/MD5/HAVAL
MD4:
Ron Rivest设计,生成128位消息摘要值,用于高速计算要求的软件系统,针对微处理器进行了优化。
MD4先要填充消息,确保消息的长度比512的倍数小64位,例如一个16位消息要填充432位数据,使其达到448位(512*1-64)。
MD4被认为不安全,已基本弃用。
MD5:
Ron Rivest设计,MD4升级版,生成128位消息摘要值,MD5和MD4一样先要填充消息,但算法更复杂。
增加了第四轮运算,有研究表明MD5不敌碰撞攻击,不再适用于需要抵抗碰撞攻击的应用,如SSL和数字签名。
MD5应用非常广泛,即使被证明不再安全,但是MD5现在还常用于文件完整性校验,例如一些入侵检测系统,以及司法证据完整性校验等非加密目的的应用。
HAVAL:
称为可变长度散列,是MD5的修订版,使用1024位块,可产生128、160、192、224和256位散列值。HAVAL 还允许用户指定用于生成哈希的轮数(3、4 或 5)。
遗憾的是,HAVAL也在2004年前后被攻破。
2/2. SHA系列
Secure Hash Algorithms,安全哈希算法。
SHA系列是由NSA设计、NIST发布,和数字签名标准(Digital Signature Standard,DSS)一起使用的哈希函数——美国联邦信息处理标准(FIPS)180“安全散列标准”(SHS)。
SHA设计的初衷是用在数字签名中。为了满足美国政府应用对安全性更强的哈希算法的需求而做出的改进。
🎈绕不开的NIST/NSA......
SHA(SHA-0):
SHA生成160位哈希值或消息摘要,输出结果随后输入一个非对称算法,输出消息的签名。类似于MD4,但使用了更多的数学函数抵御暴力破解攻击,包括生日攻击。由于存在未公开的“重大缺陷”,在发布后不久被修订的 SHA-1取代。
SHA-1:
SHA-1是SHA的改进版,SHA-1不敌碰撞攻击,所以不适用于需要抗碰撞攻击的应用。
SHA-2/SHA-3:
SHA-2和SHA-3作为SHA的升级版,目前业界认为其安全性适用于任何应用场景。
SHA-2生成消息摘要
需要介绍的是SHA-3:SHA-3使用Keccak算法,它支持与 SHA-2 相同的哈希长度,但是其内部结构与 SHA 系列几乎完全不同。
2012年Keccak算法在NIST的SHA-3竞赛中击败了包括大名鼎鼎的Rivest带来的MD6在内的众多算法,成了SHA-3的标准算法,SHA-3 的目的是在必要时可以直接替代当前应用中的 SHA-2,并显著提高了NIST整体哈希算法工具包的鲁棒性(即系统所具有的在不改变初始稳定构造的情况下抵抗变化的能力)。
Keccak算法使用了如下图所示的海绵结构。基于宽随机函数或随机排列,并允许输入任意数量的数据,并输出任意数量的数据,这带来了很大的灵活性。
不明觉厉的海绵函数/海绵结构
MD5/SHA系列哈希函数属性表
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。