HMAC概述

1.简介

HMAC是指基于散列的消息认证码(Hash-based Message Authentication Code)。HMAC是Internet协议(IP)安全的强制安全实施方法,并在Internet上广泛使用的安全套接层(SSL)协议中使用。
HMAC的基本思想是复用MD5与SHA-1之类现有的消息摘要算法。因此,HMAC利用消息摘要算法,把消息摘要看成一个黑盒子,用共享秘***加密消息摘要,从而输出MAC,如下图所示:
HMAC概述

2.HMAC工作原理

HMAC的完整操作如下图所示:
HMAC概述
下面看看HMAC的内部工作原理,首先看看HMAC中使用的各个变量:
MD=使用的消息摘要(散列)函数
M=计算MAC的输入函数
L=消息M的块数
b=每块的位数
K=HMAC使用的共享对称**
ipad=字符串00110110重复b/8次
opad=字符串01011010重复b/8次
根据这些输入,可以如下步骤了解HMAC的操作。
2.1使K的长度的等于b
根据**K的长度,分三种情况:
(1)K<b:这是需要扩展**(K),使得K的长度等于b(初始消息块的位数)。为此,在K左边加上足够的0;例如,如果初始**长度为170位,而b为512,则增加342个0位到K左边,修改后的**继续称为K。
(2)K=b:这时不需要任何操作,直接转第2步。
(3)K>b:这是需要整理K,使K的长度等于b(初始消息块的位数)。为此,使K通过为该HMAC实例选择的消息摘要算法(H),从而得到**K,然后将其长度整理为b。
具体如下图所示:
HMAC概述
2.2K与ipad做异或运算
第一步的输出的K与ipad做异或运算,得到S1变量。
2.3将M添加到S1
下面取初始消息(M),将其添加到S1末尾(第二步求出)。
2.4 消息摘要算法
对第3步的输出(即S1与M的组合)采用选择的消息摘要算法(如MD5或SHA-1),这个操作的输出为H。
2.5K与opad做异或运算
第一步输出的K与opad做异或运算,得到S2变量。
2.6将H添加到S2
这一步取第4步求出的消息摘要H,将H添加到S2末尾。
2.7消息摘要算法
对第6步的输出(即S2与H的组合)采用选择的消息摘要算法(如MD5或SHA-1),这个操作的输出为最终MAC。

3.HMAC的缺点

首先计算初始消息的指印(消息摘要),然后用对称**加密,只有发送方和接收方知道这个**,从而使接收方可以肯定消息来自正确的发送方,没有在中途被篡改。但是存在一下问题:
(1)HMAC中假设只有发送方和接收方知道,存在**交换问题。
(2)即使解决了**交换问题,HMAC也不适用于多个接收方的情形。这是因为,为了用HMAC产生MAC,就要利用对称**,而对称**是双方共享的:一个发送方,一个接收方。
(3)接收方是如何知道消息来自发送方,而不是来自其他的接收方。所有接收方都知道这个对称**,因此很可能以发送方的身份发一个假消息,用HMAC准备这个消息的MAC,发送消息和MAC,就像合法的发送方一样,这是无法阻止和检测的。
(4)如何证明MAC是A产生还是B产生的,A和B都知道这个对称**,双方都有可能生成这个消息及其MAC。