现代密码学导论-2-古典密码及其密码分析

news2024/11/23 1:54:39

目录

1.3 古典密码和密码分析

1.3.1 凯撒密码 Caesar’s cipher

1.3.2 移位密码 shift cipher

1.3.3 充分密钥空间原则

1.3.4 单表代换密码 mono-alphabetic substitution cipher

1.3.5 利用字母频率对移位密码的一种改进攻击

1.3.6 维吉尼亚密码(多表代换密码)Vigenere cipher

1.3.7 卡西斯基试验Kasiski

1.3.8 弗里德曼试验 重合指数法


1.3 古典密码和密码分析

在我们对“经典”密码学的研究中,我们将考察一些历史上的加密方案,并证明它们是不安全的。

我们展示这些方案的主要目的是:

  • 强调启发式加密方法的弱点
  • 证明实现安全加密的简单方法不太可能成功

在本节中,为了清楚起见,明文字符用小写字母书写,密文字符用大写字母书写


1.3.1 凯撒密码 Caesar’s cipher

凯撒通过将字母表中的字母向前(字母表排列顺序为向前顺序)移动三个位置进行加密:

a被替换为D,b被替换为E,依此类推。在字母表的最末端,字母从头开始,因此z被替换为C,y被替换为B,x被替换为A。

这种密码的一个直接问题是加密方法是固定的;没有密钥(注意这里的表述。一些参考资料中凯撒密码的密钥k=3,当然也是正确的;但是在本书《现代密码学导论》中,密钥生成算法应该是一种概率算法,如果密钥是确定的值,可以看做是“根本没有密钥”)。因此,任何知道凯撒如何加密他的信息的人都能够毫不费力地解密。有趣的是,这种密码的一个变种叫做ROT-13(移位13位而不是3位),现在仍然在各种在线论坛上使用。应当理解,它不提供任何密码安全性;它只是用来确保文本(比如电影剧透)是难以理解的,除非消息的读者有意识地决定解密它。


1.3.2 移位密码 shift cipher

移位密码是凯撒密码的一般形式。在移位密码中,密钥k是0到25之间的一个整数。加密过程中,字母像凯撒密码一样移位,但现在移位了k位。

消息空间:由任意长度的英文字母字符串组成,去掉了标点、空格和数字,没有大小写之分

设明文序列为

Gen:输出统一密钥 k ∈ {0, . . . , 25}

Enc:取一个密钥k和一个明文,并将明文的每个字母向前移动k个位置(在字母表的末尾绕回开头)

Dec:获取密钥k和密文,将密文的每个字母向后移动k个位置

 

移位密码的安全性

密钥只有26种可能。因此,人们可以尝试使用每一个可能的密钥来解密密文,从而获得26个候选明文的列表。正确的明文肯定会在这个列表中;此外,如果密文足够长,那么正确的明文很可能是列表中唯一有意义的候选。通过扫描候选数据列表,很容易恢复原始明文。(这不一定是真的,但大多数时候会是真的。即使不是这样,这种攻击也会将潜在明文的范围缩小到最多26种可能性。)

涉及尝试每一个可能的密钥的攻击被称为暴力攻击穷举搜索攻击。显然,要使加密方案安全,它必须不易受到这种攻击。这样自然就引出了1.3.3

 


1.3.3 充分密钥空间原则

Any secure encryption scheme must have a key space that is sufficiently large to make an exhaustive-search attack infeasible.

任何安全的加密方案都必须有一个足够大的密钥空间,使得穷举搜索攻击不可行。

如今,攻击者可以使用超级计算机、数千台云服务器或GPU来加速暴力攻击。为了防止这种攻击,密钥空间必须非常大——比方说,大小至少为2^80

充分密钥空间原则给出了安全的必要条件,但不是充分条件


1.3.4 单表代换密码 mono-alphabetic substitution cipher

密钥空间由字母表的所有双射或排列组成。例如,定义以下的对应关系

如果我们使用以上的排列进行加密

会将消息tellhimaboutme加密到GDOOKVCXEFLGCD

密钥空间的大小其实就是26个英文字母的全排列,有26!种可能性,大约为2^88

虽然此时暴力搜索的成功概率已经微乎其微,但是这并不意味着这样的加密方式是安全的,因为我们可以利用英语的统计特性来攻击单字母替代密码。攻击依赖于以下事实:

  • 对于任何密钥,每个字母的映射是固定的。这意味着,如果e被映射到D,那么e在明文中的每一次出现都会导致D在密文中的出现。
  • 英语文本中单个字母的频率分布是已知的。当然,非常短的文本可能会偏离这种分布,但即使是仅由几个句子组成的文本也往往具有非常接近它的分布。

