消息认证概述
网络通信针对消息内容的攻击方法:
- 伪造消息
- 篡改消息内容
- 改变消息顺序
- 消息重放或者延迟
消息认证过程:
- 接收者确信消息未被改变
- 接收者确信消息来自所生成的发送者
- 消息中含有序列号,保证正确的消息顺序
消息认证的三种方式:
消息认证加密。对消息加密,以密文作为消息的认证标识。
消息认证码MAC。使用一个公开函数,加上密钥,为消息产生一个数据块,作为消息的认证标识并附加到消息中一起传输。
哈希方法。使用一个公开函数,将消息映射到一个固定长度的散列值,并作为消息认证标识附加到消息中一起传输。
数字签名。基于非对称密码技术的数字签名将签名与被签文件绑定,提供了不可依赖不可伪造,容易验证的功能。
MAC 消息认证码
消息验证码有三部分算法(G:密钥生成算法;S:签名算法;V:消息验证算法)
- 基本结构:
MAC方法双方使用一个共享的密钥,为目标消息生成一个固定的数据块,并加入到消息中,该数据块被称为消息认证码,或者是密码校验和。
MAC函数类似于加密函数,但不需要 可逆性,因此收到攻击的弱点在数学上比加密算法要少。
- 使用MAC的理由:
- 主要提供真实性。
- 与加密算法比较,代价算法较小。
- 认证和保密函数分离较为灵活
- 很多信息需要真实性而不是保密性。
- 模型
- 只用于消息认证的MAC模型
- 用于与明文相关的消息认证和保密性的MAC模型
- 用于与密文相关的消息认证和保密性的MAC模型
- 与数字签名都用于消息认证。MAC是通讯双方共享一个私有密钥。而数字签名则是利用公钥密码技术实现。
##HASH
输入变长的消息,经过hash输出定常的散列值。
哈希函数的一些基本要求
- 能够映射任意长的分组数据
- 产生定长的哈希结果
- 可计算,易于计算
- 单向性
- 抗碰撞(强弱)
分类
按规避碰撞能力分:
- 强无碰撞
- 弱无碰撞
按是否需要密钥分:
不带密钥的hash
带密钥的hash
生日攻击理论:计算哈希碰撞的概率和计算量之间的关系
hash函数通用模型
由merkle提出的模型结构:
- 将消息M划分为一些固定长度的块Yi
- 最后一块padding并使其包含消息M的长度
- 设定初始值CV0
- 采用压缩函数f,CVi = f(CVi-1, Yi-1)
- 最后一个CVi为hash值。
MD5 算法
信息摘要5算法。确保信息传输的完整性和一致性。
使用小端模式,输入不定长度信息,以512bit进行分组,生成4个32bit的数据,最后联合输出固定128bit的信息摘要。
小端模式,低字节放在低地址处。
算法逻辑
- 填充
- 在长度为 $K$ bits的原始消息数据尾部填充长度为 $P$ bits的标识$100…0 。$ $ 1 \le P \le 512$ ,使得填充后的消息位数为$K + P \equiv 448(mod \, 512)$。
- 注意:当$K \equiv 448 (mod\,512)$时,$P = 512$。
- 向上述填充好的消息尾部附加$K$值得低64位,即$(K \, mod \, 2^{64})$。最后得到一个长度位数为$K + P + 64 \equiv 0 (mod \, 512)$。
- 在长度为 $K$ bits的原始消息数据尾部填充长度为 $P$ bits的标识$100…0 。$ $ 1 \le P \le 512$ ,使得填充后的消息位数为$K + P \equiv 448(mod \, 512)$。
- 分块
- 将填充后得消息结果分割为$L$ 个$512-bit$分组,记为:$Y_0, Y_1, …, Y_{L-1}$
- 分组结果表示为$N$个$32-bit$字记为$M_0, M_1, …, M_{N-1}, N = L×16 $
- 初始化
- 初始化一个$128-bit$ 的MD缓冲区,记为$CV_q$,表示成4个$32-bit$寄存器$(A,B,C,D)$; $CV_0 = IV$。迭代在MD缓冲区进行,最后一步的$128-bit$输出即为算法的结果。