Straw's B1og.

分组加密及模式

字数统计: 1.6k阅读时长: 5 min
2024/05/27

分组加密及模式

最近感觉做了很多分组加密的题,每次解密的模式都是赛博厨子一个一个试过来的,逻辑啥的也有点不理解,在比赛里最头疼的就是这种比较难的加密了,主要不知道为什么错,想一步一步分析步骤,又很难看,最终还是得归总一下。

龟龟

常见分组加密

AES,DES,blowfish,sm4……(比赛里现在只遇到这些,以后遇到了会继续补充)

KEY

密钥是加密中最关键的一个东西,也是解密中不可获取的东西,以下为各种分组加密的表:

加密方式 AES DES Blowfish SM4
密钥长度(位=8bits) 16/24/32 8 4—56 16
重复次数 10/12/14 16 16 32
分组长度(位) 16 8 8 16

牢记这些能有效帮助我们判断或者是确认加密类型。

IV

IV(Initialization Vector)是许多任务作模式中用于将加密随机化的一个位块,由此即使同样的明文被多次加密也会产生不同的密文,避免了较慢的重新产生密钥的过程。是区别ECB模式和CBC模式的关键。IV的长度一般和分组长度相同。

ECB模式

最简单的加密模式即为电子密码本(Electronic codebook,ECB)模式。需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密。

在这种工作模式下,一个明文组只能固定地被加密成一个对应的密文组,一个密文组也只能固定地被解密成对应的密文组。他们彼此是一一对应的。设想我们有一个厚厚的密码本,每次加密时,我们只需要从密码本中查出明文所对应的密文就可以。这也是电码本模式名称的由来。对于短消息,ECB模式是比较适用的。但对于长消息,ECB模式就不太安全了。

ecb模式

最简单的EBC模式,解密只需找密文密钥。

CBC模式

密码分组链接(CBC,Cipher-block chaining)模式。在CBC模式中,每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量iv。

cbc加解密

其实是EBC模式的异或升级版,开局的异或交给了初始化向量,所以一般iv的长度跟分组长度相同。

加密是先异或再加密,解密是先异或再解密。

解密的话需要知道密文密钥还有iv。

Padding

有的模式,经典的AES-CBC,AES-ECB(经常被填充搞红温过),支持对非128比特整的数据进行加密,有的模式不支持。填充是用各种可以恢复的方法把数据流填充为128bits=16位。

CFB模式

密文反馈(CFB,Cipher feedback)模式类似于CBC,可以将块密码变为自同步的流密码,这个模式可以对非128比特的数据进行加密。

在CFB模式中,加密的基本过程如下:

  • 初始向量(IV)被加密,生成一个伪随机的分组输出。
  • 这个输出与明文的一部分(可以是一个比特,也可以是多个比特)进行异或运算,生成密文。
  • 生成的密文部分作为下一个分组的输入新IV,继续进行加密。

cfb加解密

CFB模式的结构和一次性密码本非常相似。一次性密码本是通过“明文”与“随机比特序列”进行XOR运算来生成“密文”的。而CFB模式则是通过将“明文分组”与“密码算法的输出”进行XOR运算来生成“密文分组”的。在通过 XOR来进行加密这一点上,两者是非常相似的。

CFB模式中由密码算法所生成的比特序列称为密钥流。在CFB模式中,密码算法相对于用来生成密钥流的伪随机数生成器,而初始化向量相当于伪随机数生成器的“种子”。

在CFB模式中,明文数据可以被逐比特加密,因此可以将CFB模式看作是一种使用分组密码来实现流密码的方式。

OFB模式

OFB模式是先用块加密器生成密钥流,然后将密钥流和明文流异或得到密文流,解密过程是重新异或一次。

可以一次计算出所有的密钥流,每次加解密只需要做异或操作。

这个就相对简单。

ofb加解密

CTR模式

CTR模式是使用随机数等方式产生一个IV,经过计数器累加+1后拼接成一个串,对这个串进行加密,然后和明文做异或操作。

ctr加解密

一般这个随机数产生的iv会放在加密后密文的最前面16位单独成一个组,或者是告诉你随机数的值,不然解密的话根本无法解密。

GCM模式

GCM是认证加密模式中的一种,一般只在AES中见到,它结合了两者的特点(GCM中的G就是指GMAC,C就是指CTR),能同时确保数据的保密性、完整性及真实性,另外,它还可以提供附加消息的完整性校验,加密流程如下图:

GCM加密

GCM可以提供对消息的加密和完整性校验,另外,它还可以提供附加消息的完整性校验。在实际应用场景中,有些信息是我们不需要保密,但信息的接收者需要确认它的真实性的,例如源IP,源端口,目的IP,IV,等等。因此,我们可以将这一部分作为附加消息加入到MAC值的计算当中。下图的Ek表示用对称秘钥k对输入做AES运算。最后,密文接收者会收到密文、IV(计数器CTR的初始值)、MAC值。

主要参考:

https://a-little-cat.github.io/2017/12/14/SM4.html

CATALOG
  1. 1. 分组加密及模式
    1. 1.1. 常见分组加密
    2. 1.2. KEY
    3. 1.3. IV
    4. 1.4. ECB模式
    5. 1.5. CBC模式
    6. 1.6. Padding
    7. 1.7. CFB模式
    8. 1.8. OFB模式
    9. 1.9. CTR模式
    10. 1.10. GCM模式