常用密码技术-对称加密

先上一张图,后续讲解

常用密码技术-对称加密

对称加密

"对称加密: 也称为对称密码, 是指在加密和解码时使用同一秘钥的加密方式
常用密码技术-对称加密

DES

DES是一种将64比特的明文加密成64比特的密文的对称密码算法, 它的**长度是56比特 。尽管从规格上来说,DES的**长度是64比特,但由于每隔7比特会设置一个用于错误检查的比特,因此实质上其**长度是56比特。
DES是以64比特的明文(比特序列)为一个单位来进行加密的,这个64比特的单位称为分组。一般来说,以分组为单位进行处理的密码算法称为分组密码(blockcipher),DES就是分组密码的一种。
DES每次只能加密64比特的数据,如果要加密的明文比较长,就需要对DES加密进行迭代(反复),而迭代的具体方式就称为模式(mode)。

DES加密图例

常用密码技术-对称加密

3DES

三重DES(triple-DES)是为了增加DES的强度, 将DES重复3次所得到的一种密码算法 ,通常缩写为3DES。
三重DES的加解密机制如图所示:

常用密码技术-对称加密
常用密码技术-对称加密
三重DES并不是进行三次DES加密(加密-->加密-->加密),而是加密-->解密-->加密的过程。解密反之。

AES

AES(Advanced Encryption Standard)是取代其前任标准(DES)而成为新标准的一种对称密码算法。全世界的企业和密码学家提交了多个对称密码算法作为AES的候选,最终在2000年从这些候选算法中选出了一种名为Rijndael 的对称密码算法,并将其确定为了AES。 Rijndael是由比利时密码学家Joan Daemen和Vincent Rijmen设汁的分组密码算法,今后会有越来越多的密码软件支持这种算法。
Rijndael的分组长度为128比特 ,**长度可以以32比特为单位在128比特到256比特的范围内进行选择(不过在AES的规格中,**长度只有128、192和256比特三种 )。
加密图示常用密码技术-对称加密
解密图示
常用密码技术-对称加密

应选择哪种对称加密

前面我们介绍了DES、三重DES和AES等对称密码,那么我们到底应该使用哪一种对称密码算法呢?

  1. 今后最好不要将DES用于新的用途,因为随着计算机技术的进步,现在用暴力**法已经能够在现实的时
    间内完成对DES的破译。但是,在某些情况下也需要保持与旧版本软件的兼容性。
  2. 出于兼容性的因素三重DES在今后还会使用一段时间,但会逐渐被AES所取代。
  3. 今后大家应该使用的算法是AES(Rijndael),因为它安全、快速,而且能够在各种平台上工作。此外,
    由于全世界的密码学家都在对AES进行不断的验证,因此即便万一发现它有什么缺陷,也会立刻告知全世
    界并修复这些缺陷。
    一般来说,我们不应该使用任何自制的密码算法,而是应该使用AES。因为AES在其选定过程中,经过了全世界
    密码学家所进行的高品质的验证工作,而对于自制的密码算法则很难进行这样的验证。

分组密码的模

分组密码

分组密码(blockcipher)是每次只能处理特定长度的一块数据的一类密码算法,这里的一块"就称为分组(block)。此外,一个分组的比特数就称为分组长度(blocklength)。
例如,DES和三重DES的分组长度都是64比特。这些密码算法一次只能加密64比特的明文.并生成64比特的密文。
AES的分组长度可以从128比特、192比特和256比特中进行选择。当选择128比特的分组长度时,AES一次可加密128比特的明文,并生成128比特的密文。

模式

  • ECB模式:Electronic Code Book mode(电子密码本模式)
  • CBC模式:Cipher Block Chaining mode(密码分组链接模式)
  • CFB模式:Cipher FeedBack mode(密文反馈模式)
  • OFB模式:Output FeedBack mode(输出反馈模式)
  • CTR模式:CounTeR mode(计数器模式)

明文分组和密文分组

明文分组: 是指分组密码算法中作为加密对象的明文。明文分组的长度与分组密码算法的分组长度是相等的。
密文分组:是指使用分组密码算法将明文分组加密之后所生成的密文。
常用密码技术-对称加密

EBC模式

