目录
8.1 本章学习的内容
8.2 消息认证码
使用消息认证码可以判断消息是否被篡改,以及该消息是否来自期望的发送者。
8.2.1 汇款请求是正确的吗
消息的完整性:消息没有被篡改
消息的认证:消息来自正常的发送者
8.2.2 什么是消息认证码
消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术。简称为MAC。
消息认证码的输入包括任意长度的消息和一个发送者接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为 MAC值。
消息认证码是一种和密钥相关联的单向散列函数。
单向散列函数与消息认证码的比较
8.2.3 消息认证码的使用步骤
假设Alice银行要向Bob银行转账:
- 发送者Alice和接收者Bob事先共享密钥
- Alice根据汇款请求消息和密钥计算MAC值
- Alice将汇款请求信息和MAC值发送给Bob
- Bob根据接收到的信息汇款信息计算MAC值,将它和从Alice处接收的MAC值对比
- 如果两个MAC值一致,则Bob就可以断定汇款请求来自于Alice
8.2.4 消息认证码的密钥配送问题
要解决消息认证码的密钥配送问题,需要和 对称加密 的解决方法一样。
8.3 消息认证码的应用实例
- SWIFT:环球银行金融电信协会。
- IPsec:IP协议增加安全性的一种方式。对通信内容的认证和完整性校验都是采用MAC来完成的。
- SSL/TLS:将在14章详解。
8.4 消息认证码的实现方法
有很多种实现方式。
8.4.1 使用单向散列函数实现
使用SHA-2之类的单向散列函数,HMAC就是其中一种实现方式。
8.4.2 使用分组密码实现
使用AES之类的分组密码来实现。例如:AES-CMAC(RFC4493)就是一种。
8.4.3 其他实现方法(流密码、公钥密码)
使用流密码、公钥密码等也可以实现。
8.5 认证加密
认证加密(AE、AEAD)是一种将对称密码与消息认证码相结合,同时满足机密性、完整性和认证三大功能的机制。
8.6 HMAC的详细介绍
8.5.1 什么是HMAC
HMAC中的H是Hash的意思。是使用单向散列函数来构造消息认证码的方式(RFC2104)。
如:HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA512
8.5.2 HMAC的步骤
计算步骤:
8.7 对消息认证码的攻击
8.7.1 重放攻击
8.7.2 密钥推测攻击
8.8 消息认证码无法解决的问题
8.8.1 对第三方证明
假设Bob收到了Alice的消息后,想要向第三方验证者Victor证明这条消息是Alice发送的,用消息认证码无法进行这样的证明。
因为Victor无法判断这条消息到底是Alice发的,还是Bob发的,因为Alice和Bob双方都可以计算Mac值,所以对于Victor来说,Alice和Bob都无法证明是对方计算了MAC值,而不是自己。
8.8.2 防止否认
Alice向Bob发送了消息后,Alice可以向Victor声称:我没有发过这条消息给Bob。而Bob也没法向Victor证明这条消息确实是Alice发的,这样的行为就称为否认。
这种情况下,使用第9章中要介绍的数字签名就可以防治否认。