单向散列函数算法也称为报文摘要函数算法,使用单向的散列函数,其实现过程是从明文到密文不可逆的过程。其实就是只能加密而不能将其还原,即理论上无法通过反向运算得到原始数据内容。因此,单向散列函数算法通常只用来进行数据完整性验证。
单向散列函数表达式为h=H(M),其中M是一个变长消息,H(M)是定长的散列值。消息正确时,将散列值附于发送方的消息后,接收方通过重新计算散列值认证该消息。散列函数必须具有下列性质:
(1)M可应用于任意大小的数据块。
(2)H产生定长的输出。
(3)对任意给定的M,计算H(M)比较容易,用硬件和软件均可实现。
(4)对任意给定的散列码h,找到满足H(M)=h的M在计算上是不可行的,称之为单向性。
(5)对任何给定的分组M,找到满足N不等于M且H(M)=H(N)的N在计算上是不可行的,称之为抗弱碰撞性。
(6)找到任何满足H(M)=H(N)的(M,N)在计算上是不可行的,称之为抗强碰撞性。
由于单向函数在速度上比对称加密算法还快,因此它被广泛应用,是数字签名和消息验证码(MAC)的基础,常用的单向散列函数算法有MD5和SHA-1等。