Message authentication code
消息认证码可以同时识别篡改和伪装,也就是即可以确认消息完整性又可以进行认证,简称为MAC。
消息认证码是一种密钥相关联的单向散列函数,它的输入包括任意长度的消息和一个发送者与接收者之间的共享密钥,然后输出固定长度的数据,这个数据称为MAC值
单向散列函数与消息认证码的比较:
消息认证码的使用步骤
消息认证码的密钥配送问题
消息认证码中共享密钥一旦被主动攻击者获取,那么主动攻击者也可以计算出MAC值,从而就能够自由地进行篡改和伪装攻击,这样一来消息认证码就无法发挥作用了它的密钥配送问题和对称密码的密钥配送问题一样。
但对称密码不能代替消息认证码,如果用对称密码代替消息认证码的功能会导致“正确的发送者用正确的密钥加密的随机比特序列”和“不正确的发送者用错误的密钥加密的任意比特序列”,两者在解密后看上去都是随机比特序列,所以无法对它们进行区分。
消息认证码的实现方法
- 使用单向散列函数实现
- 使用分组密码实现
- 使用流密码和公钥密码等也可以实现
对消息认证码的攻击
1. 重放攻击(replay attack) 主动攻击者将正确的MAC值保存下来重复利用: 防御重放攻击的方法:
- 序号 :约定每次都对发送的消息赋予一个递增的序号。并在计算MAC值时将序号也包含在消息中。
- 时间戳 :约定在发送消息时包含当前恶斗时间,如果收到以前的消息,即便MAC值正确也将其当做错误的消息来处理。
- nonce :在通信之前接收者先向发送者发送一个一次性的随机数,这个随机数一般称为nonce,发送者在消息中包含这个nonce并计算MAC值。
2. 密钥推测攻击 和对单向散列函数的攻击一样,对消息认证码也可以进行暴力破解以及生日攻击。
消息认证码无法解决的问题
1. 对第三方证明
2. 防止否认