消息认证概述

网络通信针对消息内容的攻击方法:

  1. 伪造消息
  2. 篡改消息内容
  3. 改变消息顺序
  4. 消息重放或者延迟

消息认证过程:

  1. 接收者确信消息未被改变
  2. 接收者确信消息来自所生成的发送者
  3. 消息中含有序列号,保证正确的消息顺序

消息认证的三种方式:

  1. 消息认证加密。对消息加密,以密文作为消息的认证标识。

  2. 消息认证码MAC。使用一个公开函数,加上密钥,为消息产生一个数据块,作为消息的认证标识并附加到消息中一起传输。

  3. 哈希方法。使用一个公开函数,将消息映射到一个固定长度的散列值,并作为消息认证标识附加到消息中一起传输。

  4. 数字签名。基于非对称密码技术的数字签名将签名与被签文件绑定,提供了不可依赖不可伪造,容易验证的功能。

MAC 消息认证码

消息验证码有三部分算法(G:密钥生成算法;S:签名算法;V:消息验证算法)

  • 基本结构:

MAC方法双方使用一个共享的密钥,为目标消息生成一个固定的数据块,并加入到消息中,该数据块被称为消息认证码,或者是密码校验和。

MAC函数类似于加密函数,但不需要 可逆性,因此收到攻击的弱点在数学上比加密算法要少。

  • 使用MAC的理由:
    • 主要提供真实性。
    • 与加密算法比较,代价算法较小。
    • 认证和保密函数分离较为灵活
    • 很多信息需要真实性而不是保密性。
  • 模型
    • 只用于消息认证的MAC模型
    • 用于与明文相关的消息认证和保密性的MAC模型
    • 用于与密文相关的消息认证和保密性的MAC模型
  • 与数字签名都用于消息认证。MAC是通讯双方共享一个私有密钥。而数字签名则是利用公钥密码技术实现。

##HASH

输入变长的消息,经过hash输出定常的散列值。

哈希函数的一些基本要求

  1. 能够映射任意长的分组数据
  2. 产生定长的哈希结果
  3. 可计算,易于计算
  4. 单向性
  5. 抗碰撞(强弱)

分类

  • 按规避碰撞能力分:

    • 强无碰撞
    • 弱无碰撞
  • 按是否需要密钥分:

    • 不带密钥的hash

    • 带密钥的hash

生日攻击理论:计算哈希碰撞的概率和计算量之间的关系

hash函数通用模型

由merkle提出的模型结构:

  1. 将消息M划分为一些固定长度的块Yi
  2. 最后一块padding并使其包含消息M的长度
  3. 设定初始值CV0
  4. 采用压缩函数f,CVi = f(CVi-1, Yi-1)
  5. 最后一个CVi为hash值。

MD5 算法

信息摘要5算法。确保信息传输的完整性和一致性。

使用小端模式,输入不定长度信息,以512bit进行分组,生成4个32bit的数据,最后联合输出固定128bit的信息摘要。

小端模式,低字节放在低地址处。

算法逻辑

  1. 填充
    1. 在长度为 $K$ bits的原始消息数据尾部填充长度为 $P$ bits的标识$100…0 。$ $ 1 \le P \le 512$ ,使得填充后的消息位数为$K + P \equiv 448(mod \, 512)$。
      1. 注意:当$K \equiv 448 (mod\,512)$时,$P = 512$。
    2. 向上述填充好的消息尾部附加$K$值得低64位,即$(K \, mod \, 2^{64})$。最后得到一个长度位数为$K + P + 64 \equiv 0 (mod \, 512)$。
  2. 分块
    1. 将填充后得消息结果分割为$L$ 个$512-bit$分组,记为:$Y_0, Y_1, …, Y_{L-1}$
    2. 分组结果表示为$N$个$32-bit$字记为$M_0, M_1, …, M_{N-1}, N = L×16 $
  3. 初始化
    1. 初始化一个$128-bit$ 的MD缓冲区,记为$CV_q$,表示成4个$32-bit$寄存器$(A,B,C,D)$; $CV_0 = IV$。迭代在MD缓冲区进行,最后一步的$128-bit$输出即为算法的结果。