一、前言

1. 多表古典密码分析

我们以Vigenere密码为例来说明多表古典密码的分析方法。确定密钥字长度的方法有Kasiski测试法(Kasiski Test)和重合指数法(index of coincidence).

2. Vigenere密码

  • Vigenere(维吉尼亚)密码是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
  • 凯撒密码:一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。

二、Vigenere密码分析

1. Kasiski测试法

寻找密文中相同的片段对(一般长度大于三),计算每对相同密文片段对之间的距离,不妨记为d1,d2,…,did_1,d_2,…,d_id1​,d2​,…,di​,若令密钥字的长度为mmm,则m=gcd(d1,d2,…,di)m=gcd(d_1,d_2,…,d_i)m=gcd(d1​,d2​,…,di​)

2. 重合指数法

设X=x1x2…xnX=x_1x_2…x_nX=x1​x2​…xn​是一个长度为n的英文字母串,则x中任意选取两个字母相同的概率定义为重合指数,用 Ic(x)I_c(x)Ic​(x) 表示。
设英文字母A,B,…,ZA,B,…,ZA,B,…,Z在XXX中出现的次数分别为:f0,f1,…,f25f_0,f_1,…,f_{25}f0​,f1​,…,f25​则从XXX中任意选取两个字母相同的概率为
Ic(X)=∑i=025fi(fi−1)n(n−1)I_{c}(X)=\frac{\sum_{i=0}^{25} f_{i}\left(f_{i}-1\right)}{n(n-1)} Ic​(X)=n(n−1)∑i=025​fi​(fi​−1)​
下表为26个英文字母的出现频率:

已知每个英文字母出现的期望概率,分别记为p0,p1,…,p25p_0,p_1,…,p_{25}p0​,p1​,…,p25​,那么X中两个元素相同的概率计算为
Ic(X)≈∑i=025pi2I_{c}(X) \approx \sum_{i=0}^{25} p_{i}^{2}Ic​(X)≈i=0∑25​pi2​
结果约等于 0.065,若是均匀分布,则值约等于0.038

三、实际密码分析

1. 问题描述

设某一段明文经过VigenereVigenereVigenere密码加密后密文为
CHREEVOAHMAERATBIAXXWTNXBEEOPHBSBQMQEQERBWCHREEVOAHMAERATBIAXXWTNXBEEOPHBSBQMQEQERBWCHREEVOAHMAERATBIAXXWTNXBEEOPHBSBQMQEQERBW
RVXUOAKXAOSXXWEAHBWGJMMQMNKGRFVGXWTRZXWIAKRVXUOAKXAOSXXWEAHBWGJMMQMNKGRFVGXWTRZXWIAKRVXUOAKXAOSXXWEAHBWGJMMQMNKGRFVGXWTRZXWIAK
LXFPSKAUTEMNDCMGTSXMXBTUIADNGMGPSRELXNJELXLXFPSKAUTEMNDCMGTSXMXBTUIADNGMGPSRELXNJELXLXFPSKAUTEMNDCMGTSXMXBTUIADNGMGPSRELXNJELX
VRVPRTULHDNQWTWDTYGBPHXTFALJHASVBFXNGLLCHRVRVPRTULHDNQWTWDTYGBPHXTFALJHASVBFXNGLLCHRVRVPRTULHDNQWTWDTYGBPHXTFALJHASVBFXNGLLCHR
ZBWELEKMSJIKNBHWRJGNMGJSGLXFEYPHAGNRBIEQJTZBWELEKMSJIKNBHWRJGNMGJSGLXFEYPHAGNRBIEQJTZBWELEKMSJIKNBHWRJGNMGJSGLXFEYPHAGNRBIEQJT
AMRVLCRREMNDGLXRRIMGNSNRWCHRQHAEYEVTAQEBBIAMRVLCRREMNDGLXRRIMGNSNRWCHRQHAEYEVTAQEBBIAMRVLCRREMNDGLXRRIMGNSNRWCHRQHAEYEVTAQEBBI
PEEWEVKAKOEWADREMXMTBJJCHRTKDNVRZCHRCLQOHPPEEWEVKAKOEWADREMXMTBJJCHRTKDNVRZCHRCLQOHPPEEWEVKAKOEWADREMXMTBJJCHRTKDNVRZCHRCLQOHP
WQAIIWXNRMGWOIIFKEEWQAIIWXNRMGWOIIFKEEWQAIIWXNRMGWOIIFKEE
通过两种分析方法计算出此密码的密钥。

