分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR

在分组加密算法中,有几种不同的工作模式,分别是ECB(Electronic CodeBook,电子密码本模式)、CBC(Cipher-blockchaining,密码块连接模式)、PCBC(Propagatingcipher-blockchaining,填充密码块链接模式)、CFB(Cipherfeedback,密文反馈模式)、OFB(Outputfeedback,输出反馈模式)、CTR…

大家好,又见面了,我是你们的朋友全栈君。

在分组加密算法中,有几种不同的工作模式,分别是ECB(Electronic CodeBook,电子密码本模式)、CBC(Cipher-block chaining,密码块连接模式)、PCBC(Propagating cipher-block chaining,填充密码块链接模式)、CFB(Cipher feedback,密文反馈模式)、OFB(Output feedback,输出反馈模式)、CTR(Counter mode,计数器模式)。

注意这几种模式适用于对称加密算法中,对称加密算法的特点是密文长度等于密文长度;加解密用同一组秘钥。在CFB、OFB、CTR模式中需要涉及到流密码(序列密码)的概念,这里先给出,摘自百度百科序列密码

序列密码也称为流密码(Stream Cipher),它是对称密码算法的一种。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。 1949年Shannon证明了只有一次一密的密码体制是绝对安全的,这给序列密码技术的研究以强大的支持,序列密码方案的发展是模仿一次一密系统的尝试,或者说“一次一密”的密码方案是序列密码的雏形。如果序列密码所使用的是真正随机方式的、与消息流长度相同的密钥流,则此时的序列密码就是一次一密的密码体制。若能以一种方式产生一随机序列(密钥流),这一序列由密钥所确定,则利用这样的序列就可以进行加密,即将密钥、明文表示成连续的符号或二进制,对应地进行加密,加解密时一次处理明文中的一个或几个比特。

在序列密码中,密钥流由密钥流发生器f产生:zi=f(k,si),这里的si是加密器中存储器(记忆元件)在i时刻的状态。根据加密器中的记忆元件si的存贮状态是否依赖于明文字符,序列密码可进一步分成同步和自同步两种。如果si独立于明文字符则称为同步流密码,否则称为自同步流密码。

序列密码与分组密码的对比

分组密码以一定大小作为每次处理的基本单元,而序列密码则是以一个元素(一个字母或一个比特)作为基本的处理单元。

序列密码是一个随时间变化的加密变换,具有转换速度快、低错误传播的优点,硬件实现电路更简单;其缺点是:低扩散(意味着混乱不够)、插入及修改的不敏感性。

分组密码使用的是一个不随时间变化的固定变换,具有扩散性好、插入敏感等优点;其缺点是:加解密处理速度慢、存在错误传播。

序列密码涉及到大量的理论知识,提出了众多的设计原理,也得到了广泛的分析,但许多研究成果并没有完全公开,这也许是因为序列密码目前主要应用于军事和外交等机密部门的缘故。目前,公开的序列密码算法主要有RC4、SEAL等。

ECB模式

Electronic CodeBook,电子密码本模式,这种模式的特点是每一个明文块对应一个密文块,是最简单的对称加密模式。

分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
ECB模式加密过程
分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
ECB模式解密过程

缺点:ECB模式中,明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都将被转换为相同的密文分组。这样一来,只要观察一下密文,就可以知道明文存在怎样的重复组合,并可以以此为线索来破译密码,因此ECB模式是存在一定风险的。

如:某银行的转账请求数据由以下3个分组构成。

分组1=付款人的银行账号

分组2=收款人的银行账号

分组3=转账金额。

现在需要A账户给B账户转账100,但是如果将分组1和分组2的密文进行调换,就会使账户B给账户A转账100。这种情况就是在不需要破解密文的情况下,就能操纵明文。

CBC模式

Cipher-block chaining,密码块连接模式。这种模式需要将每一个明文块与前一个密文块进行异或后在进行加密操作。第一个块需要初始向量IV。加解密流程如下图所示:

分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
CBC模式加密过程
分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
CBC模式解密过程

优点:①每一次加密都需要前一个密文块参与,明文中微小的改变都会使后续所有密文改变;②无法从密文看出明文的规律。安全性得以提高。目前,CBC是最为常用的工作模式。

缺点:①由于每次加密都需要前一个密文参与,所以无法并行加密,只能串行加密,加密速度受到限制。但是只要有两个相邻的密文块,就可以解密出后一个密文块的明文,比如知道密文2和密文3,就可以解密出明文3。所以解密是可以并行执行的。②改变某个密文块,只会影响当前和下一个解密出的明文,不会影响后续解密过程。

PCBC模式

Propagating cipher-block chaining,填充密码块链接模式,又称为明文密码块链接(Plaintext cipher-block chaining)。它与CBC模式类似,只是在加解密时,不但要与上一个密文异或,还要与上一个明文进行异或。加解密流程如下图所示:

分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
PCBC模式加密过程
分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
PCBC解密过程

