概述 炒鸡蛋与对称密码
编码
计算机操作的对象并不是文字,而是由0和1排序成的比特序列。无论是文字、图像、声音、视频还是程序,在计算机中都是通过比特序列来表示的。
执行加密操作的程序,就是将表示明文的比特序列转换为表示密文的比特序列。
XOR
1个bit的XOR
比特序列的XOR
DES
什么是DES
DES的加密与解密
DES每次只能加密64比特的数据,如果要加密的明文比较长,就需要对DES加密进行迭代,而迭代的具体方式就称为模式(mode)
DES的结构
DES的基本结构是由Horst Feistel设计的,因此也称为Feistel网络、Feistel结构或者Feistel密码。这一结构不仅被用于DES,在其他很多密码算法中也有应用。
图解
上方输入:“左侧”与“右侧”表示在Feistel网络中一轮的输入(明文)。他们被等分为左右两边。
下方输出:表示本轮的输出(密文)。左半部分为“加密后的左侧”,右半部分为“右侧”。
中间的“子秘钥”是指的本轮加密使用的秘钥。在Feistel网络中每一轮都需要使用一个不同的子秘钥。是一个局部秘钥(subkey)
轮函数的作用是根据“右侧”和子秘钥生成对“左侧”进行加密的比特序列,他是该密码系统的核心。将轮函数的输出与“左侧”进行XOR运算,输出的结果就是加密后的左侧。
但是,只有左侧被加密了,所以我们需要使用不同的子秘钥对一轮的处理重复若干次,并在两轮处理之间将左侧和右侧的数据对调。
3轮加密只需要进行两次左右对调。对调只在两轮之间进行,最后一轮结束不进行对调。
解密
将输出的加密结果与秘钥重新进行一次运算,即可还原明文。
XOR的特性,两个相同的数进行XOR的结果一定为0
多伦的情况下也是一样,只需要按照想反的顺序使用子秘钥即可。
DES的性质
1.轮数可以任意增加,无论运行多少轮的加密计算,都不会发生无法解密的情况。
2.加密时无论使用任何函数做为轮函数都可以正确解密。即便轮函数输出的结果不可逆也能成功的解密,所以轮函数可以被设计得任意复杂。
3.加密和解密可以用完全相同的结构来实现。
差分分析与线性分析
三重DES
现在DES已经可以在现实时间内被暴力破解,因此需要一种替代DES分组密码,三重DES就是出于这个目的被开发出来的。
什么是三重DES
三重DES的加密
明文经过三次的DES处理,才能成为最后的密文,由于DES密钥的长度实际上是56bit,因此三重DES的密钥长度就是56x3=168bit。
三重DES并不是进行三次DES加密,而是加密->解密->加密。目的是为了让三重DES能够兼容普通的DES。
如果三重DES中所有的密钥都相同时,三重DES就等同于普通的DES。因为前两步 加密->解密。所以以前通过DES加密的密文,也可以通过这种方式用三重DES进行解密。也就是三重DES对DES具备向下的兼容性。
三重DES的分类
DES-EDE2:如果密钥1和密钥3使用相同的密钥,而密钥2使用不同的密钥(也就是2个DES密钥),这种DES就成为DES-EDE2.EDE是表示的加密(Encryption) - 解密(Decryption) - 加密(Encryption)这个过程。
DES-EDE3: 密钥 1、2、3全部使用不相同的密钥
**
三重DES的解密
AES
什么是AES
Rijndael
什么是Rijndael
Rijndael的加密与解密
Rijndael也是由多个轮构成的。
每轮分为4个步骤。
SubBytes —> ShiftRows —> MixColumns —>AddRoundKey 四个步骤。
Rijndael的输入为128bit。也就是16字节。首先逐字节地对16字节的输入数据进行SubBytes处理