读书笔记

图解密码技术 Chapter8 消息认证码

本章学习的内容

消息认证码可以确认自己受到的消息是否就是发送者的本意

消息认证码

什么是消息认证码

消息认证码(Message Authentication Code)用于确认完整性并进行认证的技术。检查MAC。

消息认证码的长度的消息和一个发送者与接受者共享的秘钥,并且输出固定长度的数据。

计算MAC必须有共享秘钥,没有共享秘钥就无法计算MAC值。

消息认证码可以看做一种与秘钥相关联的单项散列函数。

消息认证码的使用步骤

通过共享秘钥计算消息认证码,接受者进行验证。

消息认证码的秘钥配送问题

由于都需要共享秘钥,所以也存在配送问题。

我们需要用对称密码一样使用一些共享秘钥的方法:

  • 公钥密码
  • Diffie-Hellman秘钥交换
  • 秘钥分配中心

消息认证码的应用实例

消息认证码的实现方法

使用单项散列函数实现

这类实现方法称为HMAC

使用分组密码实现

将分组秘钥作为小米认证码的共享秘钥来使用,用CBC模式来将消息全部加密。消息认证码不需要解密,因此将除了最后一组以外的秘闻丢弃,并且最后一组作为MAC值。CBC模式的最后一个分组会受到整个信息以及秘钥的双重影响,所以可以用作消息认证码。

其他实现方法

流密码和公钥密码也可以实现消息认证码

认证加密

认证加密是将对称密码和消息认证码相结合,同事满足机密性、完整性以及认证三大功能的机制。

Encrypt-then-MAC:先用对称密码将铭文加密,然后计算密文的MAC值,可以防止攻击者Mallory发送任意伪造的密文,套取信息的攻击。

Encrypt-and-MAC:将铭文用对称密码加密,然后对明文计算MAC值

MAC-then-Encrypt:先计算明文的MAC值,然后将明文和MAC值同事用对称密码加密

GCM与GMAC

GCM:使用AES等128比特分组密码的CTR模式,使用反复加法和乘法计算的散列函数计算MAC值。

专门用于消息认证码的GCM称为GMAC。

HMAC详细介绍

HMAC是一种使用单项散列函数来构造消息认证码的方法。

HMAC的步骤

秘钥填充

如果秘钥比单项散列函数分组要短,则在末尾填充0。如果秘钥比分组长度要长,用单项散列函数求出秘钥的散列值,然后散列值用于HMAC的秘钥。

填充后的秘钥与ipad的XOR

ipad是将00110110这个比特序列反复直到达到分组长度形成的比特序列。XOR计算完后的值为ipadkey

与消息组合

ipadkey与消息组合,附加在消息开头

计算散列值

计算组合后的散列值

填充后的秘钥和opad的XOR

opad是001011100反复直到达到分组长度的比特序列

XOR的结果是opadkey

与散列值组合

与上面的散列值组合

计算散列值

计算最后的散列值

对消息认证码的攻击

重放攻击

通过反复将消息发送来发动攻击。

我们可以用以下方法来防御:

  • 序号:对每次发送的消息赋予递增的序号,需要每次通信记录最后一个消息的序号
  • 时间戳:附带时间戳,由于考虑通信的延迟,所以有一个缓冲区间,存在一定风险
  • nonce:每次通信前先向发送者发送一个一次性的随机数,通信数据量会增加

秘钥推测攻击

消息认证码也可以进行暴力破解,以及生日攻击。对于消息认证码来说,应该保证不能根据MAC值推测出通信双方使用的秘钥。

生成秘钥的时候也需要使用高强度的密码学安全的伪随机数生成器。

消息认证码无法解决的问题

消息认证码无法解决对第三方证明以及防止否认的问题

第三方证明

第三方需要认证MAC值,发送消息的人可能是发送者,也可能是接受者,所以无法说明这个消息到底是接收到的还是伪造的。

防止否认

发送者可以说这条消息并不是自己生成的,也有可能是接受者自己生成的,产生否认的情况。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注