优点:PCBC模式优点与CBC模式基本一致。①每一次加密都需要前一个密文块与明文块参与,明文中微小的改变都会使后续所有密文改变,同样密文的改变也使解密出的明文变化很大;②无法从密文看出明文的规律;③明文的任意改动会使后续密文都改变,同样密文的任意改动会使后续解密出的明文全部改变。安全性得以提高。

缺点:由于每次加密都需要前一个密文参与,所以无法并行加密,只能串行加密,加密速度受到限制。

CFB模式

Cipher feedback,密文反馈模式。CFB模式与前3种模式都不同,CFB模式不直接加密明文,而是将前一个密文使用秘钥Key再加密后,与明文异或,得到密文。同样,第一个密文需要初始向量IV加密得到。

CFB模式加密过程如下图所示。

分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
CFB模式加密过程

加密过程具体如下:

  1. 将移位寄存器初始化为IV,假设移位寄存器长度为len比特;
  2. 移位寄存器经加密器和秘钥加密得到Ki(i=1,2,3….);
  3. 明文长度为m(m≤len)比特,与K1的高m比特异或,得到m比特密文;
  4. 将移位寄存器左移m位,将刚刚得到的m比特密文填充到移位寄存器的低m位;
  5. 重复步骤2-4,直到所有明文被加密完成。

由于CFB模式是对密文进行加密,故解密时,同样使用加密器进行解密。CFB模式解密过程如下图所示,注意与加密过程箭头指向不同。

分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
CFB模式解密过程

解密过程具体如下:

  1. 将移位寄存器初始化为IV,假设移位寄存器长度为len比特;
  2. 移位寄存器经加密器和秘钥加密得到Ki(i=1,2,3….);
  3. 密文长度为m(m≤len)比特,与K1的高m比特异或,得到m比特明文;
  4. 将移位寄存器左移m位,将前一个m比特密文填充到移位寄存器的低m位;
  5. 重复步骤2-4,直到所有密文被解密。

观察解密步骤,可以发现与CB解密步骤类似,直到两个相邻的密文就可以解密出后一个明文,所以解密过程可以并行。

CFB将块加密变成自同步流密码模式(关于流密码可参考文章最开始部分)。在CFB模式中,明文数据可以是任意比特长度m,相应得到的密文也是m比特,因此明文不用分成固定比特的数据块,整体明文也不用填充。CFB模式可以被逐比特加密,因此可以将CFB模式看作是一种使用分组密码来实现流密码的方式。

优点:①.隐藏了明文模式;②分组密码转化为流模式;③可以及时加密传送小于分组的数据;

缺点:①不利于并行计算;②误差传送:一个明文单元损坏影响多个单元;③唯一的IV;

OFB模式

Output feedback,输出反馈模式。输出反馈模式与密文反馈模式类似,只不过返回的是输出。OFB模式同样将块加密转换成流密码模式。

OFB模式加密流程图如下图所示:

分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
OFB模式加密过程

加密过程具体如下:

  1. 将移位寄存器初始化为IV,假设移位寄存器长度为len比特;
  2. 移位寄存器经加密器和秘钥加密得到Ki(i=1,2,3….);
  3. 明文长度为m(m≤len)比特,与K1的高m比特异或,得到m比特密文;
  4. 将移位寄存器左移m位,将刚刚得到的Ki的高m位填充到移位寄存器的低m位;
  5. 重复步骤2-4,直到所有明文被加密完成。

OFB模式解密时,同样使用加密器进行解密。OFB模式解密过程如下图所示,注意与加密过程箭头指向不同。

分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
OFB模式解密过程

解密过程具体如下:

  1. 将移位寄存器初始化为IV,假设移位寄存器长度为len比特;
  2. 移位寄存器经加密器和秘钥加密得到Ki(i=1,2,3….);
  3. 密文长度为m(m≤len)比特,与K1的高m比特异或,得到m比特明文;
  4. 将移位寄存器左移m位,将前一个Ki的高m位填充到移位寄存器的低m位;
  5. 重复步骤2-4,直到所有密文被解密。

优点:1.隐藏了明文模式;2.分组密码转化为流模式;3.可以及时加密传送小于分组的数据;

缺点:1.不利于并行计算;2.对明文的主动攻击是可能的;3.误差传送:一个明文单元损坏影响多个单元;

CTR模式

Counter mode,计数器模式。CTR模式与OFB模式类似,它通过加密“计数器”的连续值来生成下一个密钥流块。计数器可以是任何保证长时间不会产生重复序列的函数。使用简单的确定性输入函数曾经是有争议的;批评者认为,“故意将密码系统暴露在已知的系统输入中是一种不必要的风险。”然而,目前CTR模式被广泛接受,任何问题都被认为是底层分组密码的一个弱点,无论其输入是否存在系统偏差,这种分组密码都是安全的。

