图解密码技术【读书笔记+知识总结】

图解密码技术【读书笔记+知识总结】

因为本人是网络工程专业,需要学习密码学。现在暑假提前学习一下,总结了《图解密码技术》 的知识点以及遇到的问题的一些解释。大家可以按需学习,


文章目录


前言

密码是一个庞大的复杂的信息处理体系,涉及到信息的机密性,完整性,认证等诸多方面。为了保护自己的隐私信息,人们开发出了形形色色的密码技术,“密码”可以让窃听者无法解读窃取的信息,“单向散列函数”可以检测出信息是否被篡改过,“数字签名”可以确认消息是否来自合法的发送者。

一、第一部分

第一章·密码环游世界

1.1 Alice与Bob

在讲解密码的时候需要为参与者和计算机取一个名字,以此显得不那么枯燥无味
![在这里插入图片描述](https://img-blog.csdnimg.cn/f66b8434591f4c92b46b902d712316a6.png)

1.2 发送者、接收者与窃听者

Alice向Bob发送消息在这里插入图片描述

1.3 加密与解密

顾名思义,消息需要经过解密与解密才能防止被窃听者破解

1.4 对称密码与公钥密码

1.4.1 密码算法
用于解决复杂问题的步骤,通常叫做算法。从明文生成密文的步骤,叫做“加密算法”。而对应的,解密的步骤,叫做”解密算法”,加密算法与解密算法一起被称为密码算法。
1.4.2 对称密码与公钥密码

对称密码是指加密解密都使用的同一密钥的方式。而公钥密码是指加密解密的时候使用的是不同的密钥的方式,因此公钥密码也叫作非对称密码。在实际加密解密中密钥可能是很大的数,正如下图所示。
在这里插入图片描述

1.4.3 混合密码系统

将公钥密码和对称密码结合起来的一种密码系统,结合了两者的优势。

1.5 其他密码技术

1.5.1 单向散列函数

当我们在互联网上下载一些软件,那怎么确保我们下载的软件和发布者所公布的东西是一模一样的呢?为了防止软件被篡改,有安全意识的软件发布者会在发布软件的同时发布该软件的散列值。散列值就是用单向散列函数计算出来的值。
下载该软件的人可以自行计算所下载文件的散列值,然后与软件发布者所公布的散列值进行比较。如果两个散列值一致,就说明下载的文件与发布者所发布的文件时相同的。

1.5.2 消息认证码

为了确保消息是否来自期望的通信对象,可以采用消息认证码技术
通过消息认证码技术,不但能够确认消息是否被篡改过,而且能够确认消息是否来自所期待的通信对象。也就是说,消息认证码是一种能够保证完整性和提供认证的密码技术

1.5.3 数字签名

Bob 刚刚收到了一封来自 Alice 的邮件,内容是 “以 100 万元的价格购买该商品”。 不过 ,这封邮件到底是不是 Alice本人写的呢? Bob 仅通过阅读邮件内容 ,是否能够判断 该邮件确实来自 Alice 呢?邮件的发送者很容易被伪造 ,因此确实存在别 人伪装 ( spoofing 〉成 Alice 的风险。 假设 Alice 真的发出过邮件 ,但是Alice 当初写的内容真的是 “以 100 万元的价格购买该商 品” 吗? 是否存在这样一种风险 ,即 Alice 原本写的是 “1万元”,而在邮件传输的过程中被某 些别有用心的人进行了篡改 ,将 1 万元改成了 100 万元呢? 反过来说 ,还有这样一种风险 ,即Alice 真的向 Bob 发送了内容为 “以 100 万元的价格购 买该商品” 的邮件 ,但后来 Alice 又不想买了 ,于是便谎称“我当初根本没发过那封邮件”。像这样事后推翻自己先前主张的行为,称为否认( repudiation )。

能够防止上述伪装,篡改和否认等威胁的技术,就是数字签名,数字签名是一种将现实世界的签名和盖章移植到数字世界的技术
数字签名是一种能够确保完整性,提供认证,并防止否认的密码技术。

1.5.4 伪随机数生成器

一种能够模拟产生随机数列的算法。比如在Web中惊醒SSL/TLS通信时,会生成一个仅用于当前通信的临时密钥(会话密钥),这个密钥就是伪随机数生成器生成的。
在这里插入图片描述

1.6 隐写术与数字水印

隐写术的目的是隐藏消息本身 ,但如果搞清楚了嵌入消息的方法 ,也就可以搞清楚消息的
内容。因此 ,隐写术并不能代替密码。一般情况是将密码与隐写一起使用,将密文隐写隐藏到图片等等
密码隐藏的是内容,隐写术隐藏的是消息本身

第二章·历史上的密码

2.1 凯撒密码

凯撒密码可以说是最简单的一种密码。`

恺撒密码( Caesar cipher )是一种相传尤利乌斯 • 恺撒曾使用过的密码。悟撒于公元前 100
年左右诞生于古罗马 ,是一位著名的军事统帅。
恺撒密码是通过将明文中所使用的字母表按照一定的字数 “平移” 来进行加密的。在日语
( 例如平假名 )或者汉语( 例如汉语拼音 )中也可以用同样的思路来实现惜撒密码 ,但为了简化
内容 , 在这里我们只使用英文字母。

2.1.1 凯撒密码的加密

本章中 ,为了讲解方便 ,我们用小写字母( a,b,c,…)来表示明文 ,用大写字母( 人 B,C,… )
来 表 密 文 D
现在我们将字母表平移 3 个字母 ,于是 ,明文中的 a 在加密后就变成了与其相隔 3 个字母
的 D,以此类推 ,b 变成 E, C 变成 F, d 变成 G……V 变成 Y, w 变成 Z , 而 X 则会回到字母表
的开头而变成 A,相应地 ,y 变成 B, z 变成 C。通过图 2 我们可以很容易地理解 “平移” 的
具体工作方式。
在这里插入图片描述凯撒密码中 ,将字母表中的字母平移这个操作就是密码的算法 ,而平移的字母数量则相当
于密钥。在上面的例子中 ,密钥为 3 ( 图 2-2 )。
在这里插入图片描述

2.1.2 凯撒密码的解密

现在 ,假设接收者已经收到了密文 BRVKLNR , 由于密文本身是看不懂的,因此必须将它解
密成明文。
凯撒密码的解密过程是使用与加密时相同的密钥进行反向的平移操作。用刚才的例子来说,
只要反向平移 3 个字母就可以解密了。
在这个场景中 ,密钥 3 必须由发送者和接收者事先约定好

在这里插入图片描述

2.2.3 用暴力破解来破译密码

现在很多比赛给出的凯撒密文的密钥都是未知的,有很多在线工具可以枚举密钥进行暴力破解得到相应的明文。上述的密文可以使用暴力破解
在这里插入图片描述

假设你收到了以下用恺撒密码加密过的密文 ,但你不知道密钥(平移的字母数)请破译这段密文。PELCGBTENCUL
自己找个在线网站爆破即可,key1 #13: CRYPTOGRAPHY

2.2 简单的替换密码

恺撒密码是通过将明文中所使用的字母表平移来生成密文的。但是,如果我们将字母表中的 26 个字母,分别与这 26 个字母本身建立一对一的对应关系,那么无论哪一种对应关系就都可以作为密码来使用。这种将明文中所使用的字母表替换为另一套字母表的密码称为简单替换密码( simple substitution cipher )恺撒密码也可以说是简单替换密码的一种
在这里插入图片描述

2.2.1 简单替换密码的加密与解密

加密与凯撒密码一样,按照对应关系进行替换即可。而解密需要得到相应的替换表吗,才能进行解密。

2.2.2 简单替换密码的密钥空间

所谓密钥空间,就是明文可使用的所有的密文的集合
凯撒密码使用暴力破解相对而言,找出明文不难。但是对于替换密码而言,其密钥空间有26!个,如果运气好那么第一次就能找到明文,如果运气不好,那需要60亿年的时间!

2.2.3 用频率分析破译密码

频率分析利用了明文中的字母的出现频率与密文中的字母的出现频率一致这一特性。尽管
篇幅较长 ,但为了让大家体会到破译密码的感觉 ,我们还是来实际尝试破译一段密文吧。
假设你得到了下面一段密文 ,已知明文是用英语写的 ,并且是通过简单替换密码进行的加
密 ,但是你不知道作为密钥的替换表。下面就让我们来破译这段密文

MEYLGVIWAMEYOPINYZGWYEGMZRUUYPZAIXILGVSIZZMPGKKDWOMEPGROEIWGPCEIPAMDKKEYCIUYMGIFRWCEGLOPINYZHRZMPDNYWDWOGWITDWYSEDCEEIAFYYWMPIDWYAGTYPIKGLMXFPIWCEHRZMMEYMEDWOMGQRYWCEUXMEDPZMQRGMEEYAPISDWOFICJILYSNICYZEYMGGJIPRWIWAIHRUNIWAHRZMUDZZYAMEYFRWCEMRPWDWOPGRWAIOIDWSDMEIGWYMSGMEPYYEYHRUNYARNFRMSDMEWGOPYIMYPZRCCYZZIOIDWIWAIOIDWEYMPDYAILMYPMEYMYUNMDWOUGPZYKFRMIMKIZMEIAMGODTYDMRNIWASIKJYAISIXSDMEEDZWGZYDWMEYIDPZIXDWODIU2RPYMEYXIPYZGRPDMDZYIZXMGAYZNDZYSEIMXGRCIWWGMOYM

频率分析简言之是不断尝试的过程,在竞赛中通常使用的是工具进行爆破。上述的密文经过不断地猜测与尝试,加上标点符号与空格后的明文是
"The Fox and the Grapes’*
One hot summer’s day , a Fox was strolling through an orchard till he came to
a bunch of grapes just ripening on a vine which had been trained over a lofty
branch. " Just,.the thing to quench my thirst , " quoth he. Drawing back a few
paces , he took a run and a jump, and just missed the bunch. Turning round
again with a one , two, three, he jumped up, but with no greater success. Again
and again he tried after the tempting morsel , but at last had to give it up ,
and walked away with his nose in the air, saying: ” 1 am sure they are sour. M
It is easy to despise what you cannot get.

第三章·对称密码(共享密钥密码)

3.1 从文字序列密码到比特序列

将现实世界的东西映射成为比特序列的操作叫做编码
例如 midnight ( 深夜 )这个词 ,我们可以对其中的每个字母逐一进行编码 ,这种编码规则叫作 ASCII。
在这里插入图片描述

3.2 XOR

异或运算规则,总结一下就是相同出0,不同出1
在这里插入图片描述
使用XOR进行加密解密也是一种比较高强度的方案,任何一个密文两次异或后都会得到其本身

3.3 一次性密码本——绝对不会被破译的密码

3.3.1 一次性密码的加密

一次性密码本是一种非常简单的密码 ,它的原理是 “将明文与一串随机的比特序列进行
X0R 运算”。
如果将硬币的正面设为 0 , 反面设为 1,则通过不断掷硬币就能够产生这样一串随
机的比特序列。下面我们将明文 midnight 这个字符串通过 ASCII 进行编码并产生一串比特序列。
在这里插入图片描述在这里 ,明文被编码为一串长 64 比特的比特序列。
然后我们再来产生一个和明文长度相同的 64 比特的随机比特序列 ,这个序列就是 X0R 加
密的密钥。下面这个比特序列 ,就是我刚刚掷了 64 次硬币所产生的。
在这里插入图片描述下面我们将明文与密钥的比特序列进行 X0R 运算 ,并得到一串新的比特序列 , 这次运算的
结果也就是一次性密码本的密文。
在这里插入图片描述一次性密码本是不容易被破译的。这样产生的比特序列如果硬要显示在计算机上 ,那么显示结果看上去就像是乱码一样 ,因此密文通常不会被还原为字符 ,而是被作为二进制数据来处理。

3.3.2 一次性密码的解密

相应的使用秘钥进行XOR就能得到明文

3.3.3一次性密码是无法破解的

为什么一次性密码本是绝对无法破译的呢?
我们假设对一次性密码本的密文尝试进行暴力破解 ,那么总有一天我们会尝试到和加密时相同的密钥 ,也就能解密出明文 midnight , 这是毋庸置疑的事实。然而一下面这一点非常重要——即便我们能够解密出 midnight: 这个字符串 ,我们也无法判断它是否是正确的明文。

这是因为在对一次性密码本尝试解密的过程中 ,所有的 64 比特的排列组合都会出现 ,这其
中既会包含像 aaaaaaaa、abcdefgh 、 ZZZZZZZZ 这样的规则字符串 ,也会包含 midnight 、
onenight 、mistress 等英文单词 , 还会包含 %Ta _ Aj vX、HY ( & JY ! z 、5 ) 、 ER # f 6 等看不
懂的组合。由于明文中所有可能的排列组合都会出现 ,因此我们无法判断其中哪一个才是正确
的明文( 也就是用哪个密钥才能够正确解密 )

所谓暴力破解 ,就是按顺序将所有的密钥都尝试一遍 , 并判断所得到的是不是正确的明文
的方法。然而 , 在一次性密码本中 ,由于我们无法判断得到的是不是正确的明文 ,因此一次性
密码本是无法破译的。

3.4 DES

3.4.1 什么是DES?

DES ( Data Encryption Standard ) 是 1977 年美国联邦信息处理标准( FIPS ) 中所采用的一种
对称密码( F1PS 46-3 )D DES — 直以来被美国以及其他国家的政府和银行等广泛使用。

3.4.2 加密与解密

DES是将64比特的明文加密成64比特的密文,密钥长度为56比特(这是因为明文中每隔7位就会设置一个用于检查错误的比特)
DES 是以 64 比特的明文( 比特序列 ) 为一个单位来进行加密的 ,这个 64 比特的单位称
分组。一般来说,以分组为单位进行处理的密码算法称为分组密码( block cipher ),DES 就是
分组密码的一种。

DES 每次只能加密 64 比特的数据 ,如果要加密的明文比较长 ,就需要对 DES 加密进行迭
代( 反复 ),而迭代的具体方式就称为模式( mode )。
在这里插入图片描述

3.4.3 DES的结构(Feistel网络)

DES 的基本结构是由 Horst Feistel 设计的 , 因此也称为 Feistel 网络( Feistel network )、
Feistel 结构( Feistel structure )或者 Feistel 密码( Feistel cipher )。这一结构不仅被用于 DES,还被用于其他很多的算法中。
在Feistel网络中,加密的各个步骤被称为轮。整个加密过程就是被称为若干次轮的循环。DES 是一种 16 轮循环的 Feistel 网络
在这里插入图片描述简单解释在一轮中的过程:

1 ) 将输入的数据等分为左右两部分。
(2) 将输人的右侧直接发送到输出的右侧。
(3 ) 将输入的右侧发送到轮函数。
(4 ) 轮函数根据右侧数据和子密钥 ,计算出一串看上去是随机的比特序列。
(5 ) 将上一步得到的比特序列与左侧数据进行 XOR 运算 ,并将结果作为加密后的左侧。

但是,这样一来 “右侧” 根本就没有被加密,因此我们需要用不同的子密钥对一轮的处理
重复若干次 ,并在每两轮处理之间将左侧和右侧的数据对调。
图 3 -4 展现了一个 3 轮的 Feistel 网络,3 轮加密计算需要进行两次左右对调。对调只在两
轮之间进行 ,最后一轮结束之后不需要对调。
在这里插入图片描述
那么DES应该怎么解密呢?
有多个轮的情况下也是一样的。也就是说 ,Feistel 网络的解密操作只要按照相反的顺序来
使用子密钥就可以完成
了 ,而 Feistel 网络本身的结构 ,在加密和解密时都是完全相同的

Feistel网络的性质

  1. 轮数可以任意增加
  2. 加密时使用任何轮函数都可以正确解密,即便用轮函数的输出结果无法逆向计算出输入的值( 即该函数不存在反函数 )也没有问题。轮函数可以无需考虑解密的问题 ,可以被设计得任意复杂。
  3. 加密和解密可以用完全相同的结构来实现 ,在Feistel 网络的一轮中 ,右半部分实际上没有进行任何处理. 这在加密算法中看起来是一种浪费 ,但却保证了可解密性
3.4.4 查分分析与线性分析

差分分析是一种针对分组密码的分析方法 ,这种方法由 Biham 和 Shamir 提出 ,其思路是
改变一部分明文并分析密文如何随之改变”。理论上说,即便明文只改变一个比特 ,密文的比特排列也应该发生彻底的改变。于是通过分析密文改变中所产生的偏差 ,可以获得破译密码的线索
此外 ,还有一种叫作线性分析的密码分析方法 ,这种方法由松井充提出, 其思路是 “将明文和密文的一些对应比特进行 XOR 并计算其结果为零的概率” 如果密文具备足够的随机性 ,则任选一些明文和密文的对应比特进行 XOR 结果为零的概率应该为如果能够找到大幅偏离的部分 ,则可以借此获得一些与密钥有关的信息。使用线性分析法,对于 DES 只需要 247 组明文和密义就能够完成破解 , 相比需要尝试 256 个密钥的暴力破解来说,所需的计算量得到了大幅减少。

差分分析和线性分析都有一个前提 ,那就是假设密码破译者可以选择任意明文并得到其加密的结果,这种攻击方式称为选择明文攻击

3.5 三重DES

3.5.1 什么是三重DES?

三重 DES ( triple-DES ) 是为了增加 DES 的强度 ,将 DES 重复 3 次所得到的一种密码算法,也称为 TDEA ( Triple Date Encryption Algorithm ),通常缩写为 3DES。

3.5.2 三重DES的加密

在这里插入图片描述在三重DES中加入解密的操作令人费解
其实这是为了兼容以前的DES,因为一次加密一次解密就恢复了原来的明文,因此 ,以前用 DES 加密的密文 ,就可以通过这种方式用三重 DES 来进行解密。也就是说,三重 DES 对 DES 具备向下兼容性

3.5.3 三重DES的解密

与加密的时候正好相反,以密钥3-密钥2-密钥1的顺序执行解密-加密-解密的操作
在这里插入图片描述

3.6 AES与Rijndael

AES其实就是继承DES而形成的一种新标准的对称密码算法,Rijndael是一种分组密码算法,这一部分需要深入了解的请看电子档

第四章·分组密码的模式

4.1 什么是分组密码的模式?

DES与AES都是分组密码,并且只能加密固定长度的明文。如果需要加密任意长度的明文,就需要对分组密码进行迭代,而分组密码的迭代方法就叫做模式
现在主要的模式有: ECB、CBC、CFB、OFB、CTR
• ECB 模式:Electronic CodeBookmode ( 电子密码本模式 )
• CBC 模式:Cipher Block Chaining mode ( 密码分组链接模式 )
• CFB 模式:Cipher FeedBack mode ( 密文反馈模式 )
• OFB 模式 :Output FeedBack mode ( 输出反馈模式 )
• CTR 模式:CounTeR mode ( 计数器模式 )

4.2 分组密码的模式

4.2.1 分组密码与流密码

密码算法可以分为分组密码流密码两种
分组密码( block cipher )是每次只能处理特定长度的一块数据的一类密码算法。此外,一个分组的比特数就称为分组长度( block length )„
例如 ,DES 和三重 DES 的分组长度都是 64 比特。这些密码算法一次只能加密 64 比特的明文 ,并生成 64 比特的密文。
AES 的分组长度为 128 比特 ,因此 AES —次可加密 128 比特的明文 ,并生成 128 比特的密文。
流密码( stream cipher ) 是对数据流进行连续处理的一类密码算法。流密码中一般以 1 比特 、8 比特或 32 比特等为单位进行加密和解密。分组密码处理完一个分组就结束了 , 因此不需要通过内部状态来记录加密的进度 ;相对地 ,流密码是对一串数据流进行连续处理 ,因此需要保持内部状态。

4.2.2 明文分组与密文分组

明文分组是指分组密码算法中作为加密对象的明文。明文分组的长度与分组密码算法的分组长度是相等的。
密文分组是指使用分组密码算法将明文分组加密之后所生成的密文
在这里插入图片描述

4.3 ECB模式

4.3.1 什么是ECB模式?

明文分组加密后的结果将直接成为密文分组

ECB模式下的加密
在这里插入图片描述
ECB模式下的解密在这里插入图片描述使用ECB模式加密的时候,相同的明文分组会转换成为相同的密文分组。也就是说,可以看做一个巨大的“明文分组-密文分组”的对应表,因此ECB模式也叫作电子密码本模式
当最后 一个明文分组的内容小于分组长度,需要用一些特定的数据进行填充

4.3.2 ECB模式的特点

ECB模式是所有模式中最简单的一种,明文分组与密文分组是一一对应的。如果在明文中有多个相同的明文分组,那么再密文中也会有多个相同的密文。所以只需要观察密文,就能知道有怎样的重复组合,并以此为线索来破解密文。所以ECB模式并不是安全的。

4.3.3 对ECB模式的攻击

在ECB模式中,每个明文分组都是独立地加密解密,这其实是一个很大的弱点。
举个栗子:
假设存在攻击者 Mallory,他能够改变密文分组的顺序。当接收者对密文解密的时候,由于密文分组的顺序被改变,因此相应的明文分组的顺序也会改变。也就是说,攻击者无需破译密码就能够操纵明文

假设分组长度为128bit(16字节),某银行的转账请求数据有下面三个分组构成:
分组1:付款人的银行账号
分组2:收款人的银行账号
分组3:转账金额

假设现在有一个转账请求如下:
付款人A-5374向收款人B-6671转账1亿元
在这里插入图片描述
接下来攻击者将分组1和分组2的顺序调换
在这里插入图片描述
这样的话就是收款人向付款人转账了!!完全相反!!!

在 ECB 模式中 , 只要对任意密文分组进行替换 ,相应的明文分组也会被替换。此外 ,Mallory 所能做的还不仅限于替换 ,例如 : 如果将密文分组删除 ,则相应的明文分组也会被删除 ,如果对密文分组进行复制 ,则相应的明文分组也会被复制

4.4 CBC模式

4.4.1 什么是CBC模式?

CBC 模式的全称是 Cipher Block Chaining 模式( 密文分组链接模式 ),之所以叫这个名字 ,是因为密文分组是像链条一样相互连接在一起的
在 CBC 模式中 ,首先将明文分组与前一个密文分组进行 XOR 运算 , 然后再进行加密

CBC模式的加密
在这里插入图片描述
CBC模式的解密
在这里插入图片描述CBC模式与ECB模式的区别:
在这里插入图片描述

4.4.2 初始化向量

当加密第一个明文分组时 ,由于不存在 “前一个密文分组”,因此需要事先准备一个长度为—个分组的比特序列来代替 “前一个密文分组”,这个比特序列称为初始化向量( InitializationVector ), 通常缩写为 IV。一般来说 ,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。

假设在CBC模式中,每次加密都采用同一个初始化向量,这样的话,密码破译者能够得到怎样的信息?
如果永远使用同一个初始化向量,当用同一密钥对同一明文进行加密的时候,密文是相同的。
例如 , 密码破译者间隔一周收到了两份相同的密文。于是 ,密码破译者无需破译密码 , 就可以判断出 : 这份密文和上周的密文一样 ,因此两份密文解密所得到的明文也是一样的。

4.4.3 CBC模式的特点

明文分组在加密之前会与“前面一个密文分组”进行XOR运算,因此即便明文分组1与明文分组2是相等的。密文分组1和2的值也不一定是相同的。所以,ECB模式的缺陷在CBC模式中就不存在了。
密文分组损坏但没有影响密文分组长度,损坏了一块密文,最多影响两个明文块,但密文分组的长度只要发生了变化就无法解密(比如一些比特的缺失)
在这里插入图片描述

4.4.4 对CBC模式的攻击

对初始化向量的任意比特反转,那么明文分组中的相应比特也会反转
在这里插入图片描述

4.4.5 填充提示攻击

利用分组密码中的填充部分进行攻击的方式
在分组密码中 ,当明文长度不为分组长度的整数倍时 ,需要在最后一个分组中填充一些数据使其凑满一个分组长度 在填充提示攻击中,攻击者会反复发送一段密文 ,每次发送时都对填充的数据进行少许改变。由于接收者( 服务器 )在无法正确解密时会返回一个错误消息,攻击者通过这一错误消息就可以获得一部分与明文相关的信息。这一攻击方式并不仅限于 CBC 模式 ,而是适用于所有需要进行分组填充的模式。

4.4.6 CBC模式的应用实例

确保互联网安全的通信协议之一 SS1/TLS, 就是使用 CBC 模式来确保通信的机密性的

仿CBC模式;

思考一下。下面的仿CBC模式有什么性质呢?
在这里插入图片描述
这个模式下仿CBC模式实际上是与ECB模式一样的

4.5 CFB模式

4.5.1 什么是CFB模式?

CFB 模式的全称是 Cipher FeedBack 模式( 密文反馈模式 )。在 CFB 模式中,前一个密文分组会被送回到密码算法的输入端。所谓反馈 ,这里指的就是返回输入端的意思。

CFB模式的加密
在这里插入图片描述
CFB模式的解密
在这里插入图片描述CBC模式与CFB模式的区别:
在CFB模式中,明文分组和密文分组之间并没有经过 “加密” 这一步骤,而只有XOR操作。
在这里插入图片描述

4.5.2 初始化向量

和CBC模式中的初始化向量是一致的

4.5.3 CFB模式与流密码

一次性密码是把明文随机比特序列进行XOR运算来生成密文。而CFB模式是将明文分组密码算法的输出进行XOR运算来生成密文分组。所以在通过XOR运算这一点上,两者是相似的。
CFB模式中密码算法所生成的比特序列是密钥流,在 CFB 模式中 ,密码算法就相当于用来生成密钥流的伪随机数生成器 , 而初始化向就相当于伪随机数生成器的“种子”

4.5.4 对CFB模式的攻击

对 CFB 模式可以实施重放攻击( replay attack )。
有一天 ,Alice 向 Bob 发送了一条消息. 这条消息由 4 个密文分组组成3 主动攻击者Mallory 将该消息中的后 3 个密文分组保存了下来。转天 ,Alice 又向 Bob 发送了内容不同的 4个密文分组( 我们假设 Alice 使用了相同的密钥 )。Mallory 用昨天保存下来的 3 个密文分组将今天发送的后 3 个密文分组进行了替换。
于是 ,当 Bob 解密时 ,4 个分组中就只有第 1 个可以解密成正确的明文分组 ,第 2 个会出错 ,而第 3 个和第 4 个则变成了被 Mallory 替换的内容( 也就是昨天发送的明文内容 )( 图4 - 11 )。Mallory 没有破解密码 ,就成功地将以前的电文混人了新电文中。而第 2 个分组出错到底是通信错误呢 ,逐是被人攻击所造成的呢? Bob 是无法做出判断的。要做出这样的判断 ,需要使用消息认证码。
在这里插入图片描述这里也很好理解,因为替换的是后面三个,第二个密文因为不是正确的密文,所以明文分组2会出错,但是密文分组2适配密文分组3,所以密文分组3不会出错,并且被成功地替换,明文分组4同理。

4.6 OFB模式

4.6.1 什么是OFB模式?

OFB 模式的全称是 Output-Feedback 模式( 输出反馈模式 )。在 OFB 模式中,密码算法的输出会反馈到密码算法的输入中
注意:密文不会再像CFB模式中一样作为输入,密钥流经过不断地加密,每次都单独参与加密

OFB模式的加密
在这里插入图片描述OFB模式的解密

在这里插入图片描述

4.6.2 初始化向量

与CBC,CFB模式中的初始化向量一致

4.6.3 OFB与CFB模式的区别

在这里插入图片描述
由于CFB中是对密文分组进行反馈的,因此必须从第一个明文分组开始按顺序进行加密,也就是说无法跳过明文分组1而对明文分组2进行加密
相反在OFB模式中,XOR所需要的比特序列可以事先通过密码算法生成。和明文分组无关,这意味着只要提前准备好密钥流就能完成快速加密,生成密钥的操作可以和进行XOR运算的操作并行

4.7 CTR模式

4.7.1 什么是CTR模式?

CTR 模式的全称是 COUNTER 模式( 计数器模式 )。CTR 模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码

CTR模式的加密

在这里插入图片描述
CTR模式的解密

在这里插入图片描述

4.7.2 计数器的生成方法

在这里插入图片描述按照上述生成方法 ,可以保证计数器的值每次都不同。由于计数器的值每次都不同 ,因此每个分组中将计数器进行加密所得到的密钥流也是不同的。也就是说,这种方法就是用分组密码来模拟生成随机的比特序列

4.7.3 OFB与CTR的区别

CTR模式与OFB模式是相似的,都是流密码。
OFB模式是将加密的输出反馈到输入
CTR模式是将计数器的值用于输入

在这里插入图片描述

4.7.4 CTR模式的特点

CTR 模式中可以对任意顺序对分组进行加密和解密 ,因此在加密和解密时需要用到的 “计数器” 的值可以由 nonce 和分组序号直接计算出来。这一性质是 OFB 模式所不具备的

4.8 分组密码的比较

在这里插入图片描述

第五章·公钥密码

5.1 公钥密码

5.1.1 什么是公钥密码?

因为在对称密码中,加密与解密使用的是相同的密钥,存在安全问题,而且需要面对密钥配送问题。公钥密码可以解决这个问题
接收者先发送加密密钥给发送者,发送者将加密后的密文发送给接收者,接收者再用解密密钥对密文进行解密。


公钥密码分为加密密钥解密密钥,加密密钥是可以被公开的,解密密钥是不能被公开的。因为结合上面所说的,那个是接收者应该自己保留的。

公钥密码的通信流程
在这里插入图片描述

5.2 RSA

这部分的专题我觉得真正要学懂需要花时间,建议先学一下RSA算法中的几个变量,以及一些规则。这对于做题的时候很重要!
RSA算法详解
另外,对ctf感兴趣的,平时有练密码学方向的朋友可以看看我总结的这篇RSA专题
RSA专题
这一部分就这样跳过了!!但是大家一定要认真学RSA,这是很重要的一部分内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值