* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 算法的运行过程可描述如下: ① K的左边填充0以产生一个b比特长的K+ (例如K的长为160比特,b=512,则需填充44个零字节0x00)。 ② K+与ipad 逐比特异或以产生b比特的分组Si。 ③ 将M链接到Si后。 ④ 将H作用于步骤③产生的数据流。 ⑤ K+与opad逐比特异或,以产生b比特长的分组S0。 ⑥ 将步骤④得到的杂凑值链接在S0后。 ⑦ 将H作用于步骤⑥产生的数据流并输出最终结果。 注意,K+与ipad逐比特异或以及K+与opad逐比特异或的结果是将K中的一半比特取反,但两次取反的比特的位置不同。而Si和S0通过杂凑函数中压缩函数的处理,则相当于以伪随机方式从K产生两个密钥。 在实现HMAC时,可预先求出下面两个量 (见图6.12,虚线以左为预计算): 其中f(cv,block)是杂凑函数中的压缩函数,其输入是n比特的链接变量和b比特的分组,输出是n比特的链接变量。这两个量的预先计算只在每次更改密钥时才需进行。事实上这两个预先计算的量用于作为杂凑函数的初值IV。 图6.12 HMAC的有效实现 基于密码杂凑函数构造的MAC的安全性取决于镶嵌的杂凑函数的安全性,而HMAC最吸引人的地方是它的设计者已经证明了算法的强度和嵌入的杂凑函数的强度之间的确切关系,证明了对HMAC的攻击等价于对内嵌杂凑函数的下述两种攻击之一: ① 攻击者能够计算压缩函数的一个输出,即使IV是随机的和秘密的。 ② 攻击者能够找出杂凑函数的碰撞,即使IV是随机的和秘密的。 6.5.3 HMAC的安全性 在第一种攻击中,可将压缩函数视为与杂凑函数等价,而杂凑函数的n比特长IV可视为HMAC的密钥。对这一杂凑函数的攻击可通过对密钥的穷搜索来进行,也可通过第Ⅱ类生日攻击来实施,通过对密钥的穷搜索攻击的复杂度为O(2n),通过第Ⅱ类生日攻击又可归结为上述第二种攻击。 第二种攻击指攻击者寻找具有相同杂凑值的两个消息,因此就是第Ⅱ类生日攻击。对杂凑值长度为n的杂凑函数来说,攻击的复杂度为O(2n/2)。因此第二种攻击对MD5的攻击复杂度为O(264),就现在的技术来说,这种攻击是可行的。 但这是否意味着MD5不适合用于HMAC?回答是否定的,原因如下:攻击者在攻击MD5时,可选择任何消息集合后脱线寻找碰撞。由于攻击者知道杂凑算法和默认的IV,因此能为自己产生的每个消息求出杂凑值。然而,在攻击HMAC时,由于攻击者不知道密钥K,从而不能脱线产生消息和认证码对。 所以攻击者必须得到HMAC在同一密钥下产生的一系列消息,并对得到的消息序列进行攻击。对长128比特的杂凑值来说,需要得到用同一密钥产生的264个分组(273比特)。在1Gbit/s的链路上,需250000年,因此MD5完全适合于HMAC,而且就速度而言,MD5要快于SHA作为内嵌杂凑函数的HMAC。 思考 若HMAC中的Hash发生碰撞,HMAC是否会发生碰撞? 答:取决于IV是否改变。 课后思考与练习题(P184-185) √6-2 有很多杂凑函数是由CBC模式的分组加密技术构造的,其中的密钥取为消息分组。例如将消息M分成分组M1,M2,…,MN,H0=初值,迭代关系为Hi=EMi(Hi-1) Hi-1(i=1,2,…,N),杂凑值取为HN,其中E是分组加密算法。 (1) 设E为DES,第3章习题1已证明如果对明文分组和加密密钥都逐比特取补,那么得到的密文也是原密文的逐比特取补,即如果Y=DESK(X),那么Y′=DESK′(X′)。利用这一结论证明在上述杂凑函数中可对消息进行修改但却保持杂凑值不变。 (2) 若迭代关系改为Hi=EHi-1(Mi) Mi,证明仍可对其进行上述攻击。 √6-3 考虑用公钥加密算法构造杂凑函数,设算法是RSA,将消息分组后用公开钥加密第一个分组,加密结果与第二个分组异或后,再对其加密,一直进行下去。设一消息被分成两个分组B1和B2,其杂凑值为H(B1,B2)=RSA(RSA(B1) B2)。证明对任一分组C1可选C2,使得H(C1,C2)=H(B1,B2)。证明用这种攻击法,可攻击上述用公钥加密算法构造的杂凑函数。 √ 6-4 在图6.10中,假定有80个32比特长的字用于存储每一Wt,因此在处理消息分组前,可预先计算出这80个值。为节省存储空间,考虑用16个字的循环移位寄存器,其初值存储前16个值(即W0,W1,
原创力文档

文档评论(0)