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

12 | 怎么利用加密端攻击?

你好,我是范学雷。
上一讲,我们讨论了怎么利用解密端攻击 CBC 模式的对称密钥分组算法。那么,加密端的攻击方案是怎么进行的?有什么办法可以规避加密端的攻击?这是我们这一次要解决的问题。
虽然我们之前说,CBC 模式应该退休了,但是现实中,它还有广泛的应用。我们花了很多篇幅来讨论 CBC 模式,除了提醒你 CBC 模式的缺陷外,还希望你了解缺陷修补的办法,这样你就可以修复现有的应用了。
这一次的讨论,比起上一次,稍显烧脑。因为,这是一个相对较新的攻击技术。不过,我可以保证,如果你了解了这种攻击技术,将会有一个巨大的收获。

怎么利用加密端攻击?

我们先来看看是怎么利用加密端攻击的?其实,CBC 模式针对加密端的攻击,和针对解密端的攻击方案一样,最常见的攻击方式也是通过异或运算展开的。

攻击面应该怎么选?

要想了解针对加密端的攻击方案,我们先来回顾一下 CBC 模式的加密过程。在这个过程中,一个明文分组的加密,需要如下的输入数据:
上一次的密文分组 Ci-1;
这一次的明文分组 Pi;
加密和解密共享的密钥 K。
这一次的明文分组 Pi 和上一次的密文分组 Ci-1 进行异或运算,获得中间结果 Ti。
异或运算获得的中间结果 Ti,Ti = Ci-1 ^ Pi
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

CBC模式是一种对称密钥分组算法,虽然已经被提出退休,但在实际应用中仍然广泛存在。本文讨论了针对加密端的攻击方案,主要通过异或运算展开。攻击者可以构造明文分组,调用加密运算,观测加密运算后的密文分组,从而破解目标明文分组的具体数据。虽然完整破解一个16字节的明文分组不可行,但攻击者可以逐个破解字节,尤其对于敏感数据如手机验证码,攻击者只需进行有限次计算即可破解。这种攻击技术被称为BEAST,曾在2011年引起广泛关注。由于其严重性,CBC模式已经开始逐渐退出加密算法的主流应用,新的协议或应用不应再使用CBC模式,现有的协议或应用也需要采取措施防范BEAST攻击。 为了防范BEAST攻击,可以在初始化向量上做文章。一种改进的办法是继续使用上一次加密运算的最后一个密文分组,同时把每一次运算的初始化向量当做第一个明文分组来处理。这样的好处是解密端不需要知道加密端选择的初始化向量,就可以执行解密运算。然而,解密端需要丢掉初始化向量这一段数据,不能把它当做应用数据来处理。另一种替代方案是每一次加密运算都使用不同的初始化向量,但这会带来初始化向量同步的问题。 对于已经使用CBC模式的标准协议,如果不能修改协议以每次加密运算都使用不同的初始化向量,是否还有办法修复协议的漏洞,使得修复后的协议实现仍能与旧的协议实现通信,而没有明显的兼容性和互操作性问题?这是一个具有挑战性的问题,业界尝试了多年也未找到理想的解决方案。BEAST攻击的出现简化了攻击方案,使得CBC加密端的攻击成为现实。最后的解决方案是在每次加密运算都使用不同的初始化向量,但这会带来初始化向量同步的问题。 总之,CBC模式存在BEAST攻击,防范措施包括使用不同的初始化向量和在每次加密运算都使用不同的初始化向量。对于已经使用CBC模式的标准协议,修复协议的漏洞需要克服兼容性和互操作性问题。

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

