详解维吉尼亚密码(附四种攻击策略)

news2025/4/16 7:57:54

目录

一. 介绍

二. 破解维吉尼亚密码

2.1 频率统计

2.2 提高型频率统计法

2.3 Kasiski攻击法

2.4 重合指数攻击法(index of coincidence method)

三. 小结


一. 介绍

我们知道英语字母的出现频率是有规律的,比如像下表:

掌握了这些规律后,像凯撒密码等单表置换密码就不安全了。因为固定的密文字母一定对应着同样的明文字母。这个时候就出现了,略微高级的维吉尼亚密码。

维吉尼亚密码(Vigenere cipher)又叫做多表置换密码(poly-alphabetic shift cipher)。举个例子,明文字母为ab,可能对应密文DZ;明文字母是ac,可能对应密文TY。我们发现同一个明文字母a,在密文中有的时候是D,有的时候是T

首先说明下,这些密码都是把字母a~z对应0~25,密钥字母相加对应数字相加,必要时需要模26。举个例子,比如密钥是cafe,加密过程如下表:

明文tellhimaboutme
密钥cafecafecafeca
密文VEQPJIREDOZXOE

需要注意的是密钥cafe是会被重复利用的,以4为循环。也就是说加密第一个字母,加密第五个字母,加密第9个字母使用的同一个密钥c;以此类推。

观察下密文,我们发现密文E有的时候对应明文e,有的时候对应明文a,看起来似乎毫无规律。另外,当密钥足够长时,破解起来就更加难了。

维吉尼亚密码是在16世纪提出了,直到过了200多年,人们才陆续发现了破解的方法。

二. 破解维吉尼亚密码

2.1 频率统计

假定密钥长度为t,也就是密钥k包含t个字母,可以写做:

k=k_1\cdots k_t

借此,我们把密文可以分成t组。比如把第一个密文,第t+1个密文,第2t+1个密文放一起,等等。这些密文所使用的密钥是一样的,如下:

c_j,c_{j+t},c_{j+2t},\cdots

这些密文都使用同一个私钥k_j。密码学中很喜欢把一组叫做一流(stream),第j组,也就是第j流。

首先,最傻的穷搜攻击(brute-force search),一共有t组,每一组的密钥都有26种可能性(26个英文字母),如果直接穷搜的话,也就是26^t,这显然是不可行的。

那应该怎么做?

我们可以统计每一组密文字母的频率,比如我们发现在某一组密文中P出现的频率最高,那么它对应的明文大概率是e(看上面英文字母频率统计表)。由此就可以推导出这一组的密钥,这样其它的字母也就可以解决了。这种攻击方法的时间复杂度为26t。

2.2 提高型频率统计法

以上统计字母概率的方法误差太大了,比如如果你发现两个字母频率一样,咋办?

所以,实际利用的时候大都采用频率平方和的数字分析方法。还是一样,把英文字母a~z跟整数0~25对应起来。令p_i代表第i个字母的概率,注意是概率。根据字母表,我们发现:

\sum_{i=0}^{25}p_i^2\approx 0.065

在同一组密文中,使用的密钥是相同的。也就是对于密文来讲,令q_i代表第i个字母的频率,假定该组的密钥为k,那么明文p_i应该与q_{i+k}相对应,由此计算:

I_j=\sum_{i=0}^25 p_iq_{i+j}

密钥有26种可能性,只需要最多计算26次,当发现这个计算结果也接近0.065时,这个密钥就是正确的。

这个在现代密码学中可以被看成密钥恢复攻击(key recovery attack)。

2.3 Kasiski攻击法

Kasiski算法最早于19世纪中期被提出,该方法可以用来猜测密钥具体长度。我们知道英语中会经常出现“the”这个单词,加密形成密文后,很有可能对应相同的密文字母。

假如某维吉尼亚密码的密钥是beads,我们来看一个例子:

密文中重复出现了LII,它们都对应着明文the,说明这两个明文使用的是同一个密钥字母。我们把密钥的长度看成周期,两个LII之间的距离为30,说明30是密钥周期的倍数。

2.4 重合指数攻击法(index of coincidence method)

这种方法主要也是用来猜测密钥长度的,比上一个方法更加准确,利用代码也更容易实现。

