古典密码学简介

目录

C. D. Shannon: 

一、置换密码

二、单表代替密码

① 加法密码

② 乘法密码

③密钥词组代替密码

三、多表代替密码

代数密码

四、古典密码的穷举分析

1、单表代替密码分析

五、古典密码的统计分析

1、密钥词组单表代替密码的统计分析        

2、英语的统计规律        

C. D. Shannon: 

采用混淆、扩散和乘积的方法来设计密码; 

混淆:使密文和明文、密钥之间的关系复杂化

扩散:将每一位明文和密钥的影响扩大到尽可能多的密文位中。

乘积和迭代:多种加密方法混合使用对一个加密函数多次迭代

古典密码编码方法:置换,代替,加法

古典密码学举例:

一、置换密码

把明文中的字母重新排列,字母本身不变,但其位置改变了,这样编成的密码称为置换密码。最简单的置换密码是把明文中的字母顺序倒过来,然后截成固定长度的字母组作为密文。

明文:明晨5点发动反攻。MING CHEN WU DIAN FA DONG FAN GONG

密文:GNOGN AFGNO DAFNA IDUWN EHCGN IM

理论上:①、置换密码的加密钥是置换矩阵 p,解密钥是置换矩阵 p-1 。②、置换密码经不起已知明文攻击。           

           

二、单表代替密码

① 加法密码

A和B是有 n个字母的字母表。定义一个由A到B的映射:f: A→B。f(ai )= bi=aj;j=i+k mod n;加法密码是用明文字母在字母表中后面第 k个字母来代替。K=3 时是著名的凯撒密码。

② 乘法密码

A和B是有n个字母的字母表。定义一个由A到B的映射:f: A→B。f(ai )= bi= aj      j=ik mod n。其中,(n,k)=1。注意:只有(n,k)=1,才能正确解密。

③密钥词组代替密码

随机选一个词语,去掉其中的重复字母,写到矩阵的第一行,从明文字母表中去掉这第一行的字母,其余字母顺序写入矩阵。然后按列取出字母构成密文字母表。

举例:密钥: HONG YE 

 矩阵:    HONGYE   选出顺序:按列

                ABCDFI

                JKLMPQ   改变密钥、矩阵大小

                RSTUVW  和取出序列,得到不同的

                XZ        密文字母表。

密文字母表 :  B={ HAJRXOBKSZNCLTGDMUYFPVEIQW }

三、多表代替密码

单表代替密码的安全性不高,一个原因是一个明文字母只由一个密文字母代替。

构造多个密文字母表,在密钥的控制下用相应密文字母表中的一个字母来代替明文字母表中的一个字母。一个明文字母有多种代替。Vigenere密码:著名的多表代替密码

代数密码

① Vernam密码

     明文、密文、密钥都表示为二进制位:

      M=m1,m2,… ,mn K =k1,k2,… ,kn C =c1,c2,… ,cn

② 加密 : c1= mi⊕ ki  ,i=1,2,… ,n   

     解密 : m1= ci⊕ ki  ,i=1,2,… ,n

③ 因为加解密算法是模2加,所以称为代数密码。

④ 对合运算:f=f-1,模 2加运算是对合运算。

      密码算法是对和运算,则加密算法=解密算法,工程实现工作量减半。

⑤ Vernam密码经不起已知明文攻击。

⑥ 如果密钥序列有重复,则Vernam密码是不安全的。

⑦一种极端情况:一次一密

               • 密钥是随机序列。

               • 密钥至少和明文一样长。

               • 一个密钥只用一次。

⑧一次一密是绝对不可破译的,但它是不实用的。

⑨ 一次一密给密码设计指出一个方向,人们用序列密码逼近一次一密。

四、古典密码的穷举分析

首先了解下什么是安全?

如果把一封信锁在保险柜中,把保险柜藏起来,然后告诉你去看这封信,这并不是安全,而是隐藏

相反,如果把一封信锁在保险柜中,然后把保险柜及其设计规范和许多同样的保险柜给你,以便你和世界上最好的开保险柜的专家能够研究锁的装置,而你还是无法打开保险柜去读这封信,这才是安全