全部留言(11)

  • 最新
  • 精选
  • 可怜大灰狼
    一开始的公式推导费劲看了两遍才看懂,其中Pj是自己构建的本次明文分组,Cj-1是自己构建的上次密文分组。 关于思考题,我想破解者拥有完整明文加密后的完整密文,我们是不是可以在加密前先对明文做拆分,然后对拆分的每段填充点字节。

    作者回复: 你的想法是在正确的方向上,思路就是拆分明文。难点在于怎么处理兼容性问题。

    2020-12-21
    3
  • 彩色的沙漠
    如果攻击者可以使用加密接口,攻击者就可以构造明文分组,然后调用加密运算,观测加密运算后的密文分组。 大部分应用的加密接口是不知道,也就无法攻击。特别是客户端发起的数据,是有客户端加密。

    作者回复: 在黑客的眼里,知不知道加密接口,和能不能用加密接口,是两个事情。

    2021-01-26
    1
  • godliness
    老师,原文这个:“BEAST 攻击起作用的关键,就是要使用上一次加密运算的最后一个密文分组”,这个是说这个攻击是:已知最后的分组密文,然后通过穷举尝试明文字节的数值,观察构造的明文加密后是否和原密文的值是一样的? 然后与倒数第3张图,最后密文作为初始 IV 没有理解到呢?

    作者回复: "然后通过穷举尝试明文字节的数值",这一点的表述和实际的攻击差别很大。你再看看原文。 “最后密文作为初始 IV 没有理解到呢”,再看看上一节的CBC模式。

    2023-11-02归属地:湖北
  • 极客喵
    为什么一个数字只需要9次运算呢?0到9的数字的密文,理论上是对应255个可能的任意一种吧

    作者回复: 可以考虑下两个数的情况,比如一个数不是一就是二,如果不是一,那它就是二,如果不是二,那它就是一。你只需要算一次,就知道这个事是一还是二了。十进制,如果一个数不是一,不是二,不是三,不是四,不是五,不是六,不是七,不是八,你是九,那它一定就是零了,你最多只需要算九次,就知道这个数字了。 幸运的话,一次运算就可以了,比如说,哎,这个数字是三,那它就是三了,不会是四或者五。

    2021-02-16
  • LXX
    老师好,关于思考题,我想着既然是需要爆破的,那控制攻击者爆破的次数是不是可以?

    作者回复: 不总是可以,但是也有可以的场景。

    2021-01-25
  • LXX
    老师,所以这个攻击是已知最后的分组密文,然后通过爆破尝试明文字节的数值,来对比自己构造的明文加密后是否和真正的明文加密后的值是一样的,来获取明文信息么?

    作者回复: 是的。

    2021-01-25
  • Eclipse
    Pj = Pi ^ Ci-1 ^ Cj-1 Tj = Pj ^ Cj-1= Pi ^ Ci-1 ^ Cj-1 ^ Cj-1= Pi ^ Ci-1= Ti =>Ek(Tj)= Ek(Ti)=>Cj = Ci(此处加密运算的密文相同,我们就猜对了明文?) Tj ^ Ci-1 = Ti ^ Ci-1 = Pi ^ Ci-1 ^ Ci-1 = Pi Pi = Tj ^ Ci-1 = Pj ^ Cj-1 ^ Ci-1 这些等式的意义是干什么呢,从一个假设的明文Pj,推导出真正的明文Pi?

    作者回复: 是的

    2020-12-26
  • Eclipse
    为什么“手机验证码的第一个字节(某未知字节)”要求是明文数据分组的最后一个字节,这个未知的字节位于明文数据分组的其他位置可以不?

    作者回复: 没什么不可以的,你的攻击点在哪里,就放在哪里。放在最后的攻击方案可能最简单。

    2020-12-26
  • 25ma
    感觉已经跟不上了,需要去把基础知识补一补,老师有推荐的资料吗?

    作者回复: 先看看《应用密码学》?虽然算法过时了,基础知识这一块儿还能用。

    2020-12-22
  • Litt1eQ
    感觉文章的难度上来了 希望老师可以补充一些相关的文献 之前我是没了解过存在BEAST这种攻击方式的 通过本文的学习使我认识到了密码攻击者会利用尽可能多的方式来破坏密码的安全性

    作者回复: 如果想了解BEASR攻击的细节,可以搜索“BEAST attack”试试看,有很多分析的文章。

    2020-12-21
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部