2. 问题解决

1. 密文片段CHR一共出现了5次,每次开始位置分别为1,166,236,276,286,第一次出现到各次出现的距离did_idi​分别为165,235,275,285,所以m=gcd(165,235,275,285)=5m=gcd(165,235,275,285) = 5m=gcd(165,235,275,285)=5
2. 根据Kasiski测试法得到的mvmvmv,可以将密文YvYvYv按照下列形式排列:
将YYY排列成mmm行n/mn/mn/m列的形式,形如:
k1y1ym+1⋯yn−m+1k2y2ym+2⋯yn−m+2k3y3ym+3⋯yn−m+3⋮⋮⋮⋮⋮kmymy2m⋯yn\begin{array}{ccccc} k_{1} & y_{1} & y_{m+1} & \cdots & y_{n-m+1} \\ k_{2} & y_{2} & y_{m+2} & \cdots & y_{n-m+2} \\ k_{3} & y_{3} & y_{m+3} & \cdots & y_{n-m+3} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ k_{m} & y_{m} & y_{2 m} & \cdots & y_{n} \end{array} k1​k2​k3​⋮km​​y1​y2​y3​⋮ym​​ym+1​ym+2​ym+3​⋮y2m​​⋯⋯⋯⋮⋯​yn−m+1​yn−m+2​yn−m+3​⋮yn​​
设f0,f1,…,f25分别表示串yi中英文字母A,B,…,Z出现的次数,令n’=n/m表示串yi的长度,则26个英文字母在yi的概率分布为:
f0n,f1n,f2n,……..f25n\frac{f_{0}}{n}, \frac{f_{1}}{n}, \frac{f_{2}}{n}, \ldots \ldots . . \frac{f_{25}}{n} nf0​​,nf1​​,nf2​​,……..nf25​​

考虑到VigenereVigenereVigenere密码子串yiy_iyi​是有对应的明文子集中的字母移动KiK_iKi​个位置所得,因此,移动后的概率分布为:
fkin′,f1+kin′,f2+kin′,………,f25+kin′\frac{f_{k i}}{n^{\prime}}, \frac{f_{1+k i}}{n^{\prime}}, \frac{f_{2+k i}}{n^{\prime}}, \ldots \ldots \ldots, \frac{f_{25+k i}}{n^{\prime}}n′fki​​,n′f1+ki​​,n′f2+ki​​,………,n′f25+ki​​

Mg=∑i=025pifi+gn′M_{g}=\sum_{i=0}^{25} \frac{p_{i} f_{i+g}}{n^{\prime}}Mg​=i=0∑25​n′pi​fi+g​​

每一行计算每一种字母的MgM_gMg​值(ggg代表0-25即a−za-za−z),若ggg对应的MgM_gMg​ 值与0.065接近,那么ggg则为密钥

四、编程

1. 代码

2. 运行结果

程序比较简单,但是代码比较长,我只把结果贴出来比对一下:

