6.3 SHA算法家族

SHA算法基于MD4算法基础之上,作为MD算法的继任者,成为了新一代的消息摘要算法的代表。SHA与MD算法不同之处主要在于摘要长度,SHA算法的摘要长度更长,安全性更高。

6.3.1 简述

SHA(Secure Hash Algorithm,安全散列算法)是消息摘要算法的一种,被广泛认可为MD5算法的继任者。它是由美国国家安全局(NSA, National Security Agency)设计,经美国国家标准与技术研究院(NIST, National Institute of Standards and Technology)发布的一系列密码散列函数。SHA算法家族目前共有SHA-1、SHA-224、SHA-256、SHA-384和SHA-512五种算法,通常将后四种算法并称为SHA-2算法。除上述五种算法外,还有发布不久就夭折的SHA-0算法。

SHA算法是在MD4算法的基础上演进而来的,通过SHA算法同样能够获得一个固定长度的摘要信息。与MD系列算法不同的是:若输入的消息不同,则与其相对应的摘要信息的差异概率很高。SHA算法是FIPS所认证的五种安全杂凑算法。

这些算法中的“安全”字眼是基于以下两点(根据官方标准的描述):

1)由消息摘要反推原输入讯息,从计算理论上来说是很困难的。

2)想要找到两组不同的消息对应到相同的消息摘要,从计算理论上来说也是很困难的。任何对输入消息的变动,都有很高的机率导致其产生的消息摘要迥异。

随着时间的推移,安全算法已不再安全。继山东大学王小云教授顺利破解MD5算法后,SHA-1算法也难逃此劫,终被王小云教授破解。两大著名消息摘要算法被破解,预示着数字签名在理论上可被伪造,B2B和B2C系统将存在安全隐患。

让我们简要回顾一下SHA算法的发展历史:

❑SHA-0算法

1993年,NIST公布了SHA算法家族的第一个版本,FIPS PUB 180。为避免混淆,现在我们称它为SHA-0算法。但SHA-0算法在公布不久后就被NSA撤回,原因是NSA发现SHA-0算法中含有会降低密码安全性的错误。由此,SHA-0算法还未正式推广就已夭折。

❑SHA-1算法

1995年,继SHA-0算法夭折后,NIST发布了FIPS PUB 180的修订版本FIPS PUB 180-1,用于取代FIPS PUB 180,称为SHA-1算法,通常我们也把SHA1算法简称为SHA算法。SHA-1算法在许多安全协定中广为使用,包括TLS/SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5算法的后继者。SHA-0和SHA-1算法可对最大长度为264的字节信息做摘要处理,得到一个160位的摘要信息,其设计原理相似于MD4和MD5算法。如果将得到160位的摘要信息换算成十六进制,可以得到一个40位(每4位二进制数转换为1位十六进制数)的字符串。

有关SHA-1算法详情请参见RFC 3174(http://www.ietf.org/rfc/rfc3174.txt)。

我们常使用的数字证书就有SHA-1算法的影子,如图6-4所示。图中指纹值正是一个40位的十六进制字符串(51ee11819f269a961671a5bd77cba3f0815103c8)。

figure_0181_0041

图 6-4 数字证书中的SHA-1算法

❑SHA-2算法

SHA算法家族除了其代表SHA-1算法以外,还有SHA-224、SHA-256、SHA-384和SHA-512四种SHA算法的变体,以其摘要信息字节长度不同而命名,通常将这组算法并称为SHA-2算法。摘要信息字节长度的差异是SHA-2和SHA-1算法的最大差异。

2001年,在FIPS PUB 180-2草稿中包含了SHA-256、SHA-384和SHA-512算法,随即通过了审查和评论,于2002年以官方标准发布。

2004年2月,在FIPS PUB 180-2变更通知中加入了一个额外的变种“SHA-224”,这是为了符合双金钥3DES(三重DES算法)所需的金钥长度而定义的。