单向散列函数的具体例子

一 MD4、MD5

MD4是由Rivest于1990年设计的单向散列函数,能够产生128bit的散列值。不过随着Dobbertin提出寻找MD4散列的碰撞方法,现在已经不安全了。

MD5是由Rivest于1991年设计的单向散列函数,能够产生128比特的散列值。

MD5的强抗碰撞性已经被攻破,也就是说,现在已经能够产生具备相同散列值的两条不同的消息,因此它已经不安全了。

MD4和MD5中的MD是消息摘要(Message Digest)的缩写。

二 SHA-1、SHA-256、SHA-384、SHA-512

SHA-1是由NIST设计的一种能够产生160比特的散列函数。

1993年被作为美国联邦信息处理标准规格发布的是SHA。

1995年发布的修订版FIPS PUB 180-1称为SHA-1。在《CRYPTREC密码清单》中,SHA-1已经被列入“可谨慎运用的密码清单”,即除了可用于保持兼容性的目的外,其他情况下都不推荐使用。

SHA-256、SHA-384、SHA-512都是由NIST设计的单向散列函数,它们的散列值长度分别为256bit、384bit、512bit。这些单向散列函数合起来统称SHA-2,它们的消息长度也存在上限(SHA-256的上限接近于2的64方比特,SHA-384和SHA-512的上限接近于2的128比特)。这些单向散列函数于2002年和SHA-1一起作为FIPS PUB 180-2发布的。

SHA-1的强抗碰撞性已于2005年被攻破,也就是说,现在已经能够产生具备相同散列值的两条不同的消息。不过,SHA-2还尚未被攻破。

SHA-2共包含6种版本,这6种SHA-2实质上都是由SHA-256和SHA-512这两种版本衍生出来的,其他的版本都是通过将上述两种版本的结果进行截取得到的。此外,SHA-224和SHA-256在实现上采用了32*8比特的内部状态,因此更适合32位的CPU。

6种版本的SHA-2

单向散列函数的具体例子_第1张图片

三 PIPEMD-160

PIPEMD-160是于1996年设计出的一种能够产生160bit的散列值的单向散列函数。PIPEMD-160是欧盟PIPE项目所设计的RIPEMD单向散列函数的修订版。这一系列的函数还包括PIPEMD-128、PIPEMD-256、PIPEMD-320等其他一些版本。在CRYPTREC密码清单》中,PIPEMD-160已经被列入“可谨慎运用的密码清单”,即除了用于保持兼容性的目的以外,其他情况都不推荐使用。

PIPEMD的强抗碰撞性已经于2004年被攻破,但PIPEMD-160还尚未被攻破。顺便一提,比特币使用的就是PIPEMD-160。

四 SHA-3

在2005年SHA-1的强抗碰撞性被攻破的背景下,NIST开始着手制定用于取代SHA-1的下一代单向散列函数SHA-3.SHA-3和AES一样采用公开竞争的方式进行标准化。

SHA-3的选拔于5年后的2012年尘埃落定,一个名叫Keccak的算法胜出,最终成为了SHA-3.

你可能感兴趣的:(安全)