密码学基本原理和发展——古典密码学

news2024/9/20 5:33:46

        密码技术最早起源于公元前404年的希腊,此后密码大致经历了古典密码、近代密码和现代密码三个阶段。

1.古典密码

        古典密码(公元前五世纪~19世纪末)代表性的是滚桶密码、棋盘密码凯撒密码。

1.1滚筒密码

        滚筒密码原理为信息发送者在特定直径的木棒(斯巴达棒)上螺旋缠绕一条羊皮纸,然后在纸上横着写上信息,信息接收者需要将羊皮纸重新缠绕在相同直径的模板上才能读到初始信息,否者字母顺序错位,斯巴达棒利用置换(换位)的方法达到加密的目的。

 图1 滚筒密码示意图

       因为如果解密木棒直径与加密木棒直径不一致,那么读到的字母组合肯定是不具备特定行业的,所以针对这种情况的加密方法,可以通过不断尝试模板直径,直到出现的字母具有特定含义来破解。

1.2棋盘密码

       棋盘密码原理为通过一个5*5的网格矩阵,将每个字母转换成两个数字,第一个数字是该字母的行数,第二个数字是该字母的列数。

\

1

2

3

4

5

1

M

W

C

X

E

2

F

A

Z

I/J

K

3

L

G

S

O

P

4

R

Q

N

T

U

5

V

B

Y

D

H

表1 Polybius矩阵

       基于Polybius矩阵的棋盘加密方法,应该是最早的对称加密算法的应用,在那个时代接收方不知道网格矩阵的前提下,想要破解密文还是非常困难的。这种加密方法需要加解密双方事先约定好网格矩阵,后面双方加解密都是基于这个网格矩阵的,如何保证网格矩阵不被泄露存在很大困难。

1.3凯撒密码

        凯撒密码是一种替换加密的技术,其原理是将字母按字母表的顺序构成一个字母序列链,然后将最后一个字母与第一个字母相连成环,接着将明文中的每个字母对照序列链正向或者逆向偏移k个单位后,形成密文。这里的字母链可以是按照所有人都知道的adcdefg……xyz的方式构成字母序列链

        假设信息发送方以adcdefg……xyz序列链,k=+3进行信息加密,加密演示如下:

        明文:Intern,cancel the operation

        变换表及偏移量:abcdefg……xyz,K=+3

        密文:Lqwhuq,fdqfho wkh rthudwlrq

图2 字母序列链加密示意图

        序列链也可以按照加解密双方事先约定好的不具备特定规律的字母排序构成序列链,如sgidqpm……wzu等。

       凯撒密码其实也是利用对称加密原理进行信息加密的,这种加密方法同样存在着序列链易泄漏的问题,若窃听者拿到序列链通过枚举密钥k值(1-26)就十分容易破解。 

1.4单表代换与多表代换

1.4.1单表代换

       单表代换是加解密使用同一个固定的代换表进行代换,明文和密文的字母存在惟一对应关系,容易受到频率统计分析攻击。例如恺撒密码和棋盘密码等都属于单表代换。下表为单表代换的字母表,加解密双方持有共同的代换表即可对信息进行加解密。

表2 单表代换

1.4.2多表代换

       多表代换是加解密使用两个及两个以上的代换表进行代换,例如经典的维吉尼亚密码就属于多表代换,直至二战时期,维吉尼亚密码在整个欧洲依旧有着广泛的应用,下图为维吉尼亚密码表,实际上维吉尼亚密码是由一系列凯撒密码(26个)组成的字母表(当密钥仅为一个字母时,则就是凯撒密码),属于多表密码的一种简单形式。

表3 维吉尼亚密码表

       若维吉尼亚密码表中我们使用第一行作为明文,则第一列作为密钥,加密情况如下所下所示。

       明文:intern

       密钥:khgvsk 

       密文:suykjx,

       明文中n出现2次,而根据密文无法推断出明文中某个字母出现的频次,因此维吉尼亚密码可以抗字频统计破译密码。

