1. 消息认证码
消息认证码是一种确认完整性并进行认证的技术,Message Authentication Code,简称MAC。
消息认证码的输入是任意长度的消息,一个发送者和接收者之间共享的密钥。输出是固定长度的MAC值。
2. 消息认证码的特点
消息认证码是一种与密钥相关联的单向散列函数。消息认证码需要预先共享密钥。
消息认证码也存在密钥配送问题,解决方案与对称密码相似:公钥密码,Diffie-Hellman,密钥分配中心等。
消息认证码可以判断消息是否被篡改,是否有人伪装成发送者发送了该消息。
3. 应用实例
SWIFT:国际组织,为国际银行间的交易保驾护航,使用了消息认证码技术。
IPsec:对消息的认证和完整性校验都通过消息认证码来完成。
SSL/TLS:通信内容的认证和完整性校验也使用了消息认证码。
4. 消息认证码的实现
消息认证码的实现方式有很多种。
使用单向散列函数实现
使用SHA-2之类的单向散列函数可以实现消息认证码,其中一种叫做HMAC。
使用分组密码实现
分组密码的密钥作为消息认证的共享密钥来使用,用CBC模式将消息全部加密。
将最后一个密文做MAC值。由于CBC模式的最后一个分组会受整个消息和密钥的双重影响,因此可以将它作为消息认证码。
5. 认证加密
认证加密是把对称密码和消息认证码结合,同时满足了机密性,完整性和认证三大功能。
步骤是先把明文进行对称加密,计算密文的MAC值,通过MAC值可以判断“这段密文是由知道明文和密钥的人生成的”。
GCM,一种认证加密方式,使用AES等128比特分组密码的CTR模式,并使用一个反复进行加法和乘法运算的散列函数计算MAC值。
专门用于消息认证码的GCM称为MMAC。
6. HMAC
使用单向散列函数构造消息认证码的方式,任何高强度的散列函数都可被用于HMAC,HMAC的H就是hash的意思。
HAMC的步骤:
ipad是将00110110这一比特序列不断反复循环,直到达到分组长度所形成的比特序列。
opad是将01011100这一比特序列不断反复循环 ,直到达到分组长度形成的比特序列。
7. 对消息认证码的攻击
重放攻击:截获消息和MAC值,不破解消息认证码,把正确的消息+MAC重复利用。
抵御重放攻击:
①序号:约定每次都对发送的消息赋予一个递增的编号,计算MAC时将序号也包含在消息里。
②时间戳:消息中包含当前的时间。
③nonce:通信之前,接收者先向发送者发一个一次性随机数nonce,发送者在消息中包含nonce并计算MAC值,每次通信nonce都会变化。
密钥推测攻击:
对单向散列函数的攻击一样,对消息认证码也可以进行暴力破解和生日攻击。
对消息认证码来说,不能根据MAC值推测出通信双方所使用的密钥。
8. 消息认证码不能解决的问题
对第三方证明:对于第三方,无法证明消息是对方生成的,而不是自己生成的。解决方法是数字签名。
防止否认:发送方对已经发送消息进行否认,消息认证码无法防止否认。解决方法是数字签名。