CTR模式具有类似于OFB的特性,但在解密期间也允许随机访问属性。CTR模式非常适合在可以并行加密块的多处理器机器上运行。此外,它不存在影响OFB的短周期问题。

CTR模式加密过程如下图所示。其中Nonce和前文所述的初始向量IV一样,由于密文需要Nonce和计数器Counter共同计算所得,故如果计数器出错,则不能得到正确的密文。

分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
CTR模式加密过程

CTR模式解密过程如下图所示:

分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
CTR模式解密过程

CTR 模式被广泛用于 ATM 网络安全和 IPSec应用中,相对于其它模式而言,CRT模式具有如下特点:

■ 硬件效率:允许同时处理多块明文 / 密文。

■ 软件效率:允许并行计算,可以很好地利用 CPU 流水等并行技术。

■ 预处理:算法和加密盒的输出不依靠明文和密文的输入,因此如果有足够的保证安全的存储器,加密算法将仅仅是一系列异或运算,这将极大地提高吞吐量。

■ 随机访问:第 i 块密文的解密不依赖于第 i-1 块密文,提供很高的随机访问能力。

■ 可证明的安全性:能够证明 CTR 至少和其他模式一样安全(CBC, CFB, OFB, …)

■ 简单性:与其它模式不同,CTR模式仅要求实现加密算法,但不要求实现解密算法。对于 AES 等加/解密本质上不同的算法来说,这种简化是巨大的。

■ 无填充,可以高效地作为流式加密使用。

参考文献:

[1]https://blog.csdn.net/chengqiuming/article/details/82262417

[2]https://blog.csdn.net/sunqiujing/article/details/75065218

[3]https://www.cnblogs.com/gaozhang12345/p/5913771.html

[4]https://blog.csdn.net/jerry81333/article/details/78336616

[5]https://en.m.wikipedia.org/wiki/Block_cipher_mode_of_operation#CFB

[6]https://blog.csdn.net/includeiostream123/article/details/51066799

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126604.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 人脸关键点检测3——DCNN[通俗易懂]

    人脸关键点检测3——DCNN[通俗易懂]《DeepConvolutionalNetworkCascadeforFacialPointDetection》2013年,通过3级卷积神经网络来估计人脸关键点(5点),属于级联回归方法。级联的卷积网络结构:Level1,采用了3个CNN,输入区域分别为整张脸(F1),眼睛和鼻子(EN1),鼻子和嘴(EM1)。F1输入尺寸为39*39,输出5个关键点的坐标;EN1输入…

    2022年5月24日
    49
  • visibilitychange – 指定标签页可见时,刷新页面数据

    visibilitychange – 指定标签页可见时,刷新页面数据三个知识点:一通过监听浏览器页面可见性改变(visibilitychange)事件,来判断标签页是否可见二配置路由的meta,来判断是否是指定的标签页三调用其它模块的actions,刷新数据router.jsroutes:[{path:”/”,redirect:”index”},{path:”/ind…

    2022年6月15日
    42
  • 怎样安装pip_pip 安装本地python包

    怎样安装pip_pip 安装本地python包网上有各种方法安装pip,针对不同的系统方法还不一样,最后发现还是下面这种方法最简单,直接了当干脆方便,适用于Windows和Linux。(1)下载pip进入https://pypi.python.org/pypi/pip,下载第二项。(2)解压安装解压下载的文件(windows下只用解压工具解压如RAR,Linux下终端输入tar-xfpip-9.0.1.tar.gz,即tar-xf文件名

    2025年7月14日
    4
  • Android N上一些新特性的介绍「建议收藏」

    Android N上一些新特性的介绍「建议收藏」byLi.zhu随着6月份google的AndroidNpreview4版本的发布,笔者也借着东风在N6P上体验了一把新系统,试玩之后认为有几点新的感受特记录之。1.分屏多任务进入后台多任务管理页面,然后按住其中一个卡片,然后向上拖动至顶部即可开启分屏多任务,支持上下分栏和左右分栏,允许拖动中间的分割线调整两个APP所占的比例。目前,AndroidN开发者

    2025年9月18日
    8
  • 静态变量存储在那个区? – 转[通俗易懂]

    静态变量存储在那个区? – 转[通俗易懂]一时间忘咯然后就去转载..静态变量存储在__区A全局区B堆C栈D常量区参考答案:A知识点内存到底分几个区?1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由os回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域…

    2022年6月14日
    46
  • 匿名函数自调用_自己调用自己的函数叫

    匿名函数自调用_自己调用自己的函数叫我们知道一个HTML文件在被加载的时候是从根标签html依次往下的,在遇到link,script等标签引入的外部资源时,下载外部资源,并执行外部资源。在js中,表达式会被立即执行,也就是说,不管是引入的外部js文件还是嵌入在html文件中的js脚本,其中的表达式都会被立即执行。函数名是一个指向函数的指针。在JavaScript中,定义函数有常见的两种形式:函数声明和函数直接量(或者叫函数表达式)

    2022年10月3日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号