杂凑函数可以按其是否有密钥参与运算分为两大类:不带密钥的杂凑函数和带密钥的杂凑函数。
1.不带密钥的杂凑函数
不带密钥的杂凑函数在运算过程中没有密钥参与。不带密钥的杂凑函数的杂凑值只是消息输入的函数,无须密钥就可以计算。因此,这种类型的杂凑函数不具有身份认证功能,仅提供数据完整性检验,如篡改检测码(MDC)。按照所具有的性质,MDC又可分为弱单向杂凑函数(OWHF)和强单向杂凑函数(CRHF),比如SM3就是不带密钥的杂凑函数。
2.带密钥的杂凑函数
带密钥的杂凑函数在消息运算过程中有密钥参与。这类杂凑函数需要满足各种安全性要求,其杂凑值同时与密钥和消息输入相关,只有拥有密钥的人才能计算出相应的杂凑值。带密钥的杂凑函数不仅能够检验数据完整性,还能提供身份认证功能,被称为消息认证码(MAC)。消息认证码的性质保证了只有拥有秘密密钥杂凑函数的人,才能产生正确的消息:MAC对。