HMAC的图解

HMAC的图文详解

转载自:https://blog.****.net/chengqiuming/article/details/82822933

一、什么是HMAC

​ HMAC是一种使用单向散列函数来构造消息认证码的方法,其中HMAC中的H就是Hash的意思。

​ HMAC中所使用的单向散列函数并不仅限于一种,任何高强度的单向散列函数都可以被用于HMAC,如果将来设计出的新的单向散列函数,也同样可以使用。

使用SHA-1、SHA-224、SHA-256、SHA-384、SHA-512所构造的HMAC,分别称为HMAC-SHA1、HMAC-SHA-224、HMAC-SHA-384、HMAC-SHA-512。

二、HMAC运算步骤

1. 图例

HMAC的图解

2. 图解

​ 2.1 **填充

​ 如果**比单向散列函数分组长度要短,就需要在末尾填充0,直到其长度达到单向散列函数的分组长度为止。如果**比分组长度要长,则要用单向散列函数求出**的散列值,然后将这个散列值用作HMAC的**。

​ 2.2 计算填充后的**与ipad的XOR值

​ 将填充后的**与被称为ipad的比特序列进行XOR运算。ipad是将00110110这一比特序列不断循环反复直到达到分组长度所形成的比特序列,其中ipad的i是inner的意思。

​ XOR运算所得到的值,就是一个和单向散列函数的分组长度相同,且和**相关的比特序列。这里将这个比特序列称为ipadkey

​ 2.3 ipadkey与消息组合

​ 随后,将ipadkey消息组合,也就是将和**相关的比特序列(ipadkey)附加在消息的开头。

​ 2.4 计算散列值

​ 将2.3的结果输入单向散列函数,并计算出散列值。

​ 2.5 计算填充后的**与opad的XOR值

​ 将填充后的**与被称为opad的比特序列进行XOR运算,opad是将01011100这一比特序列不断循环反复直到达到分组长度所形成的比特序列,其中opad的o是outer的意思。

​ XOR运算所得到的结果也是一个和单向散列函数的分组长度相同,且和**相关的比特序列。这里将这个比特序列称为opadkey

​ 2.6 opadkey与散列值组合

​ 将2.4的散列值拼在opadkey后面。

​ 2.7 计算散列值

​ 将2.6的结果输入单向散列函数,并计算出散列值,这个散列值就是最终的MAC值。

通过上述流程可以看出,最后得到的MAC值,一定是一个和输入的消息以及**都相关的长度固定的比特序列。