图解密码学.第三章
第三章 对称密码
- XOR运算
- 一次性密码本
- DES
- 三重DES
- AES
- Rijindael
1.XOR运算
XOR运算,中文简称异或
0 XOR 0 = 0
1 XOR 0 = 1
1 XOR 1 = 0
相同为0不同为1 运算符号:⊕
A 0 1 0 0 1 1 0 0
B 1 0 1 0 1 0 1 0 ⊕
1 1 1 0 0 1 1 0 A ⊕ B
因为 XOR 相同两个数字运算为0
所以 A⊕B⊕B = A 即对同一比特序列进行两次XOR运算就能便会原来
2.一次性密码本-不会被破译的密码
一次性密码本的加密
首先将消息按ascii编码 转换成比特序列,在随机生成和消息等长的比特序列(XOR密钥)和消息进行XOR运算,加密结束
一次性密码本解密
将密文和XOR密钥进行运算,得到明文
一次性密码本无法破译:因为即使还原出正确的单词也无法判断是否就是明文,因为在破译的过程中有很多可以被理解的打你
- 因此,一次性密码本是无条件安全的:在理论上无法破译
为什么没被使用
-
密钥配送问题:发送密文就要放能破解密文的密钥,但是不能保证密钥发送时不被监听,但如果有方式能安全的将密钥发送过去,为什么不直接发送明文呢?
-
密钥保存问题:密钥长度和密钥长度等长,为了防止被破译,要妥善保管密钥,但是保护了和明文一样长的密钥,为什么不直接不保护明文呢?
-
密钥重用:不能重用过去的随机比特,一旦泄露,过去的通信都被泄露
-
密钥同步:不能错位,错位的信息无法揭秘
3.DES
DES 是对称密码,现在DES能够被暴力破解,除了用它解密以前的密文,不应该再使用DES
-
将64比特明文加密成64比特密文的对称密码算法,密钥长度56比特,每隔7比特设置错误检验比特
-
以64比特为单位进行加密,64称为一组,分组,分组为单位进行处理的密码算法称为分组密码
-
模式:当数据超过一组,需要加密算法进行迭代时,迭代的具体方式称为模式
DES的结构(Feistel网络)
- 加密的各个步骤称为轮
- DES是一种16轮循环的Feistel网络
网络中的一轮
整体流程:
- DES 输入数据为64比特,将输入数据等分为左右两侧,每侧均为32比特
- 子密钥指本轮加密所使用的密钥,每一轮需要使用一个不同的子密钥
- 轮函数f:
1.根据右侧和子密钥 创建出对左侧加密的比特序列
2.将论函数输出与左侧XOR运算,结果为加密后的左侧
3.右侧直接输出
以上为一轮
每轮完成后需要进行左右对调,三轮两次
解密将上述步骤重新运行一次即可解密
- 差分分析:改变一部分明文并分析密文如何随之改变,通过改变明文密文所产生的偏差,可以获得破译密码的线索。
- 线性分析:思路(将明文与密文对应的比特进行XOR计算其结果为零的概率),如果密文具备足够随机性,则任意选择一些明文和密文的对应比特XOR结果为零的概率应为1/2,
如果找到大幅度偏离1/2的部分,则可获得一些与密钥有关的信息
两者的前提:可以选择任意明文并得到加密结果:选择明文攻击
4.三重DES
三重DES:为了增加DES的强度,将DES重复三次所得到的算法,也称为TDEA,3DES
三重DES的加密机制如图所示:
由于DES的密钥实质是56比特,因此三重DES的密钥 56*3 = 168
-
三重DES:加密-》解密-》加密 目的:兼容普通DES
-
密钥1 和 3 相同 ,密钥2不同时 称为DES-EDE2
-
三种密钥都不同,称为DES-EDE3
三重DES的解密
5.AES
在2000年选出Rijndael的对称密码算法,确定其为AES
- 免费
- 通过竞争实现标准化
什么是Rijndael
- 分组长度和密钥长度可以32比特为单位,在128到256之间进行选择,
- 但是AES规格中,分组长度:128比特;密钥长度:128,192,256比特三种
Rijndael加密和解密
由多个轮构成
- 一轮分为:SubBytes, ShiftRows, MixColumns, AddRoundKey
- 称为SPN结构
输入分组128比特,16字节
-
SubBytes
流程:以每个字节的值(0~255的任意值)为索引,从一张拥有256个值的替换表(S-Box)查找出对应值的处理。将1字节的值替换成另一个字节的值
-
ShiftRows
流程:以四字节为单位的行,按照一定的规则向左评议,且每一行平移的字节数不同
-
MixColumuns
流程:对一个4字节的值进行比特运算,将其变为另外一个4字节值
-
AddRoundKey
流程:将上一输出与轮密钥进行XOR
以上为一轮,Rijndael需要10-14轮计算