简介

明文攻击就是指已经知道了部分明文和它对应的加密后的字段,从而可以推测出使用的加密手段或者密码本。明文攻击这个故事还要从二战时候说起。

crib和明文攻击

谈到明文攻击,就不能不讲到一个词crib和它的发源地布莱奇利公园(Bletchley Park)。

布莱奇利公园(Bletchley Park)是位于米尔顿凯恩斯(Buckinghamshire)的英国乡村房屋和庄园,它是由金融家和政治家赫伯特·莱昂爵士在1883年建造的, 在第二次世界大战期间成为同盟国密码破解的主要中心。

在第二次世界大战期间,该庄园内设有专门进行密码破译的研究所,该研究所主要负责破译轴心国的秘密通信,其中最重要的是德国的Enigma和Lorenz密码。在其早期人员中,密码破译团队拥有很多著名的人物,包括Alan Turing,Gordon Welchman,Hugh Alexander,Bill Tutte和Stuart Milner-Barry。直到战后多年,那里的工作才被公布于世。

正因为这个密码破译团队的杰出成效,破译了很多轴心国的密码,据说直接导致二战提前四年结束,如果没有它,二战的结果还是未知之数。

为了更加有效的破译密码,Bletchley Park的团队开始借助机械的力量来进行密码破解,最终发展了世界上第一台可编程数字电子计算机Colossus。Bletchley Park的密码破解活动于1946年结束,并于1970年代中期才对外公开。

crib这个词源自于一句关于抄袭的谚语:“I cribbed my answer from your test paper”。

那么crib在明文攻击中到底意味着什么呢?

比如同盟军截获到了轴心国发送的一个电报,那么应该怎么来进行破解呢?

当然,前提是那时候的加密手段还比较粗浅,基本上是一个字符或者单词被转换成了其他的字符或者单词。

同盟军已经拿到了电报了,比如是一封完全看不懂的邮件。那么如何来进行破解呢?

常见的做法就是从点到面,如果我们能够破解其中的一部分单词或者句子,那么对于我们理解整个密文肯定是有好处的,即使不能了解当前的密文,那么如果后面截获了其他的密文,也是可以对破解有所帮助的。

为了猜测密文对应的明文信息,Bletchley Park团队根据发送消息的时间和识别一些常规操作消息来猜测一些纯文本。例如,德国人每天在同一时间发送每日天气预报。因为军事报告的格式是非常统一的,所以在每封邮件的同一位置都应包含Wetter(德语为“天气”)一词。 当然,在消息末尾出现的“ Heil Hitler”也是非常容易猜测到的明文。

知道这些简单的明文往往是不够的,盟军需要知道更多更加关键的明文信息。为此有时候甚至会故意泄露一些消息给轴心国,比如某时某刻准备用空军轰炸某个地方,那么马上就会监控到的消息中很有可能就会包含轰炸和要轰炸的地方,这样就会为最终密码的破解提供了线索。

布莱奇利公园(Bletchley Park)

从1919到1942年间,Bletchley Park的最高指挥官是阿拉斯泰尔·丹尼斯顿(Alastair Denniston)。最初的人员是从海军部40室(NID25)和战争办公室的MI1b组成的。

当然还有一些其他的密码学家,那时候的密码学家主要是语言学家和国际象棋冠军,并且还招募了一些谜题填字游戏的顶级求解者,因为这些人具有较强的横向思维能力。

少不了的还有正规军也就是各大高校的教授和数学家,特别是剑桥和牛津大学的人。牛津大学的彼得·特温(Peter Twinn)于1939年2月加入,]剑桥大学的艾伦·图灵和戈登·韦尔奇曼于1938年开始训练,并在宣战后的第二天与约翰·杰弗里斯一起向布莱奇利汇报。

后来招聘的密码分析家包括数学家Derek Taunt,Jack Good,Bill Tutte 和Max Newman。历史学家哈里·辛斯利(Harry Hinsley)以及国际象棋冠军休·亚历山大(Hugh Alexander)和斯图尔特·米尔纳·巴里(Stuart Milner-Barry)。还有受聘为密码分析员的女性琼·克拉克(Joan Clarke)。

1945年1月,在代码破解工作的顶峰时期,有近10,000名人员在布莱奇利及其分站工作。其中约四分之三是妇女。许多妇女来自中产阶级背景,并在数学,物理学和工程学领域拥有学位,可以说妇女能顶半边天。

美国加入第二次世界大战后,许多美国密码学家也被被派往Bletchley Park,从1943年5月开始,英美情报部门之间进行了密切合作。相反,苏联从未被正式告知布莱奇利公园及其活动-这反映了即使在纳粹威胁实施的美英苏同盟期间,丘吉尔也不信任苏联。

本文已收录于 http://www.flydean.com/known-plaintext-attack/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