攻击的具体原理是将密文中字符的频率分布制成表格,然后将这些频率与正常英语文本的已知字母频率进行比较。然后,可以根据观察到的频率猜测由密钥定义的映射部分

  • 字母频率分析:e是英语中出现频率最高的字母,可以猜测密文中出现频率最高的字符对应于明文字符e
  • 特殊组合分析:例如u通常跟在q后面,h很可能出现在t和e之间

 


1.3.5 利用字母频率对移位密码的一种改进攻击

我们以前对移位密码的攻击需要使用每个可能的密钥解密密文,然后检查哪个密钥产生“有意义”的明文。这种方法的一个缺点是有点难以自动化,因为计算机很难检查给定的明文是否“有意义”。更重要的是,可能存在这样的情况,即明文本身不是有效的英语(明文字符也遵循与英语文本相同的分布),在这种情况下,检查“有意义”的明文将不起作用。

我们根据上文提到的英文字母频率表,可以计算出

现在,假设给我们一些密文,我们让qi表示该密文中字母表的第i个字母的频率。如果密钥是k,那么对于所有的i,pi应该大致等于qi+k,因为第i个字母映射到第(i+k)个字母。对于j∈ {0, . . . , 25},我们计算

 

当j=k时,上式的值应该非常接近0.065

在这里给出其Python实现

 

p = [8.2,1.5,2.8,4.3,12.7,2.2,2.0,6.1,7.0,0.2,0.8,4.0,2.4,
     6.7,1.5,1.9,0.1,6.0,6.3,9.1,2.8,1.0,2,4,0.2,2.0,0.1]
for i in range(0,26):
    p[i] = p[i]/100
sum = 0
for i in p:
    s = i ** 2
    sum = sum + s
c = "OVDTHUFWVZZPISLRLFZHYLAOLYL"   #密文
q = []
for ch in range(ord("A"),ord("Z")+1):
    cnt = c.count(chr(ch))
    pro = cnt / len(c)
    pro = pro
    q.append(pro)
result = []
copy = []
for i in range(0,26):
    mult = 0
    for j in range(0,26):
        index = (j + i)%26
        mult = mult + (q[index] * p[j])
    temp = abs(mult - sum)
    result.append(temp)
    copy.append(temp)
copy.sort()
minal = copy[0]
k = result.index(minal)
print("key is",k)
for ch in c:
    shift = ((ord(ch) - ord("A") - k)%26)+ord("a")
    print(chr(shift),end="")

1.3.6 维吉尼亚密码(多表代换密码)Vigenere cipher

poly-alphabetic shift cipher

我们可以使用多表代换密码来抵御频率攻击,因为明文字符不会映射到固定的密文字符

例如

显然,如果密钥长度为1,将退化为移位密码。这种密码虽然是在16世纪发明的,但是对于这种密码的一种系统性的攻击方案过了数百年后才被设计出来。

如果密钥的长度是已知的,那么攻击该密码就相对容易

假设密钥的长度(密钥长度有时候也被称作密钥周期)为 t ,那么可以将密文分成t个部分,其中的每个部分都可以看作是使用移位密码加密的实例。下面详细解释一下

设密钥为k = k1, k2, ..., kt,(ki是密钥的一个字母)

密文为c = c1, c2, ..., 为密文的每个字符

然后对于 j (1≤j≤t)那么对于这样一串字母序列:cj, cj+t, cj+2t, ...,它们是由密钥为kj的移位密码加密的。也就是说将密文中的字符每 t 个字符分为一组,然后每组字符中位置相对应的字母是使用了同一个密钥进行移位加密的密文

在这种情况下,并不能使用暴力破解来解密分好组的字符,因为它们在明文中也是不连续的。所以只能使用统计分析攻击的方法来破解处理过后的密文,即使用1.3.5中提到的方法,这种方法并不依赖于检查“有意义”的明文,而是依赖于明文中字符的潜在频率分布

那么问题来了,如何判断密钥长度?有两种方法,Kasiski方法和重合指数法


1.3.7 卡西斯基试验Kasiski

当密文很长的时候,可以找出几组重复的密文段,找出它们间距的相同约数,就是密钥长度。在密文中出现相同的子串之间的距离可能是t的倍数,找出所有的相同的子串的距离,尤其出现次数较多的(避免巧合),t是这些距离的最大公约数。

卡西斯基试验是基于类似the这样的常用单词有可能被同样的密钥字母进行加密,从而在密文中重复出现。例如,明文中不同的CRYPTO可能被密钥ABCDEF加密成不同的密文:

密钥:ABCDEF AB CDEFA BCD EFABCDEFABCD

明文:CRYPTO IS SHORT FOR CRYPTOGRAPHY

密文:CSASXT IT UKSWT GQU GWYQVRKWAQJB

此时明文中重复的元素在密文中并不重复。然而,如果密钥为ABCD:

密钥:ABCDAB CD ABCDA BCD ABCDABCDABCD

明文:CRYPTO IS SHORT FOR CRYPTOGRAPHY

密文:CSASTP KV SIQUT GQU CSASTPIUAQJB

此时卡西斯基试验就能产生效果。对于更长的段落此方法更为有效,因为通常密文中重复的片段会更多。如通过下面的密文就能破译出密钥的长度:

密文:DYDUXRMHTVDVNQDQNWDYDUXRMHARTJGWNQD

其中,两个DYDUXRMH的出现相隔了18个字母。因此,可以假定密钥的长度是18的约数,即长度为18、9、6、3或2。而两个NQD则相距20个字母,意味着密钥长度应为20、10、5、4或2。取两者的交集,则可以基本确定密钥长度为2。


1.3.8 弗里德曼试验 重合指数法

重合指数的定义

  • 一个字母串X中随机取出两个字母,这两个字母恰好相同的概率,即为I(x)
  • 对于完全随机的字母串,I(x)=26*(1/26)^2=1/26≈0.038
  • 对于英文文本,根据1.3.5的结果,I(x)≈0.065

重合指数的特点:在单表代换密码中,密文的重合指数和明文相同

举个例子

假设我们截获了以下密文消息:

QPWKA LVRXC QZIKG RBPFA EOMFL JMSDZ VDHXC XJYEB IMTRQ WNMEA IZRVK CVKVL XNEIC FZPZC ZZHKM LVZVZ IZRRQ WDKEC HOSNY XXLSP MYKVQ XJTDC IOMEE XDQVS RXLRL KZHOV

(分为五个字符只是一个电报惯例,与实际字长无关。)

我们可以考虑密文“堆叠”成若干列(即分割子串操作),例如7列:

Q

P

W

K

A

L

V

R

X

C

Q

Z

I

K

G

R

B

P

F

A

E

............

当然,我们也可以“堆叠”为其他列数

如果密钥大小恰好与假定的列数相同,那么单个列中的所有字母都将使用相同的密钥字母加密,实际上是一个简单的移位密码。与它们相应的密文字母组,尽管每个字母已被代换,但是仍然保持着统计规律的特点。

我们用如上公式计算重合指数IC。其中c是归一化系数,英语中为26。n 下标a是字母“a”出现在文本中的次数,N是文本的长度。

对于不同的“堆叠”方式,分别计算其重合指数。当如果密钥大小恰好与假定的列数相同,每一列的重合指数都应该接近0.065。这样就确定了密钥长度m

密钥长度一旦确定,就相当于得到了m组通过移位密码加密的密文。我们只需分别对这m组密文使用1.3.5中的方法,确定每组加密时的位移量即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ansys Zemax | 使用 OpticStudio 进行闪光激光雷达系统建模(上)

前言 在消费类电子产品领域,工程师可利用激光雷达实现众多功能,如面部识别和3D映射等。尽管激光雷达系统的应用非常广泛而且截然不同,但是 “闪光激光雷达” 解决方案通常都适用于在使用固态光学元件的目标场景中生成可检测的点阵列。凭借具…

教育行业数据可视化应用方案与实践

教育行业背景介绍 随着信息技术发展,教育领域中的学习方式、教学模式、教学内容均已发生重大变革,以云计算、人工智能、物联网、大数据等技术的结合,“智慧教育”的需求也变的紧迫,需要围绕“智慧教育”而产生的产品和解决方案也…

课程思政案例----简道云零代码应用开发实训平台

为了更好推动零代码开发课程的思政建设,在传递大数据相关知识和技能的同时帮助学生塑造正确的世界观、人生观和价值观。我们整理了与简道云平台结合的应用案例,开放给全国各大高校使用。 1、杨卫红:一位55岁不懂代码的农经员,为家…

Windows下将文件夹映射为磁盘

Windows下将文件夹映射为磁盘背景描述方法一:使用命令方法二:映射网络驱动器背景描述 公司发的新电脑,只有普通用户权限,所以可想而知磁盘只有一个C盘,但是以前习惯性的将一些软件啥的放在D盘中,所以把C盘…

打好“三场仗”,数据库新晋厂商石原子胜券在握

纵观数字经济时代,数据规模呈爆发式增长,国产化替代加速发展。据中国信通院《数据库发展研究报告(2021年)》预测,预计到2025年,全球数据库市场规模将达到798亿美元,其中,中国数据库市场总规模将达到688亿元…

js文件模块化引用问题(JavaScript modules)

有个前端项目,需要用到配置文件。这个配置文件实在是太大了,就想拆成多个小的,然后一一引入,组合成一个完整的配置文件。 如果是vue代码,这种情况根本是手到擒来,不费吹灰之力,而该前端项目是个…

(WRF-UCM)高精度城市化气象动力模拟技术