ECB(Electronic Code Book, 电子密码本)模式是最简单的加密模式,明文消息被分成固定大小的块(分组),并且每个块被单独加密。每个块的加密和解密都是独立的,且使用相同的方法进行加密,所以可以进行并行计算,但是这种方法一旦有一个块被**,使用相同的方法可以解密所有的明文数据,安全性比较差。 适用于数据较少的情形,加密前需要把明文数据填充到块大小的整倍数。

常用密码技术-对称加密

CBC模式

  • 先了解下XOR

为了让大家理解比特序列运算的概念,我们来介绍一下XOR运算。XOR的全称是exclusive or,在中文里叫作异或。尽管名字看起来很复杂,但这种运算本身一点都不难。

先看1个比特之间的XOR运算
常用密码技术-对称加密
通过上述场景,大家应该能够理解这样一个规律,即两个相同的数进行XOR运算的结果一定为0。

长比特序列之间的运算

常用密码技术-对称加密

由于两个相同的数进行XOR运算的结果一定为0,因此如果将A⊕B的结果再与B进行XOR运算,则结果会变回A。也就是说,两个公式中的B会相互抵消。

常用密码技术-对称加密

CBC(Cipher Block Chaining, 密码块链)模式中每一个分组要先和前一个分组加密后的数据进行XOR异或操作,然后再进行加密。 这样每个密文块依赖该块之前的所有明文块,为了保持每条消息都具有唯一性,第一个数据块进行加密之前需要用初始化向量IV进行异或操作。 CBC模式是一种最常用的加密模式,它主要缺点是加密是连续的,不能并行处理,并且与ECB一样消息块必须填充到块大小的整倍数。

常用密码技术-对称加密

CFB模式

CFB模式的全称是Cipher FeedBack模式(密文反馈模式)。在CFB模式中,前一个分组的密文加密后和当前分组的明文XOR异或操作生成当前分组的密文。
所谓反馈,这里指的就是返回输人端的意思,即前一个密文分组会被送回到密码算法的输入端。
CFB模式的解密和CBC模式的加密在流程上其实是非常相似的。

常用密码技术-对称加密
常用密码技术-对称加密

OFB 模式

OFB式的全称是Output-Feedback模式(输出反馈模式)。在OFB模式中,密码算法的输出会反馈到密码算法的输入中, 即上一个分组密码算法的输出是当前分组密码算法的输入(下图)。
OFB模式并不是通过密码算法对明文直接进行加密的,而是通过将 “明文分组" 和 “密码算法的输出” 进行XOR来
产生 “密文分组” 的,在这一点上OFB模式和CFB模式非常相似。
常用密码技术-对称加密

CFB模式和OFB模式对比
OFB模式和CFB模式的区别仅仅在于密码算法的输入。
CFB式中,密码算法的输人是前一个密文分组,也就是将密文分组反馈到密算法中,因此就有了“密文反馈模式”这个名字。
相对地,OFB模式中,密码算法的输入则是密码算法的前一个输出,也就是将输出反馈给密码算法,因此就有了“输出反馈模式"这个名字。
如果将一个分组抽出来对CFB模式和OFB模式进行一个对比.就可以很容易看出它们之间的差异(下图)。

常用密码技术-对称加密

CTR 模式

CTR模式的全称是CounTeR模式(计数器模式)。CTR摸式是一种通过将逐次累加的计数器进行加密来生成**流的流密码(下图)。
CTR模式中,每个分组对应一个逐次累加的计数器,并通过对计数器进行加密来生成**流。也就是说,最终的密文分组是通过将计数器加密得到的比特序列,与明文分组进行XOR而得到的

常用密码技术-对称加密
常用密码技术-对称加密
CTR模式的特点

CTR模式的加密和解密使用了完全相同的结构,因此在程序实现上比较容易。这一特点和同为流密码的OFB模式是一样的。
此外,CTR模式中可以以任意顺序对分组进行加密和解密,因此在加密和解密时需要用到的“计数器"的值可以由nonce和分组序号直接计算出来。这一性质是OFB模式所不具备的。
能够以任意顺序处理分组,就意味着能够实现并行计算。在支持并行计算的系统中,CTR模式的速度是非常快的。

总结

常用密码技术-对称加密