一,概述:
上一节我们知道消息的完整性保护需要通过单向散列函数来保证。但是光完整性还不够,我们还有确认消息的来源必须是正确的发送者。
MAC(message authentication code)消息认证码是一种确认完整性并进行认证的技术,是一种与密钥相关联的单向散列函数。输入是任意长度的消息和一个发送者和接收者之间共享的密码,输出固定长度的数据MAC值。两者之前的区别如下图所示:
由于需要共享密钥,如果这个密钥被截取,从而可以进行自由的篡改和伪装,因此需要解决密钥配送问题,可以采用公钥密码、证书体系等传统方式。
比如通过认证加密,一种将对称密码与消息认证码相结合,比如将明文用对称密码加密,然后计算密文的MAC值,同时满足机密性、完整性、认证三大功能机制。
GCM是一种认证加密方式,专门用于消息认证码的GCM称为GMAC.
像一些IPsec、SSL/TLS等通信协议就使用了消息认证码。(详细介绍如:
TLS与SSL的介绍及区别)
二,消息认证码的实现方法
除了可以用分组密码实现消息认证码之外,也可以用单向散列函数来实现,比如HMAC。
使用SHA-1、SHA-224、SHA-256、SHA-384、SHA-512所生成的HMAC分别称之为HMAC-SHA-1、HMAC-SHA-224、HMAC-SHA-256、HMAC-SHA-384、HMAC-SHA-512。
三,针对消息认证码的攻击
应该保证不能跟进MAC值推测出通信双方所使用的密钥。
1,重放攻击,不需要破解消息认证码,而是截取正确的值进行重复利用,当然,可以通过序号、时间戳、随机数等方式避免。
2,密钥推测攻击,同样也可以进行暴力破解和生日攻击。
四,消息认证码无法解决的问题
1,第三方证明,也就是说乙无法向丙证明,这条消息是甲发送的。因为有了第三方参与,因为密钥是共享的,甲和乙无法证明消息就是对方发送的,也许是自己发送的呢!
2,防抵赖性,也就是说甲乙都可以否认消息是对方发送的。
通过数字证书可以解决。