消息认证码

消息认证码可以实现“认证”和“检测篡改”这两个功能。密文的内容在传输过程中可能会被篡改,这会导致解密后的内容发生变化,从而产生误会。消息认证码就是可以预防这种情况发生的机制。

 

加密处理流程

假设A发送给B的密文在通信过程中被X恶意篡改了,而B收到密文后没有意识到这个问题。

 

如果使用消息认证码,就能检测出消息已被篡改。为了让大家了解实际的处理流程,我们再一次回到A正要向B发送密文的时候。

A生成了一个用于制作消息认证码的密钥,然后使用安全的方法将密钥发送给了B。

接下来,A使用密文和密钥生成一个值。此处生成的是7f05。这个由密钥和密文生成的值就是消息认证码,以下简称为MAC(Message AuthenticationCode)。

 

 A将MAC(7f05)和密文发送给B。

和A一样,B也需要使用密文和密钥来生成MAC。经过对比,B可以确认自己计算出来的7f05和A发来的7f05一致。

 

 假设在A向B发送密文和MAC时,X对密文进行了篡改。

B使用该密文计算MAC,得到的值是b85c,发现和收到的MAC不一致。

 

 由此,B意识到密文或者MAC,甚至两者都可能遭到了篡改。于是B废弃了收到的密文和MAC,向A提出再次发送的请求。

 

存在的问题

这种方法也有缺点。在使用消息认证码的过程中,AB双方都可以对消息进行加密并且算出MAC。也就是说,我们无法证明原本的消息是A生成的还是B生成的。

使用MAC时,生成的一方和检测的一方持有同样的密钥,所以不能确定MAC由哪方生成。这个问题可以用“数字签名”来解决。

 

MAC的算法

我们可以把MAC想象成是由密钥和密文组成的字符串的“哈希值”。计算MAC的算法有HMAC、OMAC、CMAC等。目前,HMAC的应用最为广泛。

 

参考: 我的第一本算法书 5-8 消息认证码

posted @   草木物语  阅读(504)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
历史上的今天:
2021-01-19 Thumbnailator 图片压缩
2017-01-19 js jquery数组去重
点击右上角即可分享
微信分享提示