HASH(哈希)函数是信息安全中一个非常重要的工具,它对一个任意长度的消息m施加运算,返回一个固定长度的HASH值h(m),HASH函数h是公开的,对处理过程不用保密。HASH值又被称为哈希值、杂凑值、散列值、消息摘要等。
HASH的过程是单向的,逆向操作难以完成,而且碰撞(两个不同的输入产生相同的HASH值)发生的概率非常小。HASH函数消息中单个bit的变化将会导致哈希值中大约一半的bit发生变化。
常见的HASH算法有:
- MD5(MD5 Message-Digest Algorithm)
MD5由美国密码学家Ronald Linn Rivest设计,于1992公开,用以取代MD4算法,在RFC 1321标准被加以规范。1996年该算法被证实存在弱点,可以被破解。2004年证实MD5无法防止碰撞,因此不适用于安全性认证。
- SHA1(Secure Hash Algorithm 1)
SHA1由美国国家安全局设计,并由美国国家标准技术研究所(NIST)在1995年发布为联邦数据处理标准FIPS PUB180-1。SHA1已被攻破,不再适用于安全性认证。
- SHA2(Secure Hash Algorithm 2)
SHA2由美国国家安全局设计,其下可再分为6个不同的算法标准:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
NIST发布了3个额外的SHA变体,这3个函数都将消息对应到更长的消息摘要。以它们的摘要长度回在原名面来命名。NIST 2001年发布 的FIPS PUB 180-2草稿中定义了SHA-256、SHA-384和SHA-512。2002年发布 包含SHA-1的FIPS PUB180-2正式版本。2004年2月发布了一次FIPS PUB 180-2的变更通知,加入了SHA-224,为了匹配双密钥3DES所需的密钥长度而定义。
- SHA3(Secure Hash Algorithm 3)
SHA3使用基于Keccak算法实现。
2012年10月2日Keccak算法被选为NIST散列函数竞赛的胜利者。SHA3并不是要为了取代SHA2,因为SHA2并没有出现明显的弱点。由于MD5和SHA1被成功破解,NIST需要一个与之前算法不同,可替换的HASH算法,也就是SHA3。2015年8月5日NIST发布 了FIPS 202定义了SHA3算法。SHA-3包括:SHA3-224、SHA3-256、SHA3-3-84、SHA3-512。