#声明:本文创作内容含代码均为个人创作所得,允许学习、传阅,不得用于商业用途#
消息认证码(MAC)是消息和密钥的函数,它是生成一个定长的值作为认证符,一般用于添加到消息尾部用于验证身份。
1. 背景
之前的文章我们介绍了hash函数及其意,且给出了几个算法的介绍和代码。消息摘要(HASH)作用于一个明文,生成一个定长值,消息认证码(MAC)也是作用于明文,生成一个定长的值,HASH可以确定明文是否被篡改,那为啥还需要MAC呢?
举个例子:张三和李四做生意,李四给张三发了条消息:明天晚上九点十字路口一手交钱一手交货。张三把这条消息做了hash,发现其值是和以前的hash值一样,说明消息没有改动过。可这条消息究竟是李四发给张三的,还是普利斯发给张三的呢?假如普利斯冒充李四给张三发了同样的消息:明天晚上九点十字路口一手交钱一手交货,张三要是去了,那就嗝屁了。怎么办,有什么方法能否知道这个消息是李四发的还是普利斯发的?这就需要MAC来解决。
2. 消息认证码用途
图1 简单MAC过程
如上图所以,我们利用一个function函数和密钥,对明文做类似hash的操作,生成定长的MAC值,然后附加到消息的后面,因为这个密码是私有密钥,也就是只有通信双方知道,那这个MAC值就是一个特定的值,其他人在不知道密钥的情况下,就无法得到特定的MAC值。由于直接发送明文和MAC是有风险的,因为明文被暴露在外面,那我们就需要对明文进行加密,然后再发送,要不然普利斯也可以截获消息,然后也去十字路口去逮捕你们。
图2. 发送与接收认证过程
如图2所示,如果发送方先用密钥1生成MAC值,然后附加在消息后面,为了隐藏明文,于是使用密钥2加密消息和MAC值,然后发送出去;接收方用共享的密钥2先解密得到明文和MAC值,然后再用共享密钥1计算收到的消息的MAC值,如果计算得到的MAC值和收到的MAC值一样,我们就可以认为消息确实来源于拥有密钥的发送方,于是我们认为这个消息是可信的。
下次补充以下内容