2022-3-2 UOOC 计算机安全导论 一 对称加密方式(置换、替代、多表;维吉尼亚) 【T.O.CTF】

本文主要是介绍2022-3-2 UOOC 计算机安全导论 一 对称加密方式(置换、替代、多表;维吉尼亚) 【T.O.CTF】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0、前言

我于这个学期选修了深圳大学开展的计算机安全导论,权作为网安方面小小的导引,促进自己学习。同时也修读了深圳大学的 现代密码学 ,这两门慕课上完都会更新随想。麻烦大家多多指教。

我们首先了解的是密码学基础,因为本人主要学习re,因此学习密码学倒是门新的挑战,废话不多说了,下边来写内容:

1、密码学基础

信息,作为人类文明重要的黏合剂,在几千年的文明史里,不断地扮演更重要的作用。在现代社会,掌握了信息就掌握了机会,就掌握了财富。于是人们就会想方设法将重要的信息加密、混淆,以期信息劫持者无法理解,而信息真正的接受者却能看懂信息,于是加密方和解密方的竞争开始了。

凯撒密码应该是最早应用于战争信息传递加密的加密算法(加密器),凯撒密码(英语:Caesar cipher),或称凯撒加密凯撒变换变换加密,是一种最简单且最广为人知的加密技术。凯撒密码是一种“替换”的加密技术,需要加密的“原信息”中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换为加密好的信息。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。

我们明确一下密码学中的名词,以方便我们学习(方便我打少几个字):

1、明文:指未加密的,可以正常阅读,表达信息发出者明确意志的信息。

2、密文:指经过各种加密后,信息劫持者无法直接阅读、得知发出者明确意志的文字。

3、密钥:发出方和接收方使用的,用于解密密文的秘密信息

我们根据密钥对加密方法进行分类,而上边介绍的凯撒密码,因为信息发送和接受方都使用一个密钥(这里的密钥是3,因为发送和接受方都知道凯撒密码的加解密规则,这个规则就是密钥),因此被称为对称加密。

相对的,发收双方使用不同密钥的,则是非对称加密。

对称加密被称为常规加密、私钥加密、单钥加密等,而非对称加密被称为公钥加密。

我们刚刚初步感受过私钥加密的操作,我们现在来明确一下对称加密的模型,具体为:

 其中,加密算法可以公开(不公开也会被监测到),但是私钥不可以,当然,大名鼎鼎如凯撒密码,你如果直接套用后移3位这一密钥会被瞬间破解,你也通过更改密钥的大小以增加破解难度,但是,值得提醒的是,凯撒密码型加密算法安全度极低,只能骗骗萌新小白。OK,你现在一定在想,我怎么样在凯撒型的基础上再增加难度,保护我的信息?

我们先来了解密码学里最基础最基础的加密手段:

1.1、替换密码:如凯撒密码,就是将明文里的每一个元素/字母,如果是二进制则是0和1(bit)都映射给另外一个元素,这个映射规则或者映射就是密码,如(A->D和3)

维基百科里的表述是:

替换式密码,是密码学中按规律将文字加密的手段。

替换式密码中可以用不同字母数为一单元,例如每一个或两个字母为一单元,然后再作加密。密文接收者解密时需用原加密方式解码才可取得原文本。

由于拼音文字中字的组成为有限的字母,以英语为例只有26个字母,组成可能的单元数较少,因此使用替换式密码相对较为容易,而且亦可使用简单机械进行加密;

相反,非拼音文字如中文则因单元数非常大难以使用一般加密方式,必需建立密码本,然后逐字替换。更何况某些非拼音文字中字字皆由不同大小的字根来组字(如藏文、日文、韩文),较难转换,因此使用替换式密码的示例比较少。

1.2、换位密码:将明文中每一个元素都重新排列,并没有改变明文中的任何信息,只是次序混乱,导致词不达意无法理解。

1和2相比较时,可以发现转位式密码只是改变明文中单元的位置,而单元本身没有转变;相反,替换式密码只是转换单元,但密文中单元的位置没有改变。

1.3、乘积密码(Product Cipher)通过结合两个或更多置换的方式制造比单独的加密方式更安全的密码以抵抗密码分析。乘积密码往往结合的是简单的置换/替换算法。

因为1、2两种加密方方都有其缺陷:替代密码的明文只要内容量较大,就有可能遭到频度分析法的攻击,而置换密码的缺点是明文量不能大,量大则会导致置换方式易被发现。

因此,乘积密码是最优解。在学习乘积密码前,很有必要枚举替换与置换两种密码各一种,帮助大家理解为何乘积密码有很大的优势。

2、古典密码算法

2.1、替换密码

 还是从凯撒密码说起。我们上文阐述了凯撒密码的具体操作,现在我们利用上面提到的密码学名词符号,列出凯撒密码的加密解密公式:

加密::C=E(3,m)=m+3(mode 26) 0<=m<=25;
解密::M=D(3,C)=C-3(mode 26) 0<=C<=25;

上边说过,我们可以通过改变偏移量来实现凯撒密码变式,我们叫它“维吉尼亚密码”。

维吉尼亚密码可以实现每一个元素的偏移量都不同,我们将偏移量计做K,则每个元素都偏移量K1、K2.......Kn构成“K表”,K表可以循环使用,即,例如明文有8个字母,而k表只有7位,则第八个字母需要偏移时,读取K1进行偏移。 我们把这种使用K表进行偏移的凯撒密码变式称为多表替换。

下面的K=(K1、K2........Kn)

 加解密公式稍加更改。

下边是具体构建维吉尼亚密码:【重要!!!!!】

维吉尼亚密码是在凯撒密码基础上产生的一种加密方法,它将凯撒密码的全部25种位移排序为一张表,与原字母序列共同组成26行及26列的字母表。另外,维吉尼亚密码必须有一个密钥,这个密钥由字母组成,最少一个,最多可与明文字母数量相等。维吉尼亚密码加密方法示例如下:

明文:I've got it.
密钥:ok

密文:W'fs qcd wd.

首先,密钥长度需要与明文长度相同,如果少于明文长度,则重复拼接直到相同(也就是上面提到的“k表循环使用”)。本例中,明文长度为8个字母(非字母均被忽略),密钥会被程序补全为“okokokok”。现在根据如下维吉尼亚密码表格进行加密:

明文第一个字母是“I”,密钥第一个字母是“o”,在表格中找到“I”列与“o”行相交点,字母“W”就是密文第一个字母;同理,“v”列与“k”行交点字母是“F”;“e”列与“o”行交点字母是“S”……

维吉尼亚密码只对字母进行加密,不区分大小写,若文本中出现非字母字符会原样保留

如果输入多行文本,每行是单独加密的。

值得注意的是:

维吉尼亚密码的偏移时从0「A」开始的!!!!

2.2换位(置换)密码

我们介绍栅栏密码

加密原理:把要加密的信息交替排成两行,再将下边的行连接到上边行的尾部。

绕晕了?上图吧。

组成栅栏密码的明文一般不超30个字母。

还有行变换密码:

提高安全性的方法:

1、分多行增加加密强度

2、对加密后的密文再进行其他加密操作(乘积)。

是吧,最后都回到了乘积密码。了解完这些,终于可以好好讲分组密码啦,我们下节再聊!

17:27.3.2.22

这篇关于2022-3-2 UOOC 计算机安全导论 一 对称加密方式(置换、替代、多表;维吉尼亚) 【T.O.CTF】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169601

相关文章

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程