密码学11消息认证码

12. 消息认证码(MAC)

  • 针对消息认证的可能攻击:泄露、通信量分析、伪装、内容(序列、计时)修改、发送(接收)方否认。
  • 定义消息认证码消息和密钥的函数,它生成一个定长的值作为认证符。
  • HMAC M A C = H ( S o ∣ ∣ H ( S i ∣ ∣ M ) ) MAC =H(S_o || H(S_i || M)) MAC=H(So∣∣H(Si∣∣M))
  • CMAC:消息填充、子密钥生成、消息加密、哈希值计算
  • 认证加密的概念:同时提供通信==保密性和认证(完整性)==的加密系统
  • CCM
    • 步骤
      • 消息分块与填充
      • 计算MAC
      • 加密
      • 计算认证标签
    • 特点:
      • 实现简单
      • 速度快
      • 安全性高
  • GCM
    • 特点
      • 加密速度快
      • 保证数据完整性
      • 安全性高
    • 步骤
      • 初始化向量和计数器
      • 加密
      • 计算认证标签
  • 密钥封装的概念及用途
  • 用哈希函数或消息认证码生成随机数的方式

12.1 消息认证要求

消息认证可以验证收到的消息确实来自发送方,并且未被修改


针对网络通信的攻击:

  • 泄露:消息透露给没有合适密钥的人或程序。
  • 通信量分析
    • 面向连接的应用:连接的频率和持续时间可被确定。
    • 面向连接或无连接的环境:双方的消息数量和长度可被确定。

(消息认证解决)

  • 伪装:欺诈源 向网络插入一条消息 给接收方用作欺诈应答

  • 消息修改

    • 内容修改:对消息内容的修改。
    • 序列修改:对消息序列修改。(插入、删除、重排)
    • 计时修改:对消息的延时或重放
  • 否认

    • 发送方否认(数字签名解决)
    • 接收方否认(数字签名以及协议)

12.2 消息认证码

算法基本思想: M A C = C ( K , M ) MAC = C(K,M) MAC=C(K,M) (K为共享密钥,M为消息,C为MAC函数)

算法步骤

  • A将发给B的消息和A、B之间的共享密钥K通过MAC函数 M A C = C ( K , M ) MAC = C(K,M) MAC=C(K,M) 生成MAC值
  • A将消息和MAC值明文(或加密后获得的密文)一并发送给B。
  • B接收到后用K对消息进行相同的函数 M A C = C ( K , M ) MAC = C(K,M) MAC=C(K,M) 得出结果。
  • 两次计算的MAC值相等,表明:
    • 消息未被篡改。
    • 发送方可信。
    • 消息顺序正确。

MAC函数加密函数区别:

  • MAC算法不要求可逆,加密算法要求可逆。
  • MAC函数为多对一函数。
  • 定义域为:任意长的消息。 值域:所有可能的MAC和密钥。

12.3 HMAC(Hash MAC)

使用单向散列函数构造消息认证码。(HMAC-SHA-256,HMAC-SHA-512)

安全性依赖于哈希函数的强度。

算法步骤

  • 密钥填充
    • 在密钥 K K K 左边填充 0,得到 b 位的 K + K^+ K+
    • $ S_i = K^+ \oplus ipad$ . ( i p a d ipad ipad00110110 重复 b/8 次的结果)
    • 将消息 M M M 附在 S i S_i Si 后面形成 ( S i ∣ ∣ M ) (S_i ||M) (Si∣∣M)
    • 通过哈希函数 H H H 得到 H ( S i ∣ ∣ M ) H(S_i || M) H(Si∣∣M)
    • $ S_o = K^+ \oplus opad$ . ( o p a d opad opad01011100 重复 b/8 次的结果)
    • 通过哈希函数 H H H 得到 H ( S o ∣ ∣ H ( S i ∣ ∣ M ) ) H(S_o || H(S_i || M)) H(So∣∣H(Si∣∣M))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


12.4 CMAC(Cipher MAC)

基于密码的消息认证码。(AES、DES、3DES)

算法步骤

  1. 消息填充:若消息长度不是块大小的整数倍,将额外数据填充到消息末尾,1000…000。
  2. 子密钥生成:使用密钥 K K K 和加密算法生成子密钥。
  3. 加密消息块:使用相应的子密钥和前一步得到的中间值 M i M_i Mi 加密。
  4. 计算哈希值:使用最后一个 M n M_n Mn 计算最终哈希值。

子密钥生成*:使用密钥 K K K 和加密算法生成子密钥。
3. 加密消息块:使用相应的子密钥和前一步得到的中间值 M i M_i Mi 加密。
4. 计算哈希值:使用最后一个 M n M_n Mn 计算最终哈希值。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值