01. 对称密码——算法

密码算法

DES

首先声明!!!
由于DES的密文可以在短时间内被破译,现已不再使用。

是什么?

DES(Data Encryption Standard)是1977年美国联邦信息处理标准(FIPS)中采用的一种对称密码。

怎么做?(加密和解密)

DES将64 bits的明文加密成64 bits的密文。但实质上其密钥长度为56 bits,因为每隔7个比特会设置一个检查错误的比特。
由于每次只能加密64比特,所以当明文较长时,需要对加密进行迭代,迭代的方式即称为模式。(后续提及)

01. 对称密码——算法_第1张图片

DES加密和解密

DES的结构(Feistel网络)

在Feistel网络中,加密的各个步骤称为轮(round),整个加密过程就是进行若干次轮的循环。DES是一种16轮循环的Feistel网络。

01. 对称密码——算法_第2张图片

Feistel网络加密和解密

具体步骤:

  1. 输入的64比特数据划分为两个32比特,分别作为“左侧”LD和“右侧”RD输入。
  2. ((RD + 子密钥) --> 轮函数f) XOR (LD) = 加密后的LD 向下作为下一轮左侧
  3. RD直接向下作为下一轮右侧

其中,
“轮函数”:根据RD子密钥生成看似随机的比特序列,用于对LD加密。
“子密钥”:本轮加密所使用的密钥,每一轮都需要一个不同的子密钥(subkey)。

注意:
最后一轮加密后,不需要对调。
使用同一子密钥按照相反顺序,即可完成解密——加密解密结构相同
Feistel网络中轮数可以任意增加,可以使用任意函数作为轮函数(即使不存在反函数也OK!)。
越复杂越好!反正能解!
综上,无论任何轮数,任何轮函数,都可用相同结构加密和解密,且加密结果必定能正确解密。

三重DES

是什么?

三重DES(triple-DES)是为了增加DES的强度,重复3次所得到的一种密码算法,缩写3DES

怎么做?

其过程是 加密–解密–加密 ,为的是兼容普通的DES(当所有密钥相同时)。
使用两(三)种不同密钥的算法,称为DES-EDE2(3)(Encryption、Decryption)

结构

01. 对称密码——算法_第3张图片

DES-EDE3加密过程

现状

处理速度不高,除了向下兼容,很少用于新的用途。

AES——高级加密标准

2000年,AES(Advanced Encryption Standard)最终被确定为Rijndael对称密码算法。

什么是Rijndael

Rijndael的分组长度密钥长度可以选择以32比特为单位,在128到256比特的范围
AES规格,分组长度固定为128比特密钥长度只有128、192和256比特三种。

Rijndael的加密和解密

DES使用Feistel网络,Rijndael算法使用SPN结构(Substitution-Permutation network, 代替置换网络)。
与DES一样,Rijndael算法也是由多个构成,每一轮分为SubBytes、ShiftRows、MixColumns和AddRoundKey四个步骤。

加密四个步骤

输入分组为128比特,即16字节

  1. SubBytes(逐字节替换):以每个字节的值(0~255)为索引,从一张拥有256个值的替换表(S-Box)中查找对应值。

01. 对称密码——算法_第4张图片

SubBytes(逐字节替换)
  1. ShiftRows(行平移):以4字节为单位的行(row)按一定规则向左平移,且每一行平移的字节数不同。
    01. 对称密码——算法_第5张图片
ShiftRows(行平移)
  1. MixColumns(列混合):将每列4字节值根据矩阵运算转变为另外的值。

01. 对称密码——算法_第6张图片

MixColumns(列混合)
  1. AddRoundKey(轮密钥XOR):将每1字节与轮密钥进行XOR。
    01. 对称密码——算法_第7张图片
AddRoundKey(轮密钥XOR)

其解密过程也是使用相同的结构,顺序调换罢了。
在这种结构中,输入的所有比特在一轮中都会被加密,这个Feistel网络有所区别,使得其加密所需轮数更少,此外,加密过程还能以字节、行、列为单位并行计算

------本文图文参考书《图解密码技术》------

你可能感兴趣的:(笔记)