多表古典密码统计分析相关推荐

  1. 多表古典密码统计分析之Vigenere算法保姆级教学(含Kasiski测试法和重合指数法)

     该算法参考于现代密码学第二版2.3.2多表古典密码统计分析 由于书上内容的介绍难以理解,下面我将把我个人对Kasiski测试法和重合指数法这两种方法的理解用文字和代码表示 参考文章 维吉尼亚密码的破 ...

  2. 古典密码(单表密码,维吉尼亚密码,普莱费尔密码,一次一密)

    古典密码 1.单表密码(仿射加密) 仿射加密变化是:y=ax+b 算法: 仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母. A B C ...

  3. 密码学基础知识(三)古典密码

    说完了前面那些,想起个事,本系列依据内容主要来自<现代密码学>马春光编著.我就是学这本书的. 好了,古典密码就是古时候的密码,哈哈,逗你玩的,shannon的保密系统的通信理论发表前的都是 ...

  4. matlab实验shi,matlab 实验六 古典密码与破译

    实验六 古典密码与破译 保密通讯在军事.政治.经济斗争和竞争中的重要性是不言而喻的. 在斗争或竞争中,一方要将信息传递给己方的接收者,同时又要防止其他人(特别是敌方)知道信息的内容.他采用的一种方式是 ...

  5. chapter 2 古典密码技术

    chapter 2 古典密码技术 2.1替代密码 替代是古典密码中用到的最基本的处理技巧之一 : 替代密码是指先建立一个替换表,加密时将需要加密的明文依次通过查表,替换为相应的字符,明文字符被逐个替换 ...

  6. 古典密码的演化 (一)— 密码学复习(二)

    复习完密码学的基本概念后,下面对古典密码进行简单的复习.下图列出的是经典密码体制的框图.(由于比较懒就直接放笔记的照片了⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄) 古典密码学大体上可以分为 代换密码 和 置换密 ...

  7. 古典密码学-古典密码破解方式

    古典密码虽然很简单,但是在密码史上是使用的最久的加密方式,直到"概率论"的数学方法被发现,古典密码就被破解了. 英文单词中字母出现的频率是不同的,e以12.702%的百分比占比最高 ...

  8. 古典密码算法------替代密码算法

    替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文.例如:明文字母a.b.c.d ,用D.E.F.G做对应替换后形成密文. 替代密码包括多种类型,如单表替代密码.多明码 ...

  9. hill密码源代码c语言,古典密码(Hill加密算法)(示例代码)

    "Hill的加密与解密" Hill加密是另一种多字母代替密码,与多表代替密码不同的是,Hill密码要求将明文分成同等规模的若干个分组(最后一个分组涉及到填充),每一个分组被整体的加 ...

  10. 周期置换加密算法用c语言实现,古典密码实验报告.doc

    . .. 哈尔滨工程大学 实 验 报 告 实 验 名 称: 古典密码算法 班 级: 学 号: 姓 名: 实 验 时 间: 2014年4月 成 绩: 指 导 教 师: 实验室名称: 哈尔滨工程大学实验室 ...

最新文章

  1. 23种设计模式的基本介绍
  2. javascript中的内置对象和数据结构
  3. CS 320—Week 8 Homewor
  4. 如何监听RecyclerView划到最后一条数据
  5. Oracle 获取每月最后一天的函数
  6. 用计算机进行实时自动采集,计算机的五大主要用途
  7. 记一次open-falcon手动push数据
  8. windows mysql导入sql文件
  9. MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
  10. POJ 3264:Balanced Lineup(RMQ模板题)
  11. 输入框设置等宽字体_Glyphs 官方教程 | 字体命名
  12. 计算机基础知识试题和答案6,计算机基础知识试题及答案选择题(九)
  13. NGUI-UILabel
  14. (五十一)时间序列分析二:平稳时间序列分析(ARMA)
  15. webqq机器人php,一步一步来做WebQQ机器人-(一)(验证码)
  16. 【SpringCloud系列】 分布式事务-LCN
  17. ubuntu 17 linux 网络,无路由器的情况下linux(ubuntu 17.04)如何连接联通的校园宽带?...
  18. 河北滹沱河流域上演喜鹊戏金雕
  19. vscode 经常弹出:尝试在目标目录创建文件时发生一个错误 重试 跳过这个文件 关闭安装程序
  20. 2020年李永乐线性代数强化笔记-线性方程组

热门文章

  1. 分散的无纸记录仪如何通过无线集中实现短信报警
  2. 记录一下unity3d资源加载Resources.Load资源加载的坑
  3. Android 强制指定录音声卡
  4. Qt常用类的一些介绍
  5. Matlab 直方图均衡化
  6. 卸载360企业版密码
  7. 西游记中出现的八位菩萨
  8. Heli Track
  9. HyperLedger-Fabric v0.6环境搭建详细教程
  10. 年薪5w和50w的职场人思考力有什么区别