MAC学习笔记
1. MAC的基本思想
消息验证码,利用密钥来生成一个固定长度的短数据块,并将该数据块附加到消息之后。
假定通信双方比如A和B,共享密钥K。若A和B发送消息时,则A计算MAC,它是消息和密钥的函数,
即MAC=C(K,M)
其中,M时输入信息,C时MAC函数,K时共享的密钥,MAC是消息验证码。
消息和MAC一起被发送给接收方。接收方对收到的消息用相同的密钥K进行相同的计算,得出新的MAC,并将接收到的MAC与其计算出的MAC进行比较,如果我们假定只有收发双方指导该密钥,那么若接收到的MAC与计算得到的MAC相等,则:
1. 接收方相信消息未被篡改.
2. 接收方确认消息来自真正的发送方,
3. 如果消息中含有序列号,则接收方确认消息顺序正确;
图中显示了三种常见的MAC基本原理,第一种只提供认证功能,不进行加密;第二种对明文进行计算MAC,然后对明文加MAC消息进行加密;第三种先对原始消息进行加密,再进行认证加密。最常用的方法是第二种
2.MAC的安全性分析
我们假定MAC由如下函数产生:
T=MAC(K,M)
其中M是一个变长消息,K是收发双方共享的密钥,MAC(K,M)是定长的认证符。在假定或已知消息正确时,将MAC附加于发送方的消息之后;接收方可以通过计算MAC来认证该消息。
MAC函数应具有的性质:
1. 若攻击者已知M和MAC(K,M),则他构造满足MAC(K,M‘)=MAC(K,M)的消息M’在计算上是
不可行的。翻译成人话就是:攻击者知道消息M和验证消息MAC,消息可以是加密的也可以是不加密
的,但是不知道密钥,也不知道MAC函数,要尝试密钥和MAC函数,暴力尝试M‘得到M是超出计算能力
的;
2. MAC(K,M)应是均匀分布的,即对任何随机选择的消息M和M’,MAC(K,M)=MAC(K,M‘)的
概率是2^-n,其中n是MAC的位数。这种情况是为了阻止基于选择明文的穷举攻击,即攻击者不知道
K,但是他知道MAC函数,能对消息产生MAC,而M是明文,是公开的,那么攻击者只要对各种消息计
算MAC,直到与给定的MAC相同的消息为止。因为一般假定K的长度k>n,所以通过消息去破解比通过
密钥破解某一次验证要快,平均需要2^n-1步才能找到具有给定MAC的消息。
3. 设M‘是M的某个已知的变换,即M’=f(M),例如f可能是将M的一位或多位取反,要求
Pr[MAC(K,M)=MAC(K,M')]=2^-n。这一条是要求认证算法对消息的某部分或某些位不应比其他部分或位
更弱,否则,已知M和MAC(K,M)的攻击者可能会对M中已知的"弱点"进行修改,比如一位或多位取
反,然后再计算MAC,导致破解更加容易。
3.基于Hash的MAC:HMAC
3.1HMAC特点
HMAC,效率高、应用广、性质好、安全性强强的一种利用Hash函数实现MAC的方案。
HMAC