消息认证码(message authentication code)MAC

消息认证码,或者MAC,用于检测对消息的篡改。加密使Eve不能够获取消息的内容,但不能防止Eve对消息进行操作,这是就需要消息认证码。

"消息认证码 — 消息被正确传送了吗?

与加密消息一样,MAC也使用一个秘钥K,Alice和Bob知道秘钥但Eve不知道。当Alice向Bob发送消息m时,不仅仅发送消息m,而且还发送一个由MAC函数计算得到的MAC值。Bob检验即接受到消息的MAC值与收到的MAC值是否相等,如果不匹配则丢失这个没能通过认证的消息。由于Eve不知道秘钥K,所以不能为篡改后的消息找得到正常的MAC值,从而保证Eve不能对消息进行操纵。

在这里插入图片描述

在消息认证码中,需要发送者和接收者之间共享密钥,而这个密钥不能被主动攻击者Mallory获取。如果这个密钥落入Mallory手中,则Mallory也可以计算出MAC值,从而就能够自由地进行篡改和伪装攻击,这样一来消息认证码就无法发挥作用了。

发送者和接收者需要共享密钥,这一点和我们介绍的对称加密很相似。实际上,对称加密的密钥配送问题在消息认证码中也同样会发生。关于秘钥的配送后边章节会介绍如何使用非对称加密的方式进行解决。

第三方证明
假设Bob在接收了来自Alice的消息之后,想要向第三方验证者Victor证明这条消息的确是Alice发送的,但是用消息认证码无法进行这样的证明,这是为什么呢?
首先,Victor要校验MAC值,就需要知道Alice和Bob之间共享的密钥。

假设Bob相信Victor, 同意将密钥告诉Victor,即便如此,Victor也无法判断这条消息是由Alice发送的,因为Victor可
以认为:“即使MAC值是正确的,发送这条消息的人也不一定是Alice,还有可能是Bob。"
能够计算出正确MAC值的人只有Alice和Bob,在他们两个人之间进行通信时,可以断定是对方计算了MAC值,这是因为共享这个密钥的双方之中,有一方就是自己。然而,对于第三方Victor、Alice或Bob却无法证明是对方计算了MAC值,而不是自己。

防止否认
假设Bob收到了包含MAC值的消息,这个MAC值是用Alice和Bob共享的密钥计算出来的,因此Bob能够判断这条消息的确来自Alice。
但是,上面我们讲过,Bob无法向验证者Victor证明这一点,也就是说,发送者Alice可以向Victor声称:“我没有向Bob发送过这条消息。”这样的行为就称为否认(repudiation)。
Alice可以说“这条消息是Bob自己编的吧",“说不定Bob的密钥被主动攻击者Mallory给盗取了,我的密钥可是妥善保管着呢" 等。说白了,就是Alice和Bob吵起来了。
即便Bob拿MAC值来举证,Victor也无法判断Alice和Bob谁的主张才是正确的,也就是说,用消息认证码无法防止否认(nonrepudiatlon)。

消息认证码是对消息进行认证并确认其完整性的技术。通过使用发送者和接收者之间共享的密钥,就可以识别出是否存在伪装和篡改行为。
消息认证码可以使用单向散列函数HMAC, 对称加密也可以实现, 这里不再进行介绍。
消息认证码中,由于发送者和接收者共享相同的密钥,因此会产生无法对第三方证明以及无法防止否认等问题。在数字签名可以解决。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页