消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术。

对于单向散列函数来说,主要的作用是为了确保消息的完整性。但对于消息认证码,主要作用是认证,指的是消息来自正确的发送者这一性质。

消息认证码的输入包括任意长度的消息和一个发送者与接收者之间的共享密钥,输出为一个固定长度的数据,称为MAC值

却别如下所示:

8-MAC-Compare-Hash

其实也就是不对比公开的单向散列函数计算的散列值,而是换成了对比私有的单向散列函数计算的“散列值”。

由于密钥只有收发消息的双方含有,所以第三方无法判断消息的来源,导致了消息认证码无法防止否认

消息认证码的使用步骤可以简单的描述成下面这种形式:

8-MAC-Process

消息认证码主要存在的问题在于密钥的配送。如果攻击者在密钥配送过程中获取了密钥,那么就能伪造消息认证码,从而进行攻击。


对消息认证码的攻击

重放攻击

假设攻击者Eve从Alice银行向Bob银行汇款100元,通过消息认证码计算后,将消息发送给Bob银行。攻击者Eve从中间劫持了这段数据,然后重复发送这一段数据给Bob银行。

在这种攻击方式中,Eve并不知道Alice和Bob之间的共享密钥。

8-MAC-Attack

解决方式可以是添加一个时间戳,或者每个消息都给予一个唯一的序列号