柯克霍夫原则(Kerckhoffs‘s principle密码系统的加密算法和解密算法应该是公开的,密码系统的安全性要取决于密钥的安全性。密码分析学是基于己知密码算法但不知道密钥的情况下,试图从密文中破译出明文的科学

1、单表代替密码分析

① 加法密码

因为f(ai )= bi=aj  j=i+k mod n

所以k=1,2,... ,n-1,共n-1种可能,密钥空间太小。以英文为例,只有25种密钥。经不起穷举攻击。

② 乘法密码

因为f(ai )= bi=aj   j=ik mod n,且(k,n)=1。所以k共有(n)种可能,密钥空间更小。

对于英文字母表,n=26,k=1,3,5,7,9,11,15,17,19,21,23,25 取掉1,共11种,比加法密码更弱。经不起穷举攻击。

③ 密钥词语代替密码

因为密钥词语的选取是随机的,所以密文字母表完全可能穷尽明文字母表的全排列。 以英文字母表为例,n=26,所以共有26!种可能的密文字母表。26!≈4×10^26用计算机也不可能穷举攻击。

注意:穷举不是攻击密钥词语代替密码的唯一方法。

五、古典密码的统计分析

统计攻击(频率攻击)

假设:根据分析假设某些结论。

推断:在假设的前提下,推断出一些结论

验证发展:填上破译出的字母,根据词义、词规则不断发展

当攻者能窃听到密文时,否有其它更有效攻击方法?

1、密钥词组单表代替密码的统计分析        

任何自然语言都有自己的统计规律。如果密文中保留了明文的统计特征,就可用统计方法攻击密码。由于单表代替密码只使用一个密文字母表,一个明文字母固定的用一个密文字母来代替,所以密文的统计规律与明文相同。因此,单表代替密码可用统计分析攻破。

2、英语的统计规律        

每个单字母出现的频率稳定。

  最高频率字母      E

  次高频率字母      T A O I N S H R

  中高频率字母      D L

  低频率字母        C U M W F G Y P B

  最低频率字母     V K J X Q Z

频率最高的双字母组:

  TH HE IN ER AN RE ED ON

  ES ST EN AT TO NT HA ND

  OU EA NG AS OR TI IS ET

  IT AR TE SE HI OF

频率最高的三字母组:

   THE ING AND HER ERE ENT THA WAS

  ETH FOR DHT HAT SHE ION HIS ERS

  VER

其中THE的频率是ING的3倍!

英文单词以E,S,D,T为结尾的超过一半。英文单词以T,A,S,W为起始字母的约占一半。还有其它统计规律!教科书上有一个完整的统计分析例子。经得起统计分析是对近代密码的基本要求!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

魔方阵(C语言)

一、魔方阵规律; 8 1 6 3 5 7 4 9 2 魔方阵中各数的排列规律如下: (1)将1放在第1行中间一列。 (2)从2开始直到nn止,各数依次按此规则存放:每一个数存放的行比前一个数的行数减1,列数加1(例如上…

QT5带UI的常用控件

目录 新建工程,Qmainwindow带UI UI设计器 常用控件区 Buttons 按钮 containers 容器 控件属性区域 对象监视区 布局工具区 信号与槽区 简单例子1 放置一个按钮控件,改文本为发送,该按键为Button1; 按钮关联信号和…

点云三角化---------PCL

贪婪三角化 pcl::PolygonMesh PclTool::projectionTriangulation(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud) {// 正态估计pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n; // 法线估计对象pcl::PointCloud<pcl::N…

刷代码随想录有感(53):合并二叉树

题干&#xff1a; 代码&#xff08;递归实现&#xff09;&#xff1a; TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {//前序好理解&#xff0c;直接将树覆盖到另一个上面if(root1 NULL)return root2;//当前遍历节点为空的话就让另一个的值覆盖过来if(root2 NUL…

k8s环境部署gpu以及CUDA兼容性分析

本文记录和学习在实用gpu搭建k8s支持上层应用时的功能实践和遇到的问题。 1. 基础概念 CUDA本质上就是NVIDIA专为通用高性能并行计算设计的一套计算平台和编程模型&#xff0c;换句话使用GPU并行编程的规范方法&#xff0c;所以CUDA在软件层面包含了众多库&#xff0c; 那这里…

【Vulhub靶场】Nginx 漏洞复现

Nginx 漏洞复现 一、Nginx 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09;1、影响版本2、漏洞原理3、漏洞复现 二、Nginx 解析漏洞1、版本信息&#xff1a;2、漏洞详情3、漏洞复现 一、Nginx 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09; 1、影响版本 Nginx …

python中的self是什么

你对Python编程中的self真的了解吗? 当我们在Python编程的时候,尤其是写一个方法的时候,会自动补齐括号中的self,那么我们对它真的了解吗? Self 是什么?有什么作用? self指的是调用该函数的对象&#xff08;是一个实例&#xff09;,首先明确的是self只有在类中的方法中才…

基于SpringBoot+Vue的旅游网站系统

初衷 在后台收到很多私信是咨询毕业设计怎么做的&#xff1f;有没有好的毕业设计参考?能感觉到现在的毕业生和当时的我有着同样的问题&#xff0c;但是当时的我没有被骗&#xff0c;因为现在很多人是被骗的&#xff0c;还没有出学校还是社会经验少&#xff0c;容易相信别人。…

使用Android Studio 搭建AOSP FrameWork 源码阅读开发环境

文章目录 概述安装Android Studio编译源码使用Android Studio打开源码制作ipr文件直接编译成功后自动打开Android Studio 修改SystemUI验证开发环境 概述 我们都知道Android的系统源码量非常之大&#xff0c;大致有frameworka层源码&#xff0c;硬件层(HAL)源码&#xff0c;内…

JSP语法——[JSP]5

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

ue引擎游戏开发笔记(26)——处理角色死亡敌人仍攻击bug

1.需求分析 对游戏中存在的各种小问题做细节处理&#xff0c;例如玩家在死亡后&#xff0c;敌人仍对着目标开炮&#xff0c;并且仍然触发爆炸效果。 2.操作实现 1.首先分析问题起因&#xff0c;是由于虽然玩家控制的小车被摧毁了&#xff0c;但控制器仍然存在&#xff0c;没有…

[力扣]——125.验证回文串

class Solution {public static boolean isValidChar(char ch){if((ch > a && ch < z) ||(ch > 0 && ch < 9)){return true;}return false;}public boolean isPalindrome(String s) {// 将大小写统一起来s s.toLowerCase();int left 0, right s…

【介绍下Apache的安装与目录结构】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

全栈开发之路——前端篇(3)setup和响应式数据

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 本文为该系列的第三篇&#xff0c;主要讲述Vue核心的setup语法&#xff0c;同时讲解再使用了setup后如何设置响应式数据。 辅助…

flowable 奇遇

Flowable框架 碰到的问题1. 查询流程执行情况展示2. 查询流程审批人 碰到的问题 1. 查询流程执行情况展示 List<HistoricActivityInstance> list historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId()).orderByHistoricActivit…

信息管理与信息系统就业方向及前景分析

信息管理与信息系统(IMIS)专业的就业方向十分广泛&#xff0c;包含计算机方向、企业信息化管理、数据处理和数据分析等&#xff0c;随着大数据、云计算、人工智能、物联网等技术的兴起&#xff0c;对能够处理复杂信息系统的专业人才需求激增&#xff0c;信息管理与信息系统就业…

【Web】CTFSHOW 新手杯 题解

目录 easy_eval 剪刀石头布 baby_pickle repairman easy_eval 用script标签来绕过 剪刀石头布 需要赢100轮&#x1f914; 右键查看源码拿到提示 一眼session反序列化 打PHP_SESSION_UPLOAD_PROGRESS 脚本 import requestsp1 a|O:4:"Game":1:{s:3:"log…

STM32——点亮第一个LED灯

代码示例&#xff1a; #include "stm32f10x.h" // Device headerint main() {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启时钟GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitSt…

AWS 机器学习课程--1.机器学习的介绍

课程链接&#xff1a;机器学习&#xff08;ML&#xff09;和人工智能&#xff08;AI&#xff09;— AWS 数字和课堂培训 免费课程&#xff0c;注册结束之后&#xff0c;就可以选择课程了。 共计6个课程&#xff0c;推荐学习时长为8小时13分钟 本章建议学习时间为30min&#…

C++奇迹之旅:C++内存管理的机制(进阶篇)

文章目录 &#x1f4dd;new和delete操作自定义类型&#x1f320; operator new与operator delete函数&#x1f309;operator new与operator delete函数 &#x1f320;new和delete的实现原理&#x1f309;内置类型&#x1f309;自定义类型 &#x1f320;定位new表达式(placement…