这篇文章讲述了在SSL上的选择明文攻击。我想分四个部分讲讲我对这篇文章的理解。

1.CPA的定义;

2.文章讲述SSL相关基本概念漏洞;

3.对SSL的CPA攻击的过程;

4.实现这种攻击的可能性以及问题的解决。

CPA

CPA,即Chosen Plaintext Attack,选择明文攻击。Wiki上的解释是:在这种攻击模式中,攻击者可以实现任意选择一定数量的明文,让被攻击的加密算法加密,并得到相应的密文。攻击者的目标是通过这一过程获得关于加密算法的一些信息,以利于攻击者在将来更有效的破解由同样的加密算法(以及相关密钥)加密的信息。在最坏的情况下,攻击者可以直接获得解密用的密钥。

SSL

SSL,即Secure Sockets Layer。

文章描述的攻击是依赖于以下事实的:

SSL标准可以用于对称密码系统,而文章所讨论的漏洞只限于使用分组密码。在文章中,漏洞主要是针对SSL加密的模式和使用的初始向量提出的。当一个加密报文的长度大于一个分组的长度时,就要使用加密工作模式,SSL使用的是CBC(Cipher Block Chaining)模式。

在CBC模式中,第一块明文块要与一个初始向量(IV)异或,此后的明文块都与前一个产生的密文块异或。可以知道,在SSL中,只有在初始握手阶段中产生的一个初始向量(IV)是(伪)随机的,紧接在后的报文加密所使用的IV都是可以预测的,因为挑选的就是紧挨在前面的报文。这个事实在实现选择明文攻击中是重要的。

对SSL的CPA攻击过程

概述

实际上,攻击者可能会提前知道用户要加密下一个报文所使用的IV,因为攻击者可以截获密文。基于以上事实,攻击者可以发动一个选择明文攻击来验证一个特定明文分组的可能值。还有一个重要的条件就是如何让用户加密攻击者想要验证的明文分组,但是,在现在开放的网络浏览器插件环境下,要实现也是相对容易的,例如欺骗用户安装一个有问题的插件,以此来插入明文字符串让用户加密。

公式、记号:

  • Fsk(X)           用密钥sk加密分组X
  • P1,.....,Pn      明文,Pi的长度是密文分组的长度
  • C1,.....,Cn     密文

在CBC模式中有

  • Ci = Fsk(Pi ⊕ Ci-1)
  • Pi = Fsk-1(Ci) ⊕ Ci-1

接下来演示选择明文攻击的过程

前提: 1.观察得到密文C1,.....,Cn

2.知道加密下一个报文的IV(etc.Cn
)

目的: 测试串P*是否与明文分组Pj相等

步骤: 令  P1' = Cj-1 ⊕ Cn ⊕ P*

则 C' = Fsk(P1' ⊕ Cn)

= Fsk(Cj-1 ⊕ Cn ⊕ P*
⊕ Cn)

= Fsk(Cj-1
⊕ P*)

我们想要测试的明文分组Pj在Cj = Fsk(Pj
⊕ Cj-1)中,Cj和Cj-1都假设已知(通过截获密文得知),若C'=
Cj 即有 P*=Pj。因此,目的达到,可以列举P*的可能值来判断明文分组Pj的值。

在以上的攻击过程中需要满足一下要求:

1.知道明文分组j包含的一些预期信息,比如传送http报文的格式;

2.知道Cj-1;

3.知道加密下一条报文所使用的IV值;

4.插入明文分组到下一条报文中,这是整个攻击过程中最富挑战的环节。

实现攻击的可能性以及问题解决

这里实现攻击的可能性主要是解决插入明文分组的问题,而相对于欺骗用户安装木马软件,让用户安装浏览器插件会更容易实现。首先,插件显得轻巧便携;其次,安装插件非常方便,安装浏览器插件也是常有的事。至于利用插件来实现插入明文分组的功能,应该是编写插件代码时要考虑的,在这篇文章中没有具体讲,文章中讨论的是实现的可能性。

最后是解决这种漏洞的方法,很显然,经过以上的讨论,解决的办法有两个:一个是使用(伪)随机的IV,每次加密新的报文都是用随机的IV,而不是使用上一个报文;二个是改变加密的工作模式,比如使用计数器模式。

如有错漏,恳请指教。