假定密钥长度为t,在给定密文的情况下,我们希望通过重合指数攻击法,导出t的具体值。

按照之前分组的思想,第一组(stream)密文使用同一个密钥,如下:

c_1,c_{1+t},c_{1+2t},\cdots

同一个密钥代表同一种移位的加密方式。

q_i代表第i个明文字母的频率,假设此组密文的移位为j,也就可以得到:

q_{i+j}\approx p_i

其中p_i代表明文第i个字母的概率。也就是q_0,\cdots,q_{25}就是把p_0,\cdots,p_{25}移位j得到的,这种移位其实很类似于抽象代数中循环群。比如假设明文a的概率为0.01,那么移3位的话,密文中C的频率应该接近0.01。考虑一个字母的话,误差太大。

所以:

\sum_{i=0}^{25}q_i^2\approx\sum_{i=0}^{25}p_i^2\approx 0.065

由此便可以大致确定移位的多少。假定候选的密钥长度\tau=1,2,\cdots,T,攻击的步骤如下:

  1. 抽取第一组密文c_1,c_{1+\tau},c_{1+2\tau},\cdots
  2. 形成直方图,统计每个字母的频率q_0,\cdots,q_{25}
  3. 接着计算:

S_{\tau}=\sum_{i=0}^{25}q_i^2

如果此时的\tau恰好为密钥长度t时,最终S_{\tau}的计算结果必定接近0.065.

如果密钥长度分析不对的话,每个字母出现的频率会均匀相等。因为是乱码,相当于均匀随机取,所以q_i\approx 1/26,也就可以得到:

S_{\tau}\approx \sum_{i=0}^{25}(\frac{1}{26})^2\approx 0.038

总结下就是,当密钥正确时,计算出的结果接近0.065;当密钥不对时,计算出的结果接近0.038.

也可以拿第二组密文来验证此时的密钥长度分析是否正确。

三. 小结

维吉尼亚密码的攻击算法需要密文的长度足够长,因为只有这样才能利用频率来代替概率。

可以想到如果密钥长度足够长,这个密码方案可以实现香农意义上的完美安全。

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

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

相关文章

深入解析泛型

一、泛型的诞生 在C#1 中我们还没有泛型的时候我们收集数据通常需要使用到数组,或者使用封装好的数组集合Hashtable ArrayList。 举个例子: 我们在读取文件的时候就会需要一个数组来储存读取的数据的内容 但我们并不知数据的具体长度也就无法在声明的…

小梅哥Xilinx FPGA学习笔记17——模块化设计基础之加减法计数器

目录 一: 章节导读 1.1 任务要求 1.2 模块功能划分 二: 代码设计 2.1 灯控制逻辑(led_ctrl) 2.2 按键消抖模块(key_filter) 2.3 顶层模块(key_led) 2.4 引脚绑定 一&#x…

报表控件FastReport VCL 中的新 S3 传输 (Amazon)

在本文中,我们将探讨新的 S3 传输。从功能上来说,S3 与大多数人习惯使用的有很大不同,因此在本文的开头,我们将详细介绍它的主要功能。 FastReport .NET 是适用于.NET Core 3,ASP.NET,MVC和Windows窗体的全…

java maven项目添加oracle jdbc的依赖

一般添加依赖是直接在pom.xml中添加配置即可,Maven会自动获取对应的jar包,但是oracle驱动依赖添加后会显示红色,代表找不到依赖项,是因为Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中…

LinkSLA管家式运维:为企业打造定制化 IT 支持体系

引言 在数字化转型的浪潮中,企业信息系统繁多,涉及人员复杂,且企业经营管理活动对IT系统的依赖程度越来越高。传统的运维模式已经不能满足企业对运维工作全面性、灵活性、稳定性和安全性的需求。管家式运维作为一种新型服务模式,…

CUDA安装与Tensorflow1-gpu环境搭建(windows版)

一、前提说明 1.1 Tensorflow-gpu环境搭建基本步骤 (1)明确环境搭建资源需求与下载 (2)安装CUDA与cuDNN (3)用Anaconda搭建tensorflow-gpu环境 (4)tensorflow-gpu环境测试 1.2 个人说明 由于科研需要复现机器学习、深度学习某些经典实验,这…

