实用密码学
范学雷
前 Oracle 首席软件工程师,Java SE 安全组成员,OpenJDK 评审成员
14948 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 24 讲
开篇词 (1讲)
课前必读 (1讲)
案例分析 (1讲)
实用密码学
15
15
1.0x
00:00/00:00
登录|注册

13 | 如何防止数据被调包?

你好,我是范学雷。
还记得我们在前面讨论过 CBC 模式补齐预言攻击吗?当时,我们谈到了一个问题,就是解密端是无法判断解密得到的数据是发送者发送的数据,还是被人掉了包的数据的。
这就好比,牛郎要送的信是,“七夕今宵看碧霄,牛郎织女渡鹊桥”。织女拆开一看,却是一堆乱码,或者是变成了“我断不思量,你莫思量我。将你从前与我心,付与他人可”。
如果这封信真的变成了一堆乱码,就意味着信息没有被有效地送达,这样会给织女愁上加愁;而如果内容是“我断不思量”,简直就是一支穿心箭,这可一点都不好玩。
那么,织女看到“我断不思量,你莫思量我。将你从前与我心,付与他人可”的信件,除了靠坚贞不渝的信念这个不靠谱的办法之外,她有没有其他的办法来判断这是一封伪造的信件?牛郎除了坚信织女有坚贞不渝的信念之外,他有没有其他的办法来预防信件的伪造?
其实,解决问题的思路很直观,就是要能够验证发送的信息。牛郎发送信息时,心里要想着意外情况,要给织女提供验证信息的办法。织女收到信息时,要有办法验证信息的真伪,不能只依靠心里的信念。
那么,我们今天这一讲,就来分析一下如何防止数据被调包这个问题。

怎样有效地验证一段信息?

首先,我们来分析下,要想有效地验证一段信息,需要满足什么条件呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了如何防止数据被调包的问题,并提出了消息验证码(MAC)作为解决方案。文章首先分析了有效验证信息的条件,指出验证信息需要额外信息、与待验证消息有关联、计算快且数据小。随后介绍了消息验证码的工作原理,包括发送方和接收方持有相同密钥,使用相同消息验证函数生成和验证消息验证码的过程。文章还讨论了选择消息验证函数的问题,提出基于单向散列函数的HMAC作为常用方案。此外,文章解释了为什么需要对称密钥参与消息验证码的运算,以及如何计算HMAC算法的安全强度。最后,列举了一些常见的HMAC算法,并提出了下一步讨论的问题。通过本文,读者可以深入了解消息验证码作为防止数据被调包的有效解决方案,为其提供了清晰的技术指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《实用密码学》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • Geek_828b39
    严格的来说,HMAC 算法的安全强度,是由对称密钥的安全强度和两倍的散列值长度之间较小的那个数值决定的。 老师,这里为什么是两倍的散列值?

    作者回复: 看得很细,问题也很好。简单的说,这和HMAC算法的构造有关系,两倍弹列值长度以内的数据,理论上不能构造出碰撞的数据,两倍以外就没办法保障了。 详细的算法,你可以看看RFC 2104里的描述。

    2021-08-31
    2
  • Litt1eQ
    双方可以用之前约定好的密钥 然后牛郎用这个密钥给消息生成一个HMAC 然后消息和HMAC一同发给织女 织女收到消息 验证HMAC和消息是否匹配 则可确定消息有无篡改 这样做的前提是牛郎和织女能够安全的交换密钥 消息内容也最好加上具体的时间(防止重放攻击)

    作者回复: 嗯,要想办法先交换密钥。

    2020-12-23
    1
  • 三叶虫tlb
    HMAC 和 单向散列函数+ salt 有什么不同。

    作者回复: 算法不同

    2021-04-17
  • Daiver
    既然说到了消息验证码,为啥不直接将消息直接使用对称加密,这样数据也不会被篡改调包;使用消息验证码的方式得先将原始消息散列,然后加密,最后把原始消息,和验证消息发出去,这样不是很多此一举?

    作者回复: ;-) 是不是前几篇还没来得及看呢?

    2021-02-24
  • zzzz
    老师,HMAC的传递方式是没有涉及上一节讲的明文密文对吗? 就是,加密解密和这里的消息验证是两块不相关的内容吗 我先把问题记在这里,等看完了全部再来看看嘿嘿

    作者回复: 是的,加解密和消息验证是两个领域的问题。

    2021-01-19
  • 孜孜
    双向验证软件(two factor),比如Google身份验证器等,都会把epoch分段,然后在加上一点容错。这样即使客户端在提示的30s快到的时候输入验证码,服务端也会认证通过。 如果手动改变手机时间,双向认证软件会工作不正常。

    作者回复: 嗯,了解这个思路了。谢谢!

    2020-12-25
  • 谢谢老师的分享。 密码学相关的内容首先是发展变化的,没有一套算法或者密钥是无懈可击的;其次攻守双方是互相促进的;最后,密码学还是回归到人的问题,计算机只是工具。

    作者回复: 同意前两条,不同意最后一条。密码学是用来解决人的问题的,回不去。认为人好了就好了,就太理想了。

    2020-12-24
  • 孜孜
    我们用的 生成6位数字的双向验证软件,其实就是对当前时间进行hmac。因为时间这个原数据客户端和服务端都是一样的,所以hmac也应该是一样的。

    作者回复: 有点好奇,客户端和服务端的时间没有偏差吗?

    2020-12-23
  • ifelse
    对于流行的 HMAC 算法,我们只需要考虑对称密钥的安全强度。--记下来
    2022-11-09归属地:浙江
  • ifelse
    学习打卡
    2022-11-09归属地:浙江
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部