Vulnerability of SSL to Chosen-Plaintext Attack 读书报告的更多相关文章

  1. Known plaintext attack

    When you find a ZIP/RAR file with password protected in the evidence, you may try dictionary attack ...

  2. 《读书报告 -- Elasticsearch入门 》--简单使用(2)

    <读书报告 – Elasticsearch入门 > ' 第四章 分布式文件存储 这章的主要内容是理解数据如何在分布式系统中存储. 4.1 路由文档到分片 创建一个新文档时,它是如何确定应该 ...

  3. 《读书报告 -- Elasticsearch入门 》-- 安装以及简单使用(1)

    <读书报告 – Elasticsearch入门 > 第一章 Elasticsearch入门 Elasticsearch是一个实时的分布式搜索和分析引擎,使得人们可以在一定规模上和一定速度上 ...

  4. 《精通CSS网页布局》读书报告 ----2016-12-5补充

    第一章:CSS布局基础 1.CSS的精髓是布局,而不是样式哦!  (定要好好的研究布局哦,尤其配合html5) 2. html标签的语义性,要好好的看看哦! 3.DTD:文档类型定义. 4.内联--& ...

  5. 《Write Optimized B-Trees》读书报告

    论文原作者:Goetz Graefe, Microsoft.我读完这篇论文后颇有收获,所以写了一篇论文报告,旨在更精炼准确地阐述论文核心思想. 摘要:论文提出了一种方法,这种方法可以优化B树索引写性能 ...

  6. 网络爬虫系统Heritrix的结构分析 (个人读书报告)

      摘要 随着网络时代的日新月异,人们对搜索引擎,网页的内容,大数据处理等问题有了更多的要求.如何从海量的互联网信息中选取最符合要求的信息成为了新的热点.在这种情况下,网络爬虫框架heritrix出现 ...

  7. 《读书报告 – Elasticsearch入门 》----Part II 深入搜索(2)

    第十三章 全文检索 这一章开始介绍 全文检索 :怎样对全文字段(full-text fields)进行检索以找到相关度最高的文档. 全文检索最重要的两个方面是: 相关度(Relevance) 根据文档 ...

  8. 《读书报告 – Elasticsearch入门 》----Part II 深入搜索(1)

    Part II 深入搜索 搜索不仅仅是全文本搜索:数据的很大部分是结构化的值例如日期.数字.这部分开始解释怎样以一种高效地方式结合结构化搜索和全文本搜索. 第十二章 结构化搜索 结构化搜索_ 是指查询 ...

  9. 前端学HTTP之摘要认证

    前面的话 上一篇介绍的基本认证便捷灵活,但极不安全.用户名和密码都是以明文形式传送的,也没有采取任何措施防止对报文的篡改.安全使用基本认证的唯一方式就是将其与SSL配合使用 摘要认证与基本认证兼容,但 ...

随机推荐

  1. [译]ANDROID 11: BETA 计划

    当我们开始计划 Android 11 的时候,我们没有预料到这些变化会发生在我们所有人身上,几乎遍及世界上的每一个地区. 这些挑战要求我们保持灵活性,寻找新的合作方式,特别是与我们的开发者社区合作. ...

  2. JDK基本库概述

    看脚下,不断行,莫存顺逆. 剖析java的哪些源码 目前主要是java基本库的一些源码的分析,jvm工具的使用等等,后续可能还会结合hotspot源码来分析jvm原理,当然,这是一个比较高级的主题,根 ...

  3. Web前端基础第一天

    Web标准的构成 结构:结构对于网页元素进行整理和分类,现阶段主要学的是html 表现:表现用于设置元素的板式.颜色.大小等外观样式,主要指的是CSS 行为:行为是指网页模型的定义及交互的编写,现阶段 ...

  4. Coursera课程笔记----计算导论与C语言基础----Week 11

    C程序中的字符串(Week 11) 字符数组 所有的字符串,都是以\0结尾的 只能在数组定义并初始化的时候:char c[6] = "China"; 不能用赋值语句将一个字符串常量 ...

  5. FOC 电流采样为什么不准?你忽略了这个细节

    文章目录 1 引言 2 延迟类型及典型时间 3 延迟源详细分析 3.1PWM死区时间插入 3.2 光耦延迟和预驱动器延迟 3.3晶体管开关延迟 3.4其他延迟 4 结语 在电机驱动的FOC控制开发过程 ...

  6. Git使用教程之在github上创建项目(三)

    继续~ 登录你的github账号,创建一个新项目 1. 2. 至此,github的项目也创建完成了.

  7. [UVA Live 12931 Common Area]扫描线

    题意:判断两个多边形是否有面积大于0的公共部分 思路:扫描线基础. #pragma comment(linker, "/STACK:10240000") #include < ...

  8. 我参与 Seata 开源项目的一些感悟

    丁老师在他的知识星球邀请我回答以下一个问题: 我觉得这个问题非常有意思,姑且把它贴到公众号这里,与大家分享一下我对这个问题的一些感悟. 感谢丁老师的邀请问答: 在这里我就简单说下,我这段时间参与 Se ...

  9. 「雕爷学编程」Arduino动手做(25)——MQ2气敏检测模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  10. 浅析Block闭包

    浅析Block闭包 简单来说,block就是将函数及其上下文封装起来的对象,从功能上可以把它看作是C++中的匿名函数,也可称之为块. Block类型写法: 返回值+(^块名)+(参数)= ^(参数){ ...