图3 字母频次分布图

       以凯撒密码为例的单表代换破解:在英语中,每个字母/相邻双字母/相邻三字母出现还可以通过相邻双字母、三字母概率来增加破译概率),例如字母:E>T>A>O>I,如此在文本信息量较大的情况下,若密文中H出现的频次最多,那么大概率密文中的H对应的是明文中的E,这样下来很大概率能计算到偏移量k=3,若字母序列链为adcdefg……xyz,则可直接根据k=3得到如下字母表。

       若字母序列链为sgidqpm……wzu等无规律链时,通过密文中字母出现频次同样可以逆向推出对应明文字母,由此求得k值,对字频接近的字母还可以利用k值反馈校验,提高破译的准确度。

       以维吉尼亚为例的多表替换破解其实原理也是以字频分析,主要有以下三步。

       第一步:确定密钥的长度

       求密钥长度我们以Kasiski 实验的方法来求现实加密过程中,密钥长度明文长度,我们假定密钥长度为K,假定明文长度文l,那么根据维吉尼亚密码表我们知道,第X i,X i+k,X i+2k ······X i+nk (i=1,2,3,···,l)个字母加密方式其实用的同一个凯撒密码加密的,理解了这个后我们接下来看一个实例。

       根据维吉尼亚密码表要加密 “The Great Wall in Beijing, the Huangpu River in Shanghai, the Fifth Avenue in Tianjin, and the Presidential Palace in Nanjing.”这样一段信息,为了厘清加密过程中的对应关系,笔者画了下表帮助读者理解。

       如上表所示,明文的词组The一共出现了三次,分别对应密文中的dlc、dlc、xfo,这难道是巧合吗?我们分析得到这种对应关系与密钥的长度K以及两两相同词组之间的间距S有关。如明文中第1个The与第2个The间距S(1,The)=21=nK,第2个The与第3个The间距S(2,The)=25 ≠ n K。

       也就是说如果两个相同词组之间的间隔(S)正好等于密钥长度的整数倍(nK)时,那么这两个相同词组加密得到对应的密文也是一样的。

       以上例来讲,密文中第1个dlc与第2个dlc的间距为n K=21,得到K是21的约数(1或3或7或21),同理若发现密文中另外两个相同词组的间距为n K=6,则得到K是6的约数(1或2或3或6)……,最后取所有约数集合的交集即可求得K值。

       第二步:确定密钥的内容

       在第一步中假设求的的K=3,也就是说每逢3个字母就会用到同一套密码加密,所以只要知道钥匙的长度K,再分别对3套密码用频率分析法,维吉尼亚加密法就破解了。

       接下来就讲下如何利用K=3确定密钥内容,我们知道第X i,X i+k,X i+2k ······X i+nk 个字母加密方式是用的同一套凯撒密码加密的,在本文中第1、4、7、10、13······个字母用的同一套凯撒密码M1加密的,第2、5、8、11、14······个字母用的同一套凯撒密码M2加密的,第3、6、9、12、15······个字母用的同一套凯撒密码M3加密的,将密文中所有字母按照加密方式的不同进行分组。

       这样我们就将原始密文拆解成K组密文,每组密文使用同一凯撒密码加密,因此针对每组采取前文讲的字频分析方法破解即可得到密文字母表,将密文字母表与维吉尼亚密码表的行进行对比,便可以得到每组的密钥。上例中对M1组进行破解得到密钥为该组密钥为k,对M2组进行破解得到密钥为该组密钥为e,对M3组进行破解得到密钥为该组密钥为y,所以密钥为key。

       第三步:根据密钥恢复明文

       知道密钥后,对照维吉尼亚密码本就可以知道明文了。

       小结分析:单表代换密码加密后的密文具有明文的字频特征,易通过字频统计破解,而多表代还后密文不具备字频特征,但是遇到二阶式频率分析时就显得无能为力了(周期分析根据密钥的重复使用情况进行频率分析),但是增加密钥长度可以大幅提升破解难度。

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

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

相关文章

5月17号软件资讯更新合集....

Erlang/OTP 26 正式发布 Erlang/OTP 26.0 已正式发布。 Erlang 是一种通用的并发函数式程序设计语言。Erlang 也可以指 Erlang/OTP 的通称,开源电信平台 (OTP) 是 Erlang 的常用执行环境及一系列标准组件。 这是一个重要版本更新,包含许多新特性、改进…

Python带你实现批量自动点赞小程序

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 所用知识点: 动态数据抓包 requests发送请求 json数据解析 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 requests 请求模块 ,第三方,需安装 win R 输入cmd 输入安装命令 pip inst…

oa是什么意思?oa系统哪个好用?

一、oa是什么意思 oa(Office Automation办公自动化)是一种将智能化科技应用于企业管理中的应用系统。它可以通过电脑网络、互联网等技术手段,将企业的各种业务流程、各种业务数据进行集成和处理,将各种业务流程和各种业务数据统一…

centos安装kurento

前沿 本文章使用docker安装,为个人安装记录 一、安装kurento 1.拉取镜像 # 搜索kurento docker search kurento# 拉取 docker pull kurento/kurento-media-server# 查看镜像是否拉取成功 docker images2.运行kurento服务 # 运行 docker run -d --name kms -p 8…

【Python Mayavi】零基础也能轻松掌握的学习路线与参考资料

