消息认证包含以下三方面含义。
1.对消息内容的认证。消息在传送过程中可能出现差错或被篡改、伪造,通过完整性验证,可确保消息内容的真实性。
2.对消息来源的认证。攻击者可能伪装成发送者,发出假冒消息,可通过使用双方的共享密钥,确保发送者就是其声称的合法用户。
3.对消息时效性的认证。消息在传送过程中可能被重传或延迟,可通过消息认证验证消息发送的先后顺序以及是否实时发送。
从消息认证的含义可看出,消息认证既可对消息内容本身认证,也可对消息的数据源进行认证,那么消息认证与数字签名有何不同呢?数字签名是用发送者的私钥对消息或消息的摘要值加密的结果,它代表发送者的身份。而消息认证是用发送者与接收者所共享的密钥来处理消息的结果,它虽然能够证明消息不是第三者所为,但是不能抵制发送者与接收者两人之间互相抵赖的情况,因此它只能用来作为认证消息的代码,而不是唯一代表发信人凭据的签名。
消息认证的实质是:发送者通过双方协商的某种函数(如Hash函数),以待发消息作为输入经过函数变换产生消息认证码,该认证码对于要保护的消息来说是唯一的,它与原始消息一起在公开信道上传送;接收者收到消息后,使用相同的函数对收到的消息再次计算,也得到一个消息认证码。如果两个消息认证码相同,则说明消息是合法可信的。消息在认证过程中没有第三方参与,只在通信双方之间进行,消息认证用来验证消息的完整性。
MAC可用做认证符,也称为密码校验和。例如通信双方A和B共享一密钥K,设发送者A欲发送给接收者B的消息是M,A首先计算MAC=Ck(M),其中Ck(·)是密钥控制的公开函数,它类似于Hash函数,是不可逆的压缩函数。然后A向B发送M‖MAC,B收到后做与A相同的计算求得一新MAC’,并将收到的MAC与计算得出的MAC’进行比较,如果两者相同,B就可以确认收到的消息是合法的,接受该消息,否则拒绝。