杂凑函数(又叫Hash函数、哈希函数、消息摘要函数、散列函数)就是把任意长的输入消息串变化成固定长的输出串的一种函数。杂凑函数是信息安全中一个非常重要的工具,对一个任意长度的消息m施加运算,返回一个固定长度的杂凑值h(m),杂凑函数h是公开的,不用对处理过程保密。杂凑值也被称为哈希(Hash)值、散列值、消息摘要等。
杂凑函数这个过程是单向的,逆向操作难以完成,而且碰撞(两个不同的输入产生相同的杂凑值)发生的概率非常小。杂凑函数的消息输入中,单个比特的变化将会导致输出比特串中大约一半的比特发生变化。
一个安全的杂凑函数应该至少满足以下几个条件:
(1)输入长度是任意的。
(2)输出长度是固定的,根据目前的计算技术应至少取128bit,以便抵抗生日攻击(生日攻击是一种密码学攻击手段,所利用的是概率论中生日问题的数学原理)。
(3)对每一个给定的输入,计算输出(杂凑值)是很容易的。
(4)给定杂凑函数的描述,找到两个不同的输入消息杂凑到同一个值是计算上不可行的,或给定杂凑函数的描述和一个随机选择的消息,找到另一个与该消息不同的消息使得它们杂凑到同一个值是计算上不可行的。
Hash函数主要用于完整性校验和提高数字签名的有效性,目前已有很多方案。杂凑函数最初是为了消息的认证性。在合理的假设下,杂凑函数还有很多其他应用,比如保护口令的安全、构造有效的数字签名方案、构造更加安全、高效的加密算法等。