1. 概念
1.1 定义
对称加密(Symmetric Cryptography)是密码学中的一类加密算法,这类算法在加密和解密时,使用相同的密钥。
1.2 优缺点
优点:速度快。对称性加密通常在消息发送方需要加密大量数据时使用,算法公开、计算量小、加密速度快、加密效率高。
缺点:密钥的管理与分配较难。在数据传送前,发送方和接收方必须商定好秘钥,然后 使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘 钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。
2 常见算法
常用的对称加密算法有:DES、3DES、TDEA、AES、RC2、RC4、RC5、IDEA、SKIPJACK、Blowfish,国密中的SM4等。
- 分组密码:先对明文进行分组,然后使用对称加密算法对每一个分组进行加密,然后把所有组的密文拼接起来就是密文。
- 流密码:指的可以对连续的明文进行加密,而明文不需要去进行分组,上面的对称加密算法是不支持对连续的明文进行加密的,但是上面的对称加密算法通过配合特定的加密模式来达到这样的效果。
2.1 DES算法
DES 是一种将 64 比特的明文加密成 64 比特的密文的对称密码算法,它的密钥长度是 56 比特 。 尽管从规格上来说, DES 的密钥长度是 64 比特,但由于每隔 7 比特会设置一个用于错误检查的比特,因此实质上其密钥长度是 56 比特。
DES 是以 64 比特的明文 (比特序列) 为 一个单位来进行加密的,这个 64 比特的单位称为分组 。一般来说,以分组为单位进行处理的密码算法称为分组密码 (block cipher),DES 就是分组密码的一种 。
2.2 3DES算法
三重DES(triple-DES)是为了增加DES的强度,将DES重复3次所得到的一种密码算法,也称为TDEA(Triple Date Encryption Algorithm),通常缩写为3DES。
2.3 AES 算法
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法。
2.4 SM1 分组密码算法
SM1是由国家密码管理局编制的一种商用密码分组标准对称算法,分组长度和密钥长度均为128位,算法的安全保密强度及相关软硬件实现性能与AES算法相当,目前该算法尚未公开,仅以IP核的形式存在于芯片中,调用该算法时,需要通过加密芯片的接口进行调用。
2.5 SM4 分组密码算法
SM4是国家密码管理局发布的分组密码算法,于2012年3月正式公布。与DES和AES算法类似,SM4是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。SM4算法加/解密算法是对合运算,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。加密算法与密钥扩展算法均采用32轮非线性迭代结构(Feistel),以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。目前主要用于无线局域网产品。
3. 分组密码的模式
模式有很多种类,分组密码的主要模式有以下5种。
- ECB模式:Electronic CodeBook mode(电子密码本模式)
- CBC模式:Cipher Block Chaining mode(密码分组链接模式)
- CFB模式:Cipher FeedBack mode(密文反馈模式)
- OFB模式:Output FeedBack mode(输出反馈模式)
- CTR模式:CounTeR mode(计数器模式)
3.1 ECB模式
在ECB模式中,将明文分组加密之后的结果将直接成为密文分组,明文分组与密文分组是一一对应的关系。在ECB模式中,由于每个明文分组都各种独立地进行加密和解密,所以攻击者可通过调整明文分组的顺序,无需破译密码就能操纵明文。
3.2 CBC模式
在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。
3.3 CFB模式
在CFB模式中,前一个密文分组会被送回到密码算法的输入端。所谓反馈,这里指的就是返回输人端的意思。
3.4 OFB模式
OFB模式的全称是Output--Feedback模式(输出反馈模式)。在OFB模式中,密码算法的输出会反馈到密码算法的输入中。OFB模式并不是通过密码算法对明文直接进行加密的,而是通过将“明文分组”和“密码算法的输出”进行XOR来产生“密文分组”的,在这一点上OFB模式和CFB模式非常相似。
3.5 CTR模式
CTR模式的全称是CounTeR模式(计数器模式)。CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码。CTR模式中,每个分组对应一个逐次累加的计数器,并通过对计数器进行加密来生成密钥流。也就是说,最终的密文分组是通过将计数器加密得到的比特序列,与明文分组进行XOR而得到的。
4. 填充
在分组密码中,当数据长度不符合分组长度时,需要按一定的方式,将尾部明文分组进行填充,这种将尾部分组数据填满的方法称为填充(Padding)。
4.1 No Padding
即不填充,要求明文的长度,必须是加密算法分组长度的整数倍。
... | DD DD DD DD DD DD DD DD | DD DD DD DD DD DD DD DD |
4.2 PKCS#5和PKCS#7
在填充字节序列中,每个字节填充为需要填充的字节长度。
... | DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04 |
其他填充方法见附录链接1。
附录
- 一文搞懂对称加密:加密算法、工作模式、填充方式、代码实现
- CBC模式和ECB模式解读
- 对称加密的填充方式
- 图解密码技术:第3版/(日)结城浩著;周自恒译.-2版.-北京:人民邮电出版社,2016.6