目录
1. 对称加密
2. 分组密码工作模式
2.1 ECB
2.2 CBC
2.3 CFB
2.4 OFB
2.5 CTR
2.6 XTS
3. DES/3DES
4. AES
5. SM4
1. 对称加密
对称加密是一种发送方和接收方都使用相同密钥对数据进行加解密的方法。它只提供保密性,不提供真实性。
由于对称分组加密以固定长度分组(DES固定64位分组,AES固定128位分组),但保密传输的消息内容不一定刚好是一个分组,对于长报文还需要划分为多个分组,因此为应对不同应用场景,分组密码还提供了各种工作模式。
2. 分组密码工作模式
2.1 ECB
ECB(Electronic Code Book)是分组密码最简单的操作模式。每个数据分组(下文称数据块)都以相同的方式加密。
图 1 ECB模式
由于每个数据块相互独立,因此可并行计算,提高效率,但相同的明文块始终会输出相同的密文块,难以抵抗统计分析攻击。因此只建议用在密钥保护等小数据量的安全保护。
2.2 CBC
CBC(Cipher Block Chaining):为了克服 EBC 的缺点,引入初始向量 IV,可以防止同样的明文块始终加密成同样的密文块。
IV 作为初始化变量,参与第一个明文块的异或,后续的每一个明文块和它前一个明文块所加密出的密文块相异或。
图 2 CBC 模式
2.3 CFB
CFB(Cipher Feedback)可以实现对明文进行逐比特加密。
该模式需要初始IV作为初始输入数据块,在标准中,CFB模式还需要提供一个整数s,用于表示每个明文\密文块包含s位,s取指包括1、8、64、128。在本文中,s= 128。
加密时,第一个输入数据块为IV,经由加密计算出第一个输出数据块,然后取该块的最高s 位与明文的最高s位进行异或,得到流密文块;剩余的block size(128位) - s位的数据作为高位与密文块s位数据进行拼接,作为下一个输入数据块,依次类推。因此该模式被称为密文反馈模式。
在本文中,s= 128,因此该数据块所有位将参与异或,得到的密文块继续作为下个输入数据库。
图 3 CFB模式
2.4 OFB
OFB(Output Feedback)与CFB模式类似,OFB是将IV加密后的数据直接作为下一个输入数据块,明文与该数据块异或后得到密文块。
二者区别仅仅在于密码算法的输入。
CFB模式中,密码算法的输入是前一个密文分组反馈到密码算法中,因此就叫“密文反馈模式”。
OFB模式中,密码算法的输入是密码算法的前一个输出反馈给密码算法,因此叫“输出反馈模式”。
图 4 OFB模式
2.5 CTR
CTR(Counter)模式,每个数据块对应一个逐次累加的计数器,通过对计数器进行加密来得到输出块,最终与明文进行异或,得到密文块。
图 5 CTR模式
CTR模式能够对多块报文加解密进行并行处理,提升了处理效率;在该模式下,进行异或之前所有操作不依赖明文或者密文,因此可以进行预处理,极大提高吞吐量,针对实时性和速度要求较高的场景。
2.6 XTS
XTS(XEX encryption mode with tweak and ciphertext stealing)主要用于磁盘加密,引入可调整的分组密码概念,除了密钥和明文作为输入外,新增另一个输入tweak,通过改变tweak值来改变密文。
图 6 XTS模式encrypt过程
从图5可以看到,XTS与上述其他模式相比,最明显特征为有两个密钥,Key1、Key2,其中Key2用于对tweak(上图i)进行加密,Key1用于分组加密,具体步骤如下:
- Tweak(上图i)使用密钥K2进行AES加密,然后与有限域数αj进行乘运算,得到T
- T跟明文块P进行异或得到PP
- PP再使用K1进行AES加密得到CC
- CC再和T异或得到最终的密文C
解密同理,如下图所示:
图 7 XTS Decrypt过程
值得注意的是,当最后一个密文块不足128bit时,就需要进行数据窃取和补充,如下图所示:
图 8 XTS-AES encryption of last two blocks when last block is 1 to 127 bits
伪代码逻辑如下:
将明文划分为m+1块,P = P0|...|Pm-1|Pm,
前m-2块正常加密,最后两块处理分为两种情况:
- 当最后一块数据分组Pm长度为0时,Cm为空,Cm-1正常计算即可;
- 当0 < Cm长度< 128时,首先需要计算出Pm-1的密文CC,然后取出CC中前b(Pm长度)作为最后一块Cm;取CC中128-b位作为CP与最后一块明文Pm拼接得到PP,计算得到Cm-1
3. DES/3DES
DES(Data Encryption Standard)起源于1973年美国国家标准局NBS(先国家标准与技术研究所NIST)征求国家密码标准方案,最终于1977年确定为联邦信息处理标准(FIPS-46),DES处理明文分组长度为64位,密钥长度尽管有64位,但实际使用只有56位,其余8为可做奇偶校验位或者随机处理。
随着计算机处理能力提高,56位密钥不再被认为是安全可靠(1999年EFT在一次会议中破解了一个DES密钥),因此3DES作为替代者出现。
所谓3DES即三重DES,常见有如下几种使用策略:
- DES-EEE3策略:使用三个不同密钥,顺序使用三次DES加密;
- DES-EEE2策略:顺序使用三次DES加密,其中第一次和第三次密钥相同
- DES-EDE3策略:使用三个不同密钥,顺序进行加密-解密-加密算法。
可以看到,在3DES下,密钥增加到112位或者168位,有效防御蛮力攻击;但从实现角度来看,处理速度进一步变慢,同时明文分组长度仍为64位,就效率而言,与密钥长度增长不匹配。
4. AES
Advanced Encryption Standard (AES)作为DES的替代者,由NIST于1997年进行征集,并在1999年公布了5个候选算法:MARS、RC6、Rijindael、SERPENT和Twofish。最终根据安全性、性能、大小、实现难易性选定了Rijindael(音译”Rain Doll”)算法作AES算法,并于2001年由NIST正式发布,即FIPS PUB 197。
Rijindael算法作为DES的另一种替代方案,要求分组长度固定位128位,密钥长度可为128、192或者256位,对应加密轮数为10、12、14轮;总结如下:
表 1 AES密钥、分组和轮数关系
标准变体 | 密钥长度(bits) | 分组大小(bits) | 加解密轮数 |
AES-128 | 128 | 128 | 10 |
AES-192 | 192 | 128 | 12 |
AES-256 | 256 | 128 | 14 |
该算法也是目前常用的对称加密算法。
5. SM4
国家标准《信息安全技术 SM4分组密码算法》 由TC260(全国网络安全标准化技术委员会)归口 ,主管部门为国家标准化管理委员会。
该算法分组长度为128位、密钥长度为128位,加密算法与密钥扩展算法均采用非线性迭代结构,运算轮数为32轮。数据加密和解密算法结构相同,解密轮密钥是加密轮密钥的逆序。