龙空技术网

对称加密之分组加密模式

百事可乐 86

前言:

眼前你们对“流加密分组加密算法”大体比较重视,同学们都想要剖析一些“流加密分组加密算法”的相关资讯。那么小编在网上汇集了一些有关“流加密分组加密算法””的相关文章,希望看官们能喜欢,我们一起来了解一下吧!

对称加密是指将密钥和明文(待加密的消息)经过指定的算法,从而得到密文(加密后的消息)。常用的对称加密算法包括了DES,AES。

对称加密算法有如下两个特点:

加密解密的密钥都是同一个加密的算法只支持对指定长度的数据加密

为了对随机长度的明文加密,引入了分组加密模式,通过分组模式, 将明文数据分成多段加密

常见分组模式如下:

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

ECB模式:

ECB(Electronic Code Book, 电子密码本)模式是最简单的加密模式,明文消息被分成固定大小的块(分组),每个块的加密和解密都是独立的。 所以可以进行并行计算,提高了加密解密的效率。同时由于需要对明文分组, 因此当最后一个分组数据长度小于加密算法的长度时, 需要对该分组填充从而满足加密算法的长度要求。最后该分组模式是不安全的 ,只要一个分组加密被破解了, 那么其他分组也同时破解了。一般生产环境不推荐使用

ECB

特点:快速,简单 支持并行计算, 提高加密解密的效率需要分组填充安全性差,所有的明文分组都只加密一次, 容易被破解,不推荐使用CBC模式:

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

初始化向量

当加密第一个明文分组时,由于不存在“前一个密文分组",因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组",这个比特序列称为初始化向量(initialization vector)

通常缩写为 IV 一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。

特点:串行加密, 支持并行解密需要分组填充引入了初始化向量IV,相比于ECB模式更安全

CFB模式

CFB模式的全称是Cipher FeedBack模式(密文反馈模式)。在CFB模式中,前一个分组的密文加密后和当前分组的明文XOR异或操作生成当前分组的密文。

所谓反馈,这里指的就是返回输人端的意思,即前一个密文分组会被送回到密码算法的输入端。

特点:串行加密, 支持并行解密不需要分组填充引入了初始化向量IV

OFB模式

OFB式的全称是Output-Feedback模式(输出反馈模式)。在OFB模式中,密码算法的输出会反馈到密码算法的输入中, 即上一个分组密码算法的输出是当前分组密码算法的输入(下图)。

OFB模式并不是通过密码算法对明文直接进行加密的,而是通过将 “明文分组" 和 “密码算法的输出” 进行XOR来产生 “密文分组” 的,和CFB模式非常相似。

特点:不支持并行计算不需要分组填充引入了初始化向量IV

CTR模式

CTR模式的全称是CounTeR模式(计数器模式)。CTR摸式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码(下图)。

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

计数器的生成方法

每次加密时都会生成一个不同的值(nonce)来作为计数器的初始值。当分组长度为128比特(16字节)时,计数器的初始值可能是像下面这样的形式。

其中前8个字节为nonce(随机数),这个值在每次加密时必须都是不同的,后8个字节为分组序号,这个部分是会逐次累加的。在加密的过程中,计数器的值会产生如下变化:

按照上述生成方法,可以保证计数器的值每次都不同。由于计数器的值每次都不同,因此每个分组中将计数器进行加密所得到的密钥流也是不同的。也是说,这种方法就是用分组密码来模拟生成随机的比特序列。

特点:支持并行加密解密计算不需要分组填充引入了计数器 nonce 值

分组填充方式:

对于分组后的明文块, 不满足加密算法长度要求的分组, 会在该分组明文后面进行填充从而满足要求,在解密完成后,也会进行分组去除填充的操作, ECB,CBC 分组模式下就需要分组填充。以下是几种常见的填充方式:

PKCS#5和PKCS#7 填充模式

待填充的字节位数上,每个位置填充为待填充的数据长度。

示例: 明文“123456789987654321”, 加密算法要求长度为5,此时明文会分成12345,67899,87654, 321 这四个分组, 然而最后一个分组不满足要求,缺了2个,此时会在末尾添加2个2 变成32122(缺少n 个则添加n 个n)

ISO/IEC 7816-4

在填充字节序列中,第一个字节填充固定值80,其余字节填充0

标签: #流加密分组加密算法