商品销售数据爬取分析可视化系统 爬虫+机器学习 淘宝销售数据 预测算法模型 大屏 大数据毕业设计(附源码)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

网络层解读

基本介绍 概述 当两台主机之间的距离较远(如相隔几十或几百公里,甚至几千公里)时,就需要另一种结构的网络,即广域网。广域网尚无严格的定义。通常是指覆盖范围很广(远超过一个城市的范围)的长距离的单个网络。它由一些结点交换机以及连接这些…

numpy数组04-数组的轴和读取数据

一、数组的轴 在numpy中数组的轴可以理解为方向,使用0,1,2...数字表示。 对于一个一维数组,只有一个0轴,对于2维数组(如shape(2,2)),有0轴和1轴…

Windows搭建RTSP视频流服务(EasyDarWin服务器版)

文章目录 引言1、安装FFmpeg2、安装EasyDarWin3、实现本地\虚拟摄像头推流服务4、使用VLC或PotPlayer可视化播放器播放视频5、RTSP / RTMP系列文章 引言 RTSP和RTMP视频流的区别 RTSP (Real-Time Streaming Protocol)实时流媒体协议。 RTSP定义流格式&am…

idea利用JRebel插件,无需重启,实现Spring Boot项目热重载,节省开发时间和精力!

插件介绍 官方介绍 翻译过来的意思是: JRebel 是一款提高开发效率的工具,允许开发者立即重新加载代码更改。它跳过了在Java开发中常见的重新构建、重启和重新部署循环。JRebel 能够让开发者在相同的时间内完成更多工作,并且在编码时能够保持…

付费进群系统源码带定位完整独立版(12月30日)再次修复首发

搭建教程 nginx1.2 php5.6–7.2均可 最好是7.2 第一步上传文件程序到网站根目录解压 第二步导入数据库(shujuku.sql) 第三步修改/config/database.php里面的数据库地址 第四步修改/config/extra/ip.php里面的域名 第四步设置伪静态thinkphp 总后台账号&…

unity控制摄像机几种视角实现方式

目录 1、按下鼠标右键可以实现摄像机上下左右旋转 2、自由视角 3、摄像头跟随视角 4、跟随自由视角 5、第一人称跟随视角 python学习汇总连接: 1、按下鼠标右键可以实现摄像机上下左右旋转 这段代码定义了一个名为CameraRotate的脚本,用于控制摄像…

Unity坦克大战开发全流程——结束场景——通关界面

结束场景——通关界面 就照着这样来拼 写代码 hideme不要忘了 修改上一节课中的代码

Java项目:103SSM酒店管理系统

博主主页:Java旅途 简介:分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 酒店管理系统基于SpringSpringMVCMybatis开发,功能简单,可用于毕设或者课程设计。 管理员功能如下: 房间管理住客入住…

图像去雾/图像去雨(matlab/python)

图像去雾和图像去雨是计算机视觉领域的两个重要问题,旨在改善被大气条件或降雨影响而模糊或噪声化的图像质量。这两个技术在很多实际应用中具有广泛的价值,包括无人驾驶、安防监控、航空航天等领域。下面将分点介绍图像去雾和图像去雨的相关内容。 1. 图…

微服务(10)

目录 46.k8s中镜像的下载策略是什么? 47.image的状态有哪些? 48.如何控制滚动更新过程? 49.DaemonSet资源对象的特性? 50.说说你对Job这种资源对象的了解? 46.k8s中镜像的下载策略是什么? 可通过命令k…

IIS服务器发布PHP网站

IIS服务器,相信开发者都不会陌生,它的英文全称是Internet Information Services,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务,常用于Windows系统的Web项目部署,本篇以PHP项目为例,讲解如…

循环生成对抗网络(CycleGAN)

一、说明 循环生成对抗网络(CycleGAN)是一种训练深度卷积神经网络以执行图像到图像翻译任务的方法。网络使用不成对的数据集学习输入和输出图像之间的映射。 二、基本介绍 CycleGAN 是图像到图像的翻译模型,就像Pix2Pix一样。Pix2Pix模型面临…

kotlin快速入门1

在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。目前主流AndroidApp开发已经全部切换成此语言,因此对于Android开发而言,掌握Kotlin已经变成必要事情。 Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言&#xff…