消息认证码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/82822890

一 点睛

消息认证码可以确认自己收到的消息是否就是发送者的本意,也就是说,使用消息认证码可以判断消息是否被篡改,以及是否有人伪装成发送者发送该消息。

二 故事——汇款是正确的吗

Alice和Bob分别是两家银行,Alice银行通过网络向Bob银行发送了一条汇款请求,Bob银行收到的请求内容是:

从账户A-5374向账户B-6671汇款1000万元

当然,Bob银行所收到的汇款请求内容必须与Alice银行发送的内容是完全一致的。如果主动攻击者Mallory在中途将Alice银行发送的汇款请求进行了篡改,那么Bob银行就必须要能够识别出这种篡改,否则如果Mallory将收款账号改成了自己的账号,那么1000万元就会被盗走。

另外,这条汇款请求到底是不是Alice银行发送的呢?有可能Alice银行根据就没发送过汇款请求,而是主动攻击者Mallory伪装成Alice银行发送的。如果汇款请求不是来自Alice银行,那么就绝对不能执行汇款。

现在需要关注的问题是汇款请求的“完整性”和“认证”这两个性质。

消息的完整性,就是“消息没有被篡改”这一性质,完整性也叫一致性。如果能够确认汇款请求的内容与Alice银行所发出的内容完全一致,就相对于确认了消息的完整性,也就意味着消息没有被篡改。

消息的认证指的是“消息来自正确的发送者”这一性质。如果能够确认汇款请求确实来自Alice银行,就相当于对消息进行了认证,也就意味着消息不是他人人伪装成发送者所发出的。

三 什么是消息认证码

消息认证码是一种确认完整性并进行认证的技术,取三个单词的首字母,简称MAC.

消息认证码的输入包括任意长度的消息和一个发送者和接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为MAC值。

根据任意长度的消息输出固定长度的数据,这一点和单向散列函数很类似。但是单向散列函数中计算散列值时不需要密钥,相对地,消息认证码则需要使用发送者和接收者之间共享的密钥。

要计算MAC必须持有共享密钥,没有共享密钥的人就无法计算MAC值,消息认证码整数利用这一性质完成认证的。此为,和单向散列函数的散列值一样,哪怕消息中发生1比特的变化,MAC值也会产生变化,消息认证码正是利用这一性质来确认完整性的。

消息认证码有很多实现方法,可以暂时这样理解:消息认证码是一种与密钥相关联的单向散列函数。

单向散列函数和消息认证码的比较:

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/82822890