消息认证码
消息认证码可以实现“认证”和“检测篡改”这两个功能。密文的内容在传输过程中可能会被篡改,这会导致解密后的内容发生变化,从而产生误会。消息认证码就是可以预防这种情况发生的机制。
加密处理流程
假设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 消息认证码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
2021-01-19 Thumbnailator 图片压缩
2017-01-19 js jquery数组去重