消息认证码
消息认证码(Message Authentication Code)是一种确认完整性并进行认证的一种技术,简称 MAC。
验证过程
消息认证码在输入任意长度的消息和一个发送者与接收者之间的共享密钥后,输出固定长度的数据,该数据称为 MAC 值。
- 假设用户 A 和用户 B 使用共享密钥 K 进行通信。
- A 要发送一段消息 M 给 B,A 首先用消息认证码算法将 K 和 M 计算出消息认证码 MAC。
- 然后将 MAC 和 M 一起发送给 B。
- B 收到 MAC 和 M 后利用 M 和 K 计算消息认证码。
- 如果计算出的消息认证码与收到的一样则验证成功,证明消息未被篡改。
由于攻击者没有密钥 K,攻击者修改了消息内容后无法计算出相应的消息验证码,通过使用发送者和接收者之间共享的密钥,就可以识别出是否存在伪装和篡改行为。
实现方法
- 使用单向散列函数(HMAC)
- 使用分组密码(OMAC、CBC-MAC、PMAC)
缺点
通过 MAC 使用双方都拥有的密钥可以实现防篡改和仿伪装。但是这是一把双刃剑,由于密钥是共享的,这就导致发送方和接收方都可以计算出同样的 MAC 值,所以我们无法判断这个 MAC 值到底是由谁计算出来的。这导致了 MAC 无法防止否认(无法证明消息是发送方生成的还是接收方生成的),可以使用数字签名解决这个问题。