现代密码学1.3--古典密码/historical cipher
现代密码学1.3--古典密码/historical cipher
- Caesar's cipher/凯撒密码
- The shift cipher/移动密码
- The mono-alphabetic substitution cipher/单字母替代密码
- 对于shift cipher的进阶版攻击
- The Vigenere(poly-alphabetic)cipher/多字母替代密码
- 密钥长度已知
- 密钥长度未知
- 总结
博主正在学习INTRODUCTION TO MODERN CRYPTOGRAPHY (Second Edition) --Jonathan Katz, Yehuda Lindell,做一些笔记供自己回忆,如有错误请指正。整理成一个系列现代密码学,方便检索。
这一篇讲了一些古典密码,思想是“设计安全的密码方案是很难的”,所有介绍的古典密码都已经被破解了。
Caesar’s cipher/凯撒密码
世界上最古老的有记载的密码之一。
加密方式:将每个字母向前移动三位,如a→D,b→Ea\rightarrow D,b\rightarrow Ea→D,b→E。
攻击方式:没有key,知道加密方式的都能破解。
The shift cipher/移动密码
进阶版Caesar’s cipher,加入key。
加密方式:
Gen: Gen key k∈{0,……,25}k\in \{0,……,25\}k∈{0,……,25};
Enc: Enck(m1,……ml)=c1,……,clEnc_k(m_1,……m_l)=c_1,……,c_lEnck(m1,……ml)=c1,……,cl, where ci=[(mi+k)c_i=[(m_i+k)ci=[(mi+k)mod 26]26]26]
Dec: Deck(c1,……cl)=m1,……,mlDec_k(c_1,……c_l)=m_1,……,m_lDeck(c1,……cl)=m1,……,ml, where mi=[(ci−k)m_i=[(c_i-k)mi=[(ci−k)mod 26]26]26]
攻击方式:密钥空间=26,密钥空间太小,只要从26种可能明文中找到有意义的即可。至少需要2702^{70}270大小的密钥空间。
The mono-alphabetic substitution cipher/单字母替代密码
进阶版shift cipher,改变map方式。
加密方式:之前的map是将字母向前移x位,现在要求只要满足双射即可。
攻击方式:虽然现在密钥空间(=26!)变大了可以通过英文字母的频率分布来破解,如e是最常见的英文字母,u通常跟在q后面,h通常跟在t、e后面。
对于shift cipher的进阶版攻击
之前对shift cipher攻击是遍历26种可能明文,判断有意义的明文。但是,“有意义”是机器较难判定的。
以频率为启发,对于26个英文字母来说,∑i=025pi2=0.065\sum^{25}_{i=0}p^2_i=0.065∑i=025pi2=0.065,pip_ipi是第iii个英文字母在正常文本段中出现的频率。我们要找移动的位数kkk,假设移完后的频率用字母qqq表示,那么有qi+k=piq_{i+k}=p_iqi+k=pi,即∑i=025pi⋅qi+k≈0.065\sum^{25}_{i=0}p_i\cdot q_{i+k}\approx 0.065∑i=025pi⋅qi+k≈0.065,通过这个式子我们可以找到密钥kkk。
The Vigenere(poly-alphabetic)cipher/多字母替代密码
进阶版mono-alphabetic substitution cipher,同时对多个字母进行map。
加密方式:key是字母串,如"cafe",则对于每4个明文字母进行"cafe"
的移位。这样可以使字母频率变得“平滑”,通过频率看不出是哪个字母,如"a"通过"c"移到“c”,通过"f"移到"f"。
攻击方式:这个的攻击比较难,要求足够长的密文长度。
密钥长度已知
这个比较好做一点,比如密钥长度为t,那我们可以把密文分成t块,每一块可以被看作一个mono-alphabetic substitution cipher加密的密文。而且cj,cj+t,cj+2t……c_j,c_{j+t},c_{j+2t}……cj,cj+t,cj+2t……是一个用密钥key=kjk_jkj加密的shift cipher密文,我们称其为第j个流。
- 用暴力破解:将每个流按shift cipher遍历,需要26次;遍历t个流,即需要26t26^t26t次。
- 用频率分布破解:对于每个流,我们通过对频率的计算,得到每个流的明文;共t个流,即需要26⋅t26\cdot t26⋅t次。
密钥长度未知
不知道密钥长度的话,会比较难一点,我们尽量推断出密钥长度。
- 假设密钥长度最大为T,即密钥长度t∈{1,2,……,T}t\in \{1,2,……,T\}t∈{1,2,……,T},则对上述办法遍历T次。
- Kasiski’s method:把关注点放在长度为2或3的密文,如"the"、“you"等常见单词。一般是会被映射成不同的结果,比如"the"通过"caf"映射成"vhj”,通过"afe"映射成"tmi",但是一旦某一次"the"对应的密钥仍是"caf",那么还会出现相同的"vhj"。当我们找到两个"vhj",我们可以适当推断这不是巧合,那么这两个"vhj"之间的距离一定是密钥长度的整数倍。
- index of coincidence method:对于每个流,因为等同于shift cipher,所以字母频率分布是类似的,即qi+j=piq_{i+j}=p_iqi+j=pi,也就是说仍有∑i=025qi2=∑i=025qi2≈0.065\sum_{i=0}^{25}q_i^2=\sum_{i=0}^{25}q_i^2\approx 0.065∑i=025qi2=∑i=025qi2≈0.065。也就是说,如果我们预测的密钥长度是正确的,那么方差也会近似正确。我们令Sα=∑i=025qi2S_\alpha=\sum_{i=0}^{25}q_i^2Sα=∑i=025qi2,如果α=t\alpha=tα=t,那么S≈0.065S\approx 0.065S≈0.065。
总结
以上密码的密钥长度越来越长:
- Caesar’s cipher:密钥长度为0
- The shift cipher:密钥长度为t∈{1,2,……26}t\in \{1,2,……26\}t∈{1,2,……26}
- The mono-alphabetic substitution cipher:密钥长度:密文长度
- The Vigenere cipher(poly-alphabetic):密钥长度是一个长度不定的字符串,且一直重复
可以看出,密钥长度越长,破解该问题所需要的密文长度也应该更长。
现代密码学1.3--古典密码/historical cipher相关推荐
- 1.密码学概念及古典密码
一.前言 信息安全面临的威胁无处不在,多为人为威胁,也就是对信息的人为攻击,人为攻击可分为被动攻击和主动攻击. 被动攻击:即为窃听,分为两类:一类是消息内容获取:另一类是业务流分析,如获取消息的格式, ...
- 实验吧-密码学-传统知识+古典密码(六十甲子年)
题目信息:小明某一天收到一封密信,信中写了几个不同的年份辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳.信的背面还写有"+甲子",请解出这段密文. 提示了甲子年,于是找到甲子年的表 ...
- [古典密码]:Vigenere cipher 维吉尼亚密码
来源于我的博客 维吉尼亚密码 Casear加密算法的升级版: 将26个Casear密表合成一个,见下表: A B C D E F G H I J K L M N O P Q R S T U V W X ...
- 密码学基础知识(三)古典密码
说完了前面那些,想起个事,本系列依据内容主要来自<现代密码学>马春光编著.我就是学这本书的. 好了,古典密码就是古时候的密码,哈哈,逗你玩的,shannon的保密系统的通信理论发表前的都是 ...
- 古典密码的演化 (一)— 密码学复习(二)
复习完密码学的基本概念后,下面对古典密码进行简单的复习.下图列出的是经典密码体制的框图.(由于比较懒就直接放笔记的照片了⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄) 古典密码学大体上可以分为 代换密码 和 置换密 ...
- 有趣的密码学介绍~古典密码之凯撒密码来咯~
游说万乘苦不早,著鞭跨马涉远道.仰天大笑出门去,我辈岂是蓬蒿人! 文章目录 前言 正文 古典密码 一.古典密码概述介绍 1.置换密码 2.代换密码 二.古典密码分类介绍 1.置换密码 2.编辑本段代换 ...
- 【密码学/信息安全】#3 古典密码(含代码)
密码学的起源: 可以追溯至古埃及时代的象形文字,经过长期的发展演进形成了当前的基于计 算机的密码体制与算法. 密码学所采用的数学工具也由简单的代数逐渐地涵盖到了信息论.数论.概率论.近似代数 等多个学 ...
- (密码学实验)两种基本古典密码设计与实现—C语言—随机全排列应用
目录 一.实验目的 二.实验内容 三.实验过程 1.概要设计 (1)随机全排列生成程序 (2)程序逻辑图 2.详细设计 (1)密钥字法 (2)洗牌法 (3)公式法 (4)自设计随机16全排列 (5)生 ...
- 实验吧WP(密码学部分)【变异凯撒,传统知识+古典密码,try them all,trival】
一. 变异凯撒 找规律找规律,既然说是凯撒那就看看怎么移动才能得到flag. 因为flag{前四个字符是确定的,所以对比下密文和flag{的ascii码. 发现规律是这样,然后写个python脚本 # ...
最新文章
- MVC框架浅析(基于PHP)
- 模板方法模式(TemplateMethod) 简介
- mybatis 查询的时间不对_程序员,Mybatis 你踩过坑吗?
- 使用ueditor实现多图片上传案例——Service层(IShoppingService)
- 视图机制对于数据库的安全意义
- vivo X50系列外观公布:两个版本的区别在这儿
- CentOS中nginx负载均衡和反向代理的搭建
- 红火七月——安全专家齐聚共讨漏洞分析
- SQL注射技术总结文档
- python多线程爬取美图录网站图集按模特姓名存储到本地(一)
- 《终身成长》读书分享(附思维导图)
- proteus各个版本下载
- prologue:It's hard to name this article
- 大众点评列表页采集思路,破解字体文件反爬(包含项目github 可用时间至2020-01-21)
- SDP(Seesion Description Protocol)协议结构
- epsxe安卓最新版下载_ePSXe模拟器下载-ePSXe安卓中文版下载-电玩咖
- 聊一聊Vector与Stack
- android launcher3,Android Launcher3 基本功能分析
- java 正则表达式 后缀_Java 正则表达式
- Score-based diffusion models for accelerated MRI
热门文章
- 计算机网络原理和应用,计算机网络原理与应用
- 黑白子交换c语言思路,递归 算法思路和优化和简单实现: 黑白子交换
- linux禁止客户端上传文件_实战 FastDFS Java 客户端上传文件
- android四大组件 简书,android四大组件
- 机房线路老化了会有怎么样的影响?又该如何处理?
- python 面试题 博客园_python面试题
- DL:深度学习算法(神经网络模型集合)概览之《THE NEURAL NETWORK ZOO》的中文解释和感悟(四)
- ML之FE:数据处理—特征工程之稀疏特征的简介、如何处理、案例应用之详细攻略
- 成功解决pandas\core\frame.py:2754: SettingWithCopyWarning: A value is trying to be set on a copy of a s
- EL之GB(GBR):利用GBR对回归问题(实数值评分预测)建模