消息认证码
一 消息认证要求 在网络环境中,可能有下述攻击: 1.消息透露给没有合法密钥的任何人或程序。 2.传输分析, 分析通信双方的通信方式。在面向连接的应用中,确定连接的频率和持续时间;在面向连接的应用中,确定双方的消息数量和长度。 3.伪装,欺诈源向网络中插入一条消息。如攻击这产生一条消息并声称这条消息来自某合法实体,或者非消息接收方发送的关于收到或未收到消息的欺诈应答。 4.内容修改,对消息的内容修改,包括插入、删除、转换和修改。 5.顺序修改,对通信双方消息顺序的修改,包括插入、删除和重新排序。 6.计时修改,对消息的延时和重播。在面向连接的应用中,整个消息序列可能是前面某合法消息序列的重播,也可能是消息序列中的一条消息被延时或重播;在面向无连接的应用中,可能是一条消息(如数据报)被延时或重播。 7.发送方否认,发送方否认发送过某消息。 8.接收方否认,接收方否认接收到某消息。
对付前两种攻击的方法属于消息保密性范畴;对付(3)到(6)种攻击的方法一般称为消息认证;对付(7)种攻击方法的属于数字签名。一般而言,数字签名方法也能够抗第(3)至第(6)种攻击种的某些或全部攻击;对付第(8)种攻击需要使用数字签名和为抗此种攻击而设计的协议。 归纳起来,消息认证就是验证所收到的消息确实是来自真正的发送方,且是未被修改的消息,它也可验证消息的顺序和及时性。
二 消息认证码 消息认证码(英语:Message authentication code,缩写为MAC),也是一种认证技术,它利用密钥来生成一个固定长度的短数据块,并将该数据块附加在消息之后。在这种方法中,假定通信双方,比如A和B,共享密钥K。若A向B发送消息时,则A计算MAC,它是消息和密钥的函数,即MAC=C(K,M) 其中,M为输入消息;C为MAC函数;K为共享的密钥;MAC为消息认证码。 消息和MAC一起被发送接收方。接收方对收到的消息用相同的密钥K进行相同的计算,得出新的MAC,并将接收到的MAC与其计算出的MAC进行比较。
三 基于HASH函数的MAC:HMAC 实现MAC的一个选择就是使用密码学哈希函数作为基本块,比如SHA-1.HMAC方案由一个内部HASH和一个外部HASH组成,如图所示
H为嵌入的HASH函数(如MD5,SHA-1, RIPEMD-160) IV为HASH函数输入的初始值 M为HMAC的消息输入(包括由嵌入HASH函数定义的填充位) xi为M的第i个分组,1≤i≤n n为分组数 b为每一分组包含的位数 K为密钥;建议密钥长度≥n。若密钥长度大于b,则将密钥的hash函数的输入,来产生一个n位的密钥。 K+为使K为b位长而在K左边填充0后的结果 ipad是将00110110这一比特序列(16进制的36)重复b/8次的结果 opad是将01011100这一比特序列(16进制的5C)重复b/8次的结果 算法描述如下: 在K边填充0,得到b位K+(例如,若K是160位,b=512,则在K中加入44个字节的0) K+与ipad执行异或运算(位异或)产生b位的分组Si。 将M附于Si后。 将H作用于步骤(3)得出的结果。 K+与opadipad执行异或运算(位异或)产生b位的分组S0 将步骤(4)的HASH码附于S0后。 将H作用于步骤(6)所得出的结果,并输出该函数值。 注意,K与ipad异或后,其信息位有一半发生了变化;同样K与opad异或后信息位另一半也发生了变化,这样通过将Si与S0传递给hash算法中的压缩函数,我们可以从K伪随机地产生出两个密钥。 HMAC多执行了三次HASH压缩函数(对Si、S0和内部的hash产生的分组),但是对于长消息,HMAC和嵌入的HASH函数执行时间大致相同。
四 基于分组密码的消息认证码(CMAC,CBC-MAC) 基于分组密钥的消息认证码,对AES,3DES都是适用的 计算方式如下图所示:
首先,当消息长度是分组长度b的n倍时,我们考虑CMAC的运算情况。对AES, b=128,对于3DES,b=64。这个消息被划为n组(M1,M2,M3…,Mn)。算法使用k位的加密密钥K和b位的常数K1。对于AES,密钥长度k为128位,192位或256位,对于3DES,密钥长度为112位或168位 如果消息不时密文分组长度的整数倍,则最后分组的右边(低有效位)填充一个1和若干个0使得最后得分组长度为b。除了使用一个不同的b位密钥K2代替K1外,其他一样。 计算子密钥K1和K2使用如下算法这相当于在有限域 GF(2^b) 中乘以 x 和 x2)。让 ? 表示标准的左移运算符,⊕ 表示按位互斥,或者: 1.计算一个临时变量值 K0 = E(k,0^b) 2.如果msb(K0) = 0, 那么K1 = K0 ? 1, 否则K1 = (K0 ? 1) ⊕ C; 这里C 是某个常数,仅取决于 b。(具体来说,C 是字典序第一个不可约 b 次二元多项式的非前导系数,其中 1 的个数最少:0x1B 表示 64 位,0x87 表示 128 位,0x425 表示 256 位块。) 3.如果msb(K1) = 0,那么K2 = K1 ? 1,否则K2 = (K1 ? 1) ⊕ C。 4.返回 MAC 生成过程的密钥 (K1, K2)。
|