Mayavi是Python的一个科学可视化库,主要用于三维(3D)科学数据的可视化。Mayavi具有优秀的可视化效果、交互性良好、易于使用、能够输出高质量的图像和动画等特点。对于需要展示科学数据的学者和研究人员来说,Mayavi是一个非常好的…

手撕代码带你领略Spring如何集成Mybatis

引言 有关于Spring整合Mybatis其实一直是一个很具有典型代表性的Spring实际应用,今天就带着大家由浅入深手撸一遍整合的代码 手撕代码 准备工作 首先准备两个Mapper作为今天演示的操作对象 import org.apache.ibatis.annotations.Select;public interface User…

动态规划——第N个泰波那契数

题目链接 leetcode在线oj题——第N个泰波那契数 题目描述 泰波那契序列 Tn 定义如下: T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。 题目示例 示例1 输入:n 4 输出…

❤ cannot read properties of null(reading appendChild)解决办法

❤ 操作元素报&#xff1a;cannot read properties of null(reading appendChild)解决办法 1、场景&#xff1a; 写的一个js渲染&#xff0c;但是出了个小问题&#xff0c;cannot read properties of null(reading appendChild)报错。 <div id"divps" class&qu…

ASEMI代理Infineon英飞凌IPB64N25S3-20原厂MOS管

编辑-Z IPB64N25S3-20参数描述&#xff1a; 型号&#xff1a;IPB64N25S3-20 持续漏极电流&#xff1a;64A 脉冲漏极电流&#xff1a;256A 雪崩电流&#xff0c;单脉冲&#xff1a;27A 栅极-源极电压&#xff1a;20V 功率耗散&#xff1a;300W 操作和储存温度&#xff1…

【Linux】有名管道实现简单版聊天功能

目录 有名管道实现简单版聊天功能 橙色 有名管道实现简单版聊天功能 创建两个.c文件&#xff0c;一个是chata.c&#xff0c;一个是chatb.c chata.c文件内容如下&#xff1a; #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include &l…

Linux-基础IO

一、C语言文件IO 1、C库函数介绍 打关文件fopen/fclose&#xff1a; FILE * fopen(const char* filename, const char* mode); int fclose (FILE* stream );文件打开方式&#xff1a; 读写函数fread/fwrite&#xff1a; size_t fread( void *buffer, size_t size, size_t cou…

刷题day66:目标和

题意描述&#xff1a; 给你一个整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 &#xff0c;在 1 之前添…

Kibana 的安装

1. 简介 Kibana 是一个开源的分析与可视化平台&#xff0c;可以用 Kibana 搜索、查看存放在 Elasticsearch 中的数据&#xff0c;就跟谷歌的 elasticsearch head 插件类似&#xff0c;但 Kibana 与 Elasticsearch 的交互方式是各种不同的图表、表格、地图等&#xff0c;直观的…

物联网和边缘计算:如何将数据处理和决策推向设备边缘

第一章&#xff1a;引言 当我们谈论物联网&#xff08;IoT&#xff09;时&#xff0c;我们通常指的是将各种设备连接到互联网&#xff0c;并通过数据交换来实现智能化的网络。然而&#xff0c;传统的物联网模型通常涉及将数据发送到云端进行处理和分析。然而&#xff0c;随着技…

5月第2周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年5月8日-5月14日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B站…

【js】原生input框及下拉框数据联动( 列如: 输入框输入 3,下拉框里的选项值则为:1,2,3)

需求 输入框输入 数字 下拉框要显示对应的数字 列如: 输入框输入 13 下拉框里的选项值则为&#xff1a;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;8&#xff0c;9&#xff0c;10&#xff0c;11&#xff0c;12&#xff0c;…

【数据结构 -- C语言】 双向带头循环链表的实现

目录 1、双向带头循环链表的介绍 2、双向带头循环链表的接口 3、接口实现 3.1 开辟结点 3.2 创建返回链表的头结点 3.3 判断链表是否为空 3.4 打印 3.5 双向链表查找 3.6 双向链表在pos的前面进行插入 3.6.1 头插 3.6.2 尾插 3.6.3 更新头插、尾插写法 3.7 双向链…

springBoot中使用redis实现分布式锁实例demo

首先 RedisLockUtils工具类 package com.example.demo.utils;import org.junit.platform.commons.util.StringUtils; import org.springframework.context.annotation.Bean; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.red…

【最短路径 本质模板】【最短路径问题 本质 Dijkstra 和 spfa】收藏本篇,遇到最短路问题,来看看模板和思路

也就是走过的节点&#xff0c;还可以再走 但是dij走过的不能再走了 这是本章的精髓&#xff0c;大家往下看 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章…