密码学系列之:明文攻击和Bletchley Park的更多相关文章

  1. 密码学系列之:memory-hard函数

    密码学系列之:memory-hard函数 目录 简介 为什么需要MHF Memory hard的评估方法 MHF的种类 MHF的密码学意义 memory-hard在MHF中的应用 简介 Memory ...

  2. 密码学系列之:碰撞抵御和碰撞攻击collision attack

    密码学系列之:碰撞抵御和碰撞攻击collision attack 简介 hash是密码学和平时的程序中经常会用到的一个功能,如果hash算法设计的不好,会产生hash碰撞,甚至产生碰撞攻击. 今天和大 ...

  3. 密码学系列之:feistel cipher

    密码学系列之:feistel cipher 简介 feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构.它是由德籍密码学家Horst Feistel在I ...

  4. 密码学系列之:memory-bound函数

    密码学系列之:memory-bound函数 目录 简介 内存函数 内存受限函数 内存受限函数的使用 简介 memory-bound函数可以称为内存受限函数,它是指完成给定计算问题的时间主要取决于保存工 ...

  5. 密码学系列之:Merkle–Damgård结构和长度延展攻击

    密码学系列之:Merkle–Damgård结构和长度延展攻击 简介 Merkle–Damgård结构简称为MD结构,主要用在hash算法中抵御碰撞攻击.这个结构是一些优秀的hash算法,比如MD5,S ...

  6. <密码学系列>—信息安全威胁

    懒惰等于将一个人活埋.--泰勒 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 点关注,不迷路! ...

  7. 密码学系列之:NIST和SHA算法

    目录 简介 SHA1 SHA2 SHA3 简介 SHA算法大家应该都很熟悉了,它是一个用来计算hash的算法,目前的SHA算法有SHA1,SHA2和SHA3种.这三种算法都是由美国NIST制定的. N ...

  8. 密码学系列之:blowfish对称密钥分组算法

    目录 简介 blowfish详解 密钥数组和S-box 密钥数组 S-box 生成最终的K数组 blowfish blowfish的应用 blowfish的缺点 简介 Blowfish是由Bruce ...

  9. 密码学系列之:1Password的加密基础PBKDF2

    目录 简介 PBKDF2和PBKDF1 PBKDF2的工作流程 详解PBKDF2的key生成流程 HMAC密码碰撞 PBKDF2的缺点 总结 简介 1password是一个非常优秀的密码管理软件,有了 ...

随机推荐

  1. CSS两列布局的多种方式

    两列布局(一侧固定宽度,一侧自适应),在工作中应该是经常使用到,可以说是前端基础了.这种两列布局的样式是我们在平时工作中非常常见的设计,同时也是面试中要求实现的高频题.很有必要掌握以备不时之需.这里总 ...

  2. c++实现扫雷游戏 初学

    设计思路 全局变量定义地图和一些判断信息 创建三个地图 分别表示 源地图  显示的效果地图  和一个用来判断点位是否被选中的地图 功能: 玩家输入要翻开的格子的行数和列数.用一个函数来翻开目标格子,如 ...

  3. sklearn.neighbors.NNeighborsClassifier 详细说明

    平时会用到sklearn.neighbors.NNeighborsClassifier函数来构建K最邻近分类器,所以这里对NNeighborsClassifier中的参数进行说明,文中参考的是scik ...

  4. CTF-Web-强网杯 2019-随便注

    题目链接 题目链接-supersqli FUZZ测试 fuzz出,order by测出数据库查询列数2列,注释符号#,select|update|delete|drop|insert|where|被过 ...

  5. IntelliJ IDEA 2019.1.3 x64 简约基本配置

    说明:本文针对IntelliJ IDEA 2019.1.3 x64版本,其他版本或许不能准确适用! 1.改变主体背景:Ctrl+Alt+S -> Editor -> Color Schem ...

  6. springboot项目启动报错Communications link failure

    环境情况,MySQL版本如下: 报错情况如下(看上去是和数据库有关): com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communi ...

  7. CF980C Posterized

    先来吐槽一下这个 sb 翻译,根本就没做过题吧-- 大概就是让你给值域分成连续的几组,每组大小不能超过 \(k\),然后将序列中的值全部替换成其组内的最小值,要使得序列的字典序最小. 因为是字典序,所 ...

  8. 【Updating】汇编语言学习记录02

    换码指令.字符的输出 前置知识: XLAT 指令:将BX指定的缓冲区中.AL指定的位移处的一个字节数据取出赋给AL,实际相当于(AL) = (DS:(BX+AL)).注意,不是单纯地赋予AL+BX,而 ...

  9. Forethought Future Cup - Final Round (Onsite Finalists Only) C. Thanos Nim 题解(博弈+思维)

    题目链接 题目大意 给你n堆石子(n为偶数),两个人玩游戏,每次选取n/2堆不为0的石子,然后从这n/2堆石子中丢掉一些石子(每一堆丢弃的石子数量可以不一样,但不能为0),若这次操作中没有n/2堆不为 ...

  10. Java反射——java.lang.Class和类的加载

    反射的基础: java.lang.Class Class类的实例对象,用于记录类描述信息. 源码说:represent classes and interfaces in a running Java ...