前言
消息鉴别就是保证信息完整性、真实性的一种技术。这时候,有的同学就会问了,使用报文摘要不就能够保证信息的完整性了吗。在这里,需要强调的一点是,报文摘要只是属于消息鉴别技术中的一种。我们今天这一节要介绍另一种消息鉴别技术,就是消息鉴别码。
消息鉴别码MAC
这里的MAC指的是message authentication code,指的是消息鉴别码,不是指的网卡的物理地址MAC,这里一定要分清楚。
那么,消息鉴别码是怎么生成的呢?
其实和报文的摘要是类似的,也是一串固定长度的值。但是,报文摘要是可以把任意长度的报文,计算成一个固定长度的报文摘要。而消息鉴别码是由消息和首发双方共享的**做一个函数运算,这个函数我们统称为MAC函数,产生一个定长的码。
另外我们需要知道,MAC函数和报文摘要的产生原理有一个共同点,它们都是单向、不可逆的。我们的加密算法加密过的数据,到了接收方可以进行一个逆推,解密还原出数据。但是如果只得到了消息鉴别码,是无法推出原数据的。
基于MAC的消息认证方案
发送方把消息明文和**K一起进行MAC函数运算,得到MAC值,然后附加在明文后面。接收方得到以后,把消息明文连同**K一起,再次进行MAC函数运算,得到MAC值,然后用接收方自己算出来的MAC值和发送方发过来的MAC值进行对比,根据对比结果一致不一致,就可以知道消息在传输过程中有没有被篡改。
但是,我们会发现,虽然保证了数据的完整性,但是这样做也是很危险的,因为这整个过程都是在明文传输。就算有个坏人不给你篡改消息内容,他就静静的看着你,也能看到你的隐私。所以,我们要想办法,让数据加密和消息认证结合起来,保证数据保密性。请看下图:
这种方案是直接把消息明文连同消息鉴别码一起加密。
还有一种方案是,可以只把明文进行加密,然后把密文和MAC值一起传递给接收方,因为MAC值是单向、不可逆的,所以这样做也不是不安全的。