气候变化及应对是政府、科学界及商业界关注的焦点。气候是多个领域(生态、水资源、风资源及碳中和等问题)的主要驱动因素,合理认知气候变化有利于解释生态环境变化机理及过程,而了解现在、未来气候变化则是进行生态、环境及能源评…

vs2022 编译遇见编译器堆空间不足,解决办法(针对CMAKE工程)

1、原因: 就是编译工程文件太大,导致堆栈溢出。原始vs默认的编译器是32位,我们设置为64位就可解决部分问题。 具体可能造成的原因可以参考: 错误 C1060 |微软学习 (microsoft.com) 2、解决: 1、需要提前安装cmake…

iOS关于搜索不规则瀑布流布局的实现小结

最近在项目开发中遇到了不规则搜索布局的问题。 之前常用的解决方案是用一个tableview用一个循环动态的加载,唯一的缺点是需要动态的移除,其实也已经足够。ios搜索历史记录不规则布局-IOS代码类资源-CSDN下载,需要的话可以下载使用。请教了一…

双向链表的实现

这里以结构体的方式来实现链表,也可以使用类。结构体在没有修饰符的情况下,默认是共有访问。如有不对,希望能指出。 目录 一、链表和结点结构体的声明 (ListNode.h) 二、链表各个功能的实现 1、增 (1) 构造函数(创建链表头结点…

简历上写着“精通 MySQL”,阿里面试官非要跟我死磕,最后还是给我发了 offer

事情是这样的 前段时间因为想要跳槽就去面试了下阿里,大家也都清楚,精通这个词在简历上属于很难把握住的一个词,如果你在你的简历上面写着你精通 XX 技术,那面试官就会默认你是真的很会,刨根问底问到你崩溃。 我之前…

【踩坑】工作中真实踩坑,一个or让sql变慢7倍

工作中真实踩坑,一个or让sql变慢1000倍1.情况说明2.解释计划3.or改成union4.总结1.情况说明 测试环境,有两张表,分别是讲师表t_train_lecturer(后面简称B表),和讲师的授课时长表t_train_activity(后面简称A表&#xf…

opencv 图像平滑

高通滤波可以找到图像的边缘。低通滤波可以去除噪音,模糊图像。 自定义滤波器 cv2.filter2D() import cv2 import numpy as np from matplotlib import pyplot as pltimg cv2.imread(img1.png) imgcv2.cvtColor(img,cv2.COLOR_BGR2RGB) kernel np.ones((5, 5), n…

2022年11月10篇论文推荐

随着最大的人工智能研究会议(NeurIPS 2022)即将到来,我们进入了2022年的最后阶段。让我们回顾一下人工智能世界最近发生了什么。 在介绍推荐论文之前,先说一个很有意思的项目: img-to-music:想象图像听起来是什么样的模型! https://hugging…

人工智能和自动驾驶业务将是百度未来的最强增长动力

来源:猛兽财经 作者:猛兽财经 虽然百度(BIDU)长期以来一直缺乏增长动力,但猛兽财经认为现在可能是投资百度股票的时候了。因为我们认为百度在未来有几个可以实现强劲增长的动力。首先,百度可以利用其在中国自动驾驶市场的领先地位…

如何验证ARP缓存表最多能缓存多少条动态条目

ARP协议原理、ARP缓存表目的,这些在我的文章中已经反复提及过多次了。ARP缓存表里有静态和动态条目两种,静态的是写死的,没有老化时间,不会随着时间的流逝而自动删除。动态条目是缓存的,有老化时间timeout,如果长时间没有刷新,老化时间到了就会自动删除。老化时间是一个…

智能服务机器人产品及解决方案

产品概述 随着人工智能(AI)领域技术的不断发展和演进,面向人工智能的领域应用也越来越被更多的企业关注。信迈作为中国领先的创新型软件及信息技术服务商,一直致力于人工智能领域技术的探索和实践。 信迈凭借自身雄厚的技术能力…

Cookie注入和X-Forwarded-For注入

💪💪Cookie注入和X-Forwarded-For注入一 .Cookie注入1.创建漏洞环境2.漏洞攻击2.1判断是否有注入2.2信息收集2.3注入获取数据库名2.4注入获取表名2.5注入获取列名2.6注入获取信息3.sql靶场实战二. X-Forwarded-For注入1.创建漏洞环境2.漏洞攻击2.1判断是…

浅析Betaflight中的OSD叠加程序【MAX7456AT7456】

前言:想要对OSD下手已经不是头一次了,前几次都浅尝辄止。一个是能力不够,BetaFlight的代码体系太庞大了,看不懂也摘不出来。 这次要做一款带osd功能的接收机(用在遥控车上),所以又来打飞控程序…

[附源码]java毕业设计校园快递管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…