irpas技术客

加密算法 之二 HMAC_KXue0703_hmac

网络投稿 3643

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值就多长。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #hmac #1 #2 #HMAC的工作步骤步