【密码算法 之四】HMAC 浅析

1. 什么是HMAC

  HMAC是一种使用单向散列函数来构造消息认证码(MAC)的方法,其中H就代表了hash的意思。
  HMAC中所使用的单向散列函数并不是仅仅局限于一种,任何获得认证的高强度的单向散列函数都可以用于HMAC的计算。
  使用单向散列函数SHA-1、SHA-224、SHA-256、SHA-384、SHA-512等构造的HMAC,分别称为HMAC-SHA1、HMAC-SHA224、HAMC-SHA256、HMAC-SHA384、HAMC-SHA512

2. HMAC的工作步骤

在这里插入图片描述
  步骤1: 秘钥填充
  若秘钥的长度比单向散列函数的分组长度短,则需要在秘钥的末尾以0填充,直到其长度达到单向散列函数的分组长度为止。
  若秘钥的长度比单向散列函数的分组长度长,则首先通过单向散列函数计算出秘钥的散列值,然后将这个散列值用作HMAC的秘钥。

  步骤2: 填充后的秘钥与ipad进行“异或”处理
  ipad是将比特系列00110110(即0x36)不断循环直到达到单向散列函数分组长度的比特系列,其中ipad中的i是inner(内部)的意思。异或运算之后得到的值是一个与单向散列函数分组长度相同,且与“秘钥”相关的比特系列,我们将这一比特系列称为ipadkey。

  步骤3: 与消息组合
  将ipadkey与消息进行组合,即将ipadkey附加在消息的开头,如下表所示:

ipadkeymessage
  步骤4: 计算散列值(或hash值)
  将步骤3组织的数据输入到单向散列函数,计算出散列值hash1。

  步骤5: 填充后的秘钥与opad进行“异或”处理
  opad是将比特系列01011100(即0x5C)不断循环反复直到达到单向散列函数的分组长度所形成的比特系列,其中opad中的o是outer(外部)的意思。异或运算之后得到的值是一个与单向散列函数分组长度相同,且与“秘钥”相关的比特系列,我们将这一比特系列称为opadkey。

  步骤6: 与散列值组合
  将步骤4计算的散列值拼在opadkey的后面,如下表所示:

opadkeyhash1
  步骤6: 计算最终的散列值
  将步骤6的结果输入单向散列函数,计算得到的散列值,即为最终的MAC值。

3. 总结

(1)MAC值是一个与输入的消息、秘钥都相关的固定长度的比特系列;
(2)HMAC的计算涉及到两个特殊的key(ipadkey、opadkey);
(3)HMAC的MAC值的长度与选择的单向散列函数直接相关,单向散列函数的分组长度是多长,MAC值就多长。

各种算法的链接地址如下:
【密码算法 之零】对称算法(DES,、3DES、 AES、DM5、HMAC、CMAC、SHAxx、SM3、SM4),非对称算法(RSA、ECC、ECDSA、ECDH、SM2、SM9…)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值