一、基础知识
1.编码
计算机的操作对象是由0和1排列而成的比特序列,将现实世界的东西映射为比特序列的操作称为编码。
2.XOR运算
比特序列的XOR运算称为异或运算,记作⊕。
(1)1个比特的XOR运算规则
0 XOR 0 = 0,记作:0 ⊕ 0 = 0 ;
0 XOR 1 = 1,记作:0 ⊕ 1 = 1 ;
1 XOR 0 = 1,记作:1 ⊕ 0 = 1 ;
1 XOR 1 = 0,记作:1 ⊕ 1 = 0 。
(2)比特序列的XOR运算规则
假设A的比特序列为01001100,B的比特序列为10101010,则A与B做XOR运算的步骤如下。
0 1 0 0 1 1 0 0 …A
⊕ 1 0 1 0 1 0 1 0 … B
1 1 1 0 0 1 1 0 …A ⊕ B
两个相同的数,经XOR运算的结果为0,因此我们可以知道,A ⊕ B的结果与B做XOR运算,得到的结果为A。
1 1 1 0 0 1 1 0 …A ⊕ B
⊕ 1 0 1 0 1 0 1 0 … B
0 1 0 0 1 1 0 0 …A
不难发现,XOR运算的过程与加密解密的过程十分类似。假设拥有合适的密钥B,那么将A加密时,与B做一次XOR运算,得到的密文也就是A ⊕ B。解密时,将密文A ⊕ B与B做XOR运算,则可以得到明文A。
二、一次性密码本
即便使用暴力破解法边离整个密钥空间,一次性密码本(One-Time Pad)也无法被破解。
1.加密
将明文与一串随机的比特序列进行XOR运算,这一串随机的比特序列就是一次性密码本的密钥,如下图所示。
2.解密
将密文与密钥进行XOR运算,如下图所示。
3.无法破译
假设我们通过暴力破解的方法得到了midnight这个明文,也无法确认它是不是正确的明文。一次性密码本无法破译这一特性是由香农于1949年通过数学方法加以证明的。一次性密码本是无条件安全的,是理论上无法破译的。
4.未被使用的原因
(1)密钥的配送方面,一次性密码本要求密钥和明文等长,这就意味着其在密钥的配送中存在巨大的问题,假设密钥成功发送,就意味着发送者需要发送跟明文长度相同的一串密钥,那么为什么不直接发送明文本身呢;
(2)密钥的保存方面,密钥的存在是为了将明文加以保护,而一次性密码本的密文和明文等长,这就意味着我们将保护明文的任务替换成了跟它等长的密钥,问题没有得到根本性的解决;
(3)密钥的重用方面,一次性密码本的密钥不能重复使用;
(4)密钥的同步方面,一次性密码本需要找到跟明文等长且具有随机性的比特序列作为密钥,如果明文是大小为1GB的文件,则密钥也为大小也为1GB,而且在通信过程中,还要避免差错,难度过大;
(5)密钥的生成方面,一次性密码本需要找到跟明文等长且具有随机性的比特序列作为密钥,密钥必须完全随机,并不能是电脑生成的伪随机数,而是真正的随机。
三、DES
1.加密和解密
DES是以64比特的明文为一个单位来解密的,这个64比特的单位称为分组,一般来说,以分组为单位进行处理的密码算法称为分组密码,其加密和解密的过程如下图所示。
2.DES的结构(Feistel网络)
DES的基本结构被称为Feistel网络。在Feistel网络中,加密的各个步骤称为轮,加密过程就是进行若干轮的循环,其中一轮的计算流程如下图所示。
轮的具体计算步骤如下:
(1)将输入的数据等分为左右两部分。
(2)将输人的右侧直接发送到输出的右侧。
(3)将输入的右侧发送到轮函数。
(4)轮函数根据右侧数据和子密钥,计算出一串看上去是随机的比特序列。
(5)将上一步得到的比特序列与左侧数据进行xOR运算,并将结果作为加密后的左侧。
Feistel网络的性质:
(1)Feistel网络的轮数可以任意增加。
(2)加密时无论使用任何函数作为轮函数都可以正确解密。
(3)加密和解密可以用完全相同的结构来实现。
四、三重DES
1.什么是三重DES
为了增加DES的强度,将DES重复三次所得到的一种密码算法,简称为3DES。
2.加密机制
三重DES的加密方式如下图所示,明文经过三次DES处理之后变成相应的密文。
3.解密
三重 DES 的解密过程和加密正好相反,是以密钥3、密钥2、密钥1的顺序执行解密→加密→解密的操作,解密过程如下图所示。
五、AES
1.什么是AES
AES是取代前任标准DES而称为新标准的一种对称密码算法。
2.选拔过程
AES是被美国一个标准化机构选拔出来的密码算法,这些密码算法将称为美国的国家标准,也将称为世界性的标准。
六、Rijndael
1.什么是Rijndael
Rijndael于2000年被选为新一代标准密码算法——AES。
2.加密和解密
Rijndael并未使用Feistel网络作为其基本结构,而是使用了SPN结构。
七、小测验
1.字母→数字的映射和凯撒密码
凯撒密码中所使用的字母表包含A到Z共26个字母。如果我们将A映射为0、B映射为1、……Z映射为25,那么凯撒密码中平移3个字母的加密操作,在这个字母→数字的映射中相当于怎样的运算呢?
我的答案:A→3;
B→4;
C→5;
D→6;
E→7;
F→8;
G→9;
H→10;
I→11;
J→12;
K→13;
L→14;
M→15;
N→16;
O→17;
P→18;
Q→19;
R→20;
S→21;
T→22;
U→23;
V→24;
W→25;
X→0;
Y→1;
Z→2;
加密后=(加密前+3)mod26
2.一次性密码本与压缩
听了一次性密码本的讲解之后,Alice产生了下面的想法:
虽然一次性密码本的密钥需要与明文等长,但是我手上有数据压缩程序,只要用这个程序对一次性密码本的密钥进行压缩,不就可以把密钥变短了吗?
请问 Alice的想法正确吗?
我的回答:Alice的想法不对,因为一次性密码本的密钥是无法压缩的。
压缩的原理是找到文本中重复的内容,进行缩短替换,而一次性密码本的密钥是完全随机的,不存在重复内容,所以无法压缩。
3.对称密码的密钥需要多长
假设你能够使用的计算能力如下。
- 每台计算机每秒可尝试1020个密钥;
- 一共有10100台计算机;
- 所有的计算机可运转1020年。
在拥有如此强大计算能力的前提下,如果依然要保证无法通过暴力破解遍历整个密钥空间,那么密钥的长度到底需要达到多少比特呢?请从下列选项中选出正确的答案。
(A)只要512比特就够了。
(B)至少需要1024比特。
(C)至少需要4096比特。
(D)至少需要1万比特。
(E)100万比特也不够。
备注:这里我们估算的计算能力是远远超过实际情况的。相比之下,超级计算机“京”每秒可执行1016次浮点运算,宇宙中所有粒子的总数为1087个左右,宇宙的年龄为1011年左右。
我的答案:(A)只需要512比特就够了
①首先,一年365天=365×24时=365×24×60分=365×24×60×60秒=31622400秒
②计算机可以计算出的密钥总数为:1020×10100×1020×31622400=3.1622410147
③密钥长度为512比特一共含有密钥数为:2512>3.1622410147
所以512比特就够了。
4.对称密码的基础知识
下列说法中,请在正确的旁边画⚪,错误的旁边画×。
(1)对称密码中,加密的密钥和解密的密钥是相等的。
(2)将来,当计算机的计算能力足够高时,就可以在现实的时间内破译一次性密码本的密文。
(3)如果密钥长度为56比特,那么用暴力破解找到正确密钥需要平均尝试约228次。
(4)虽然AES是一种强度很高的对称密码算法,但在商用情况下需要向NIST支付授权费用。
(5)现在DES可以在现实的时间内被破译。
(6)AES标准所选定的密码算法叫作 Rijndael。
我的答案:(1)⚪(2)×(3)×(4)×(5)⚪(6)⚪
(2)一次性密码本是无法被破译的,即便能够破译出信息,也无法判断破译出的结果是不是明文。
(3)如果密钥长度为56比特,则说明密钥总数为256个。平均尝试次数是密钥总数的一半,也就是255次。
(4)AES是免费的,无需支付任何费用。