1. 分组加密算法
1.1 国密算法
国密算法,即国家商用密码算法,如SM系列的密码,常用的国密密码有:
密码分类 | 国产商用密码 | 国际商用密码 | |
---|---|---|---|
对称加密 | 分组加密(块加密) | SM1/SCB2 SM4/SMS4 SM7 | DES IDEA AES RC5 RC6 |
序列加密(流加密) | ZUC(祖冲之算法) SSF46 | RC4 | |
非对称/公钥加密 | 大数分解 | - | RSA DSA ECDSA Rabin |
离散对数 | SM2 SM9 | DH DSA ECC ECDH | |
密码杂凑(散列) | SM3 | MD5 SHA-1 SHA-2 |
-
SM1算法的加密强度与AES相当,但算法未公开,仅以IP核的形式存在于芯片中,调用该算法时,需要通过加密芯片的接口进行调用。
-
SM4算法,是无线局域网标准的分组数据算法,其加密流程介绍请阅读:SM4分组密码算法
-
SM7算法未公开,适用于非接IC卡应用包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通、公交一卡通)。
1.2 分组加密
分组加密(块加密)— Block Cyper:将明文分组成块,一次加密一个明文分组块。
从国密算法中可以知道,分组加密是对128比特的明文输入和128比特的加密密钥进行处理,生成128比特的密文输出,即分组加密算法只能加密固定长度的明文分组块。
但实际情况往往是明文的长度会远超过密码分组的长度,因此需要对分组加密算法进行迭代,才能将明文全部加密,采用的迭代方法就是分组加密算法的加密工作模式。
2. ECB模式
ECB模式:Electronic CodeBook mode,电子密码本模式
ECB模式是将明文分成固定长度的组块,然后对每个明文分组块使用相同的密钥进行独立加密或解密,且该加密的结果将直接作为密文分组。
ECB模式是最简单的分组加密算法的一种工作模式。
ECB模式的工作原理
当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据行进填充。
ECB模式的结构图
ECB模式的优点
- 简单、快速,利于并行计算(加解密)
- 单一密文损坏的话,不会影响到其他块的解密,即误差不会被传送
ECB模式的缺点
- ECB模式中明文分组与密文分组是一一对应的关系,因此相同的明文分组经过加密后都将转换成相同的密文分组
- 这样通过观察密文的情况就可知道明文的重复组合情况,并可依此进行破译,即不能隐藏明文
- 无需破译密码,仅通过密文可以操纵明文(进行删除、替换)
- 不能抵御重放攻击,可能对明文进行主动攻击
ECB模式是存在一定风险的!
由上述介绍可知,ECB模式只进行了分组和加密操作,且相同的明文分组加密后会得到相同的密文分组,于是需要设计让相同的明文分组和相同的密钥加密后得到不同的密文分组。基于此思想,在明文分组和密钥加密运算中加入一个干扰项,因此,引入以下工作模式。
3. CBC模式
CBC模式:Cipher Block Chaining mode,密文分组链接模式
CBC模式是先将明文分成若干个组块,然后每个明文分组与前一密文分组进行异或 \(XOR\) 运算,然后再进行加密。因此,每个密文分组都依赖于它前面的所有明文分组。
由于密文分组像链条一样相互连接在一起,因此称为密文分组链接模式。
从加密过程可知,第 \(0\) 块明文分组没有上一块密文分组来进行异或,于是引入一个初始化向量 \(IV(Initialization\ Vector)\) 来充当第一个干扰项,保证每条消息的唯一性。
CBC模式的工作原理
加密过程:
- 无法单独对一个中间的明文分组进行加密
- 明文的微小改变会导致其后全部密文分组发生改变
解密过程:
若密文分组中有一个分组损坏了
Case 1:该损坏的密文分组的长度没有改变,只有内容发生改变
解密时最多只有2个分组受到数据损坏的影响。
Case 2:该损坏的密文分组的长度发生改变(缺失或增添)
一旦密文分组中缺失或增添一些比特,则会导致密文分组的长度发生改变,之后的分组也会发生错位,将密文分组排列后进行解密,则会影响损坏的密文分组及后续所有的解密过程。
CBC模式的结构图
CBC模式的优点
- 每个密文分组均依赖于所有的信息块,不容易主动攻击,安全性优于ECB模式
- 适合传输长度长的报文,互联网安全的通信协议之一的SSL、IPSec就是采用CBC模式确保通信机密性的
CBC模式的缺点
- 发送方和接收方均需要知道初始化向量 \(IV\)
- 加密过程是串行的,无法被并行化(解密过程可以从两个相邻的密文分组中即可解密得到一个明文分组,即解密过程可以被并行化),且同样不能抵御重放攻击
4. CFB模式
CFB模式:Cipher FeedBack mode,密文反馈模式
CFB模式中密码算法的输入是前一个密文分组,再将该密文分组送到密码算法的输入端产生自同步的密钥流。其解密过程几乎就是颠倒的CBC的加密过程。
由于是将密文分组反馈到密码算法中,因此称为密文反馈模式。
CFB模式的工作原理
加密过程:
- 将前一个密文分组(或初始化向量 \(IV\))进行再加密;
- 将明文分组和上一步处理得到的再加密的密文分组进行异或。
需要使用一个与块的大小相同的移位寄存器,并用IV将寄存器初始化。然后,将寄存器内容使用块密码加密,然后将结果的最高x位与平文的x进行异或,以产生密文的x位。下一步将生成的x位密文移入寄存器中,并对下面的x位平文重复这一过程。解密过程与加密过程相似,以IV开始,对寄存器加密,将结果的高x与密文异或,产生x位平文,再将密文的下面x位移入寄存器。
与CBC相似,平文的改变会影响接下来所有的密文,因此加密过程不能并行化;而同样的,与CBC类似,解密过程是可以并行化的。
摘自分组加密的四种模式(ECB、CBC、CFB、OFB)
解密过程:
CFB模式的解密过程几乎就是颠倒的CBC模式的加密过程。
CFB模式的结构图
CFB模式的优点
- 隐藏了明文模式
- 分组密码转化为流模式
- 可以即时加密传送小于分组的数据
- 加密流程和解密流程中被加密的数据是前一段密文分组,因此即使明文数据的长度不是密钥的整数倍也是不需要填充的,这保证了数据长度在加密前后是相同的
- 与CBC模式类似,解密过程是可以并行化的
- 解密过程使用的是加密器
CFB模式的缺点
- CFB模式中是对密文分组进行反馈,因此必须从第一个明文分组开始按顺序进行加密,即加密过程无法并行化
- 与CBC模式相似,明文的改变会影响接下来的所有密文
- 误差传送:一个明文单元损坏会影响多个单元
5. OFB模式
OFB模式:Output FeedBack mode,输出反馈模式
由于是将密码算法的输出反馈给密码算法中,因此称为输出反馈模式。
OFB模式的工作原理
加密过程:
- 加密先将初始化向量 \(IV\) 用密钥加密生成密钥流
- 再将密钥流与明文流异或得到密文流
解密过程:
- 解密先将初始化向量 \(IV\) 用密钥加密生成密钥流
- 再将密钥流与密文流异或得到明文流 (加密和解密的流程是完全一样的)
OFB模式的结构图
OFB模式的优点
- 无需进行填充(因为是流密码),可以抵御重放攻击
- 可事先生成密钥流,和明文分组无关,即只要事先通过密码算法生成密钥流,后续只需要将明文/密文与密钥流进行异或即可快速完成加密/解密(异或运算很快)
- 上述即可认为:生成密钥流的操作和进行异或运算的操作是可以并行的
- 加解密结构相同,解密过程使用的是加密器
输出反馈模式(Output feedback, OFB)可以将块密码变成同步的流密码。它产生密钥流的块,然后将其与平文块进行异或,得到密文。与其它流密码一样,密文中一个位的翻转会使平文中同样位置的位也产生翻转。这种特性使得许多错误校正码,例如奇偶校验位,即使在加密前计算而在加密后进行校验也可以得出正确结果。
摘自分组加密的四种模式(ECB、CBC、CFB、OFB)
OFB模式的缺点
- 但如果对密钥流的一个分组加密后,如果其结果和加密前一份组相同,之后的密钥流将变成同一值的不断反复
- 加解密都依赖于前一段的数据,故加解密都不能并行
6. CTR模式
CTR模式:CounTeR mode,计数器模式
CTR模式与CFB模式和OFB模式一样,把分组密码转化为序列密码(流密码)。在本质上是通过将逐次累加的计数器采用分组密码加密产生密钥序列,按序列密码的方式进行加解密。最终的密文分组是通过将计数器加密得到的比特序列与明文分组进行异或 \(XOR\) 而得到的。
CTR模式的工作原理
CTR模式的结构图
CTR模式的优点
- CTR模式与OFB模式一样,无需填充,可抵御重放攻击
- CTR模式的特征类似于OFB模式,但它允许在解密时进行随机存取
- CTR模式的单一密文损坏并不会影响到其他块的解密,且支持并行运算(加解密),不会有密钥流重复循环出现的情况
- 由于加密和解密过程均可以进行并行处理,CTR适合运用于多处理器的硬件上
- 解密过程使用的是加密器
CTR模式的优点是可并行、效率高、Oi的计算可预处理、适合任意长度的数据、加解密速度快,而且在加解密处理方式上适合随机存取数据的加解密。因此,特别适合计算机随机文件的加密,因为随机文件要求能随机地访问。这对数据库加密是有重要意义的。
CTR模式的缺点
- 需要提供初始计数器值
- 没有错误传播,因此不适合用于数据完整性认证
7. 小结
ECB模式将明文分组直接单独进行加密得到密文分组。 \(\rightarrow\) 直接加密明文分组
CBC模式将明文分组先与前一个密文分组(或$ IV$)异或后再加密得到密文分组。 \(\rightarrow\) 对明文分组与前一个明文分组的异或结果加密
CFB模式将前一个密文(或 \(IV\))进行加密后再与明文异或得到密文。 \(\rightarrow\) 先加密前一个密文再与明文异或
OFB模式将 \(IV\) 进行加密得到密钥流,再将该密钥流与明文异或得到密文。 \(\rightarrow\) 先生成密钥流再与明文异或
CTR模式将计数器加密后再与明文分组异或得到密文分组。
其中,CFB、OFB、CTR三种模式属于流密码。
参考:
CBC模式解读
OFB模式解读
技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)
分组加密, 算法模式(ECB CBC CFB OFB)
可不可以通俗的解释一下加密相关系统中的iv(初始化向量)?
分组加密的四种模式(ECB、CBC、CFB、OFB)
CTR(Counter Mode Encryption)模式-信息安全工程师知识点