文章目录
1、分组密码和流密码的概念及区别
1.1、分组密码(block cipher)
分组密码(block cipher)的数学模型是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列
1.2、流密码(Stream Cipher)
序列密码也称为流密码(Stream Cipher),它是对称密码算法的一种
流密码(stream cipher)是对数据进行连续处理的一类密码算法。流密码一般以1byte,8byte,32byte为单位进行加密和解密
序列密码具有:
- 实现简单
- 便于硬件实施
- 加解密处理速度快
- 没有或只有有限的错误传播等特点
因此在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。 1949年Shannon证明了只有一次一密的密码体制是绝对安全的,这给序列密码技术的研究以强大的支持,序列密码方案的发展是模仿一次一密系统的尝试,或者说“一次一密”的密码方案是序列密码的雏形。如果序列密码所使用的是真正随机方式的、与消息流长度相同的密钥流,则此时的序列密码就是一次一密的密码体制。若能以一种方式产生一随机序列(密钥流),这一序列由密钥所确定,则利用这样的序列就可以进行加密,即将密钥、明文表示成连续的符号或二进制,对应地进行加密,加解密时一次处理明文中的一个或几个比特
在序列密码中,密钥流由密钥流发生器f产生:zi=f(k,si),这里的si是加密器中存储器(记忆元件)在i时刻的状态。根据加密器中的记忆元件si的存贮状态是否依赖于明文字符,
- 序列密码可进一步分成同步和自同步两种
- 如果si独立于明文字符则称为同步流密码,否则称为自同步流密码
1.3、序列密码与分组密码的对比
- 分组密码以一定大小作为每次处理的基本单元,而序列密码则是以一个元素(一个字母或一个比特)作为基本的处理单元。
- 序列密码是一个随时间变化的加密变换,具有转换速度快、低错误传播的优点,硬件实现电路更简单;其缺点是:低扩散(意味着混乱不够)、插入及修改的不敏感性,分组密码使用的是一个不随时间变化的固定变换,具有扩散性好、插入敏感等优点;其缺点是:加解密处理速度慢、存在错误传播。
- 序列密码涉及到大量的理论知识,提出了众多的设计原理,也得到了广泛的分析,但许多研究成果并没有完全公开,这也许是因为序列密码目前主要应用于军事和外交等机密部门的缘故。
- 目前,公开的序列密码算法主要有RC4、SEAL等
2、分组密码的工作模式
在分组加密算法中,有几种不同的工作模式,分别是:
- ECB(Electronic CodeBook,电子密码本模式)
- CBC(Cipher-block chaining,密码块连接模式)
- PCBC(Propagating cipher-block chaining,填充密码块链接模式)
- CFB(Cipher feedback,密文反馈模式)
- OFB(Output feedback,输出反馈模式)
- CTR(Counter mode,计数器模式)
2.1、ECB模式(电子密码本模式)
ECB模式是将明文消息分成固定大小的分组,当最后一个分组的内容小于分组长度时,需要用特定的数据进行填充以至于长度等于分组长度,每个分组的加密和解密都是独立的,可以进行并行操作,但是安全性较低
缺点:ECB模式中,明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都将被转换为相同的密文分组。这样一来,只要观察一下密文,就可以知道明文存在怎样的重复组合,并可以以此为线索来破译密码,因此ECB模式是存在一定风险的
2.2、CBC(Cipher-block chaining,密码块连接模式)
CBC(Cipher-block chaining,密码块连接模式)模式中每一个分组要先和前一个分组加密后的数据进行XOR异或操作,然后再进行加密。
这样每个密文块依赖该块之前的所有明文块,为了保持每条消息都具有唯一性,第一个数据块进行加密之前需要用初始化向量IV进行异或操作。
CBC模式是一种最常用的加密模式,它主要缺点是加密是连续的,不能并行处理,并且与ECB一样消息块必须填充到块大小的整倍数
PCBC模式
PCBC(Propagating cipher-block chaining),填充密码块链接模式,又称为明文密码块链接(Plaintext cipher-block chaining)。它与CBC模式类似,只是在加解密时,不但要与上一个密文异或,还要与上一个明文进行异或。加解密流程如下图所示:
2.3、CFB(Cipher feedback,密文反馈模式)
CFB(Cipher Feedback, 密码反馈)模式和CBC模式比较相似,CFB模式是将前一个分组的密文加密后和当前分组的明文进行异或操作生成当前分组的密文,第一个明文分组通过初始化向量lV进行加密再与之进行异或操作得到第一个密文分组。
初始化向量:由于第一个明文分组没有可进行XOR运算的密文分组,所以在每次分组加密时随机生成一个初始化向量,对第一个明文分组异或运算。
CFB模式加密过程如下图所示:
加密过程具体如下:
- 将移位寄存器初始化为IV,假设移位寄存器长度为len比特;
- 移位寄存器经加密器和秘钥加密得到Ki(i=1,2,3…);
- 明文长度为m(m≤len)比特,与K1的高m比特异或,得到m比特密文;
- 将移位寄存器左移m位,将刚刚得到的m比特密文填充到移位寄存器的低m位;
- 重复步骤2-4,直到所有明文被加密完成。
由于CFB模式是对密文进行加密,故解密时,同样使用加密器进行解密。CFB模式解密过程如下图所示,注意与加密过程箭头指向不同。
解密过程具体如下:
- 将移位寄存器初始化为IV,假设移位寄存器长度为len比特;
- 移位寄存器经加密器和秘钥加密得到Ki(i=1,2,3…);
- 密文长度为m(m≤len)比特,与K1的高m比特异或,得到m比特明文;
- 将移位寄存器左移m位,将前一个m比特密文填充到移位寄存器的低m位;
- 重复步骤2-4,直到所有密文被解密
在CFB模式中,密文分组加密产生的比特序列可以看作密钥流,明文分组和密钥流进行XOR运算相当于明文被逐比特加密,(CFB将块加密变成自同步流密码模式。在CFB模式中,明文数据可以是任意比特长度m,相应得到的密文也是m比特,因此明文不用分成固定比特的数据块,整体明文也不用填充。CFB模式可以被逐比特加密)因此CFB模式可以看作使用分组加密实现的流密码
CFB模式 优点:
- 隐藏了明文模式;
- 分组密码转化为流模式;
- 可以及时加密传送小于分组的数据;
CFB模式缺点:
- 不利于并行计算;
- 误差传送:一个明文单元损坏影响多个单元;
- 唯一的IV
2.4、OFB(Output feedback,输出反馈模式)
OFB(Output Feedback, 输出反馈)模式将分组密码转换为同步流密码,也就是说可以根据明文长度先独立生成相应长度的流密码。
在OFB模式中,密码算法的输出会反馈到密码算法的输入中,相当于对密钥流的多次加密。
OFB和CFB的对比
- CFB是前一个分组的密文加密后XOR当前分组明文
- OFB是前一个分组与前一个明文块异或之前的流密码XOR当前分组明文。
- CFB模式中,加密算法的输入是上一组明文分组使用的密钥流(第一组明文分组使用的是初始化向量加密后的密钥流)。
- OFB模式中,加密算法的输入是上一组密文分组(第一组明文分组使用的是初始化向量加密后的密钥流)
由于异或操作的对称性,OFB模式的解密和加密完全一样的流程
OFB优点:
- 隐藏了明文模式;
- 分组密码转化为流模式;
- 可以及时加密传送小于分组的数据;
OFB缺点:
- 不利于并行计算;
- 对明文的主动攻击是可能的;
- 误差传送:一个明文单元损坏影响多个单元;
2.5、CTR(Counter mode,计数器模式)
CTR(Counter, 计数器)模式与OFB模式一样,计数器模式将分组密码转换为流密码,即通过对逐次累加的计数器进行加密生成密钥流,然后和明文分组进行XOR运算得到密文分组,因此CTR模式也可以看作使用分组加密实现的流密码
- CTR模式具有类似于OFB的特性,但在解密期间也允许随机访问属性。
- CTR模式非常适合在可以并行加密块的多处理器机器上运行。
- 它不存在影响OFB的短周期问题
CTR模式加密过程如下图所示。其中Nonce和前文所述的初始向量IV一样,由于密文需要Nonce和计数器Counter共同计算所得故:
如果计数器出错,则不能得到正确的密文
CTR模式解密过程如下图所示:
CTR 模式被广泛用于 ATM 网络安全和 IPSec应用中,相对于其它模式而言,CRT模式具有如下特点:
■ 硬件效率:允许同时处理多块明文 / 密文。
■ 软件效率:允许并行计算,可以很好地利用 CPU 流水等并行技术。
■ 预处理:算法和加密盒的输出不依靠明文和密文的输入,因此如果有足够的保证安全的存储器,加密算法将仅仅是一系列异或运算,这将极大地提高吞吐量。
■ 随机访问:第 i 块密文的解密不依赖于第 i-1 块密文,提供很高的随机访问能力。
■ 可证明的安全性:能够证明 CTR 至少和其他模式一样安全(CBC, CFB, OFB, …)
■ 简单性:与其它模式不同,CTR模式仅要求实现加密算法,但不要求实现解密算法。对于 AES 等加/解密本质上不同的算法来说,这种简化是巨大的。
■ 无填充,可以高效地作为流式加密使用。
【特别感谢大佬们前期的积累】