首页 理论教育 MAC的构造方法优化:简单粗暴?还是玄学之术?

MAC的构造方法优化:简单粗暴?还是玄学之术?

时间:2023-07-02 理论教育 版权反馈
【摘要】:通常,MAC的构造方法主要有两种类型:一种是使用分组密码体制构造MAC;另一种是使用带密钥的Hash函数构造MAC。用一个初始向量IV作为密文分组的初始值C0,C0取值为0,基于DES的CBC-MAC的具体构造过程如下。图8-3 基于DES的CBC-MAC构造2.HMAC标准的Hash函数并不依赖于密钥,不能直接作为MAC函数。HMAC由Bellare等人于1996年提出,它就是一种带密钥的Hash函数构造方案,于1997年作为RFC 2104标准发表。

MAC的构造方法优化:简单粗暴?还是玄学之术?

通常,MAC的构造方法主要有两种类型:一种是使用分组密码体制构造MAC;另一种是使用带密钥的Hash函数构造MAC。两者的区别在于前者使用了与Hash函数相同的技术,而后者则直接调用现成的Hash函数。

1.CBC-MAC

利用分组加密体制的密文分组链接模式(CBC)构造MAC函数,其中使用最广泛的是基于DES分组加密体制的数据认证算法(Data Authentication Algorithm,DAA),它在联邦信息处理标准(Federation Information Processing Standard,FIPS)的出版物FIPS PUB 113和ANSI标准X9.17中进行了描述。

数据认证算法构建在DES的CBC模式下,如图8-3所示。在CBC模式中,每个明文分组mi在进入DES加密变换之前,要与前一个密文分组Ci-1进行异或。用一个初始向量IV作为密文分组的初始值C0C0取值为0,基于DES的CBC-MAC的具体构造过程如下。

1)对消息M进行64bit的长度分组,得到mii=1,2,…,L),最后的一个分组若不足64bit,则以0补齐成64bit。

2)采用DES的CBC模式加密分组,密钥K的长度为56bit。

3)抛弃加密的中间结果,只将最后一组密文CL(或最后一组密文CL的左边n(16≤n≤64)bit作为原始消息的MAC。

978-7-111-37285-1-Chapter08-16.jpg

图8-3 基于DES的CBC-MAC构造

2.HMAC

标准的Hash函数并不依赖于密钥,不能直接作为MAC函数。一般的做法是通过某种方式将密钥和现有的Hash函数结合起来,形成带密钥的Hash函数。目前,MAC的两种构造方法中,以Hash函数为核心构成的带密钥的Hash函数应用要更广泛些,主要是因为:Hash函数的执行速度通常比分组加密算法要快,以Hash函数为核心构造MAC,其效率更高;Hash函数的出口限制没有加密算法严格,因而更容易推广。

HMAC(Keyed-Hashing for Message Authentication Code)由Bellare等人于1996年提出,它就是一种带密钥的Hash函数构造方案,于1997年作为RFC 2104标准发表。HMAC使用不同的Hash函数,可以得到不同的HMAC,例如选用MD5时的HMAC记为HMAC-MD5,选用SHA-1时的HMAC记为HMAC-SHA1。如今,HMAC已被作为ANSI、IETF、ISO和NIST的标准,并广泛应用于因特网协议中,如IPSec、SSL中就使用了HMAC。

HMAC算法的实现框图如图8-4所示。图中的参数说明如下:

H是算法中嵌入的Hash函数,如MD5、SHA-1;

M为HMAC的输入消息,mii=1,2,…,L)是M的第i个分组,即将消息M划分为L个分组,每个分组为bbit;(www.xing528.com)

K为密钥,当K的长度大于bbit时,用HK)值替代原来的K,即length(K)>b,则KHK),当K的长度小于bbit时,将K的右边填充0,使其成为长度为bbit,记为K+,即length(K)<b,则K+←(K‖00…0),如果K的长度刚好等于bbit,则不作处理;

●ipad为00110110(即0x36)重复b/8次后的序列,opad为01011100(即0x5C)重复b/8次后的序列。

978-7-111-37285-1-Chapter08-17.jpg

图8-4 HMAC算法框图

HMAC算法的具体执行步骤可描述如下:

1)将K+与ipad逐比特异或得到bbit的分组Si,即计算Si=K+⊕ipad。

2)把输入消息M=m1m2mL附加在Si的右端,得到SiM

3)将SiM作为Hash函数H的输入,得到Lbit的输出HSiM)。

4)将K+与opad逐比特异或得到bbit的分组S0,即计算S0=K+⊕opad。

5)将第3)步得到的HSiM)填充到bbit后附加在S0的右端。

6)将第5)步处理后的比特流作为Hash函数H的输入,得到Lbit的输出即为消息M的消息认证码HMACKM)。

此执行步骤可以简单描述为:

HMACKM)=H[(K+⊕opad)‖H[(K+⊕ipad)‖M]]

其实,也可以对第6)步中最后的输出截取左边若干位作为消息认证码。在RFC 2104中推荐截取长度不少于Hash输出长度的一半,且不少于80bit。例如,使用MD5实现的HMAC-MD5-128取输出的128bit作为MAC;使用SHA-1实现的HMAC-SHA1-160算法,则使用160bit作为输出结果。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