分组密码

分组密码(blockcipher)是每次只能处理特定长度的一块数据的一类密码算法,这里的一块"就称为分组(block)。此外,一个分组的比特数就称为分组长度(blocklength)。例如,SM4的分组长度是128比特。这些密码算法一次只能加密128比特的明文.并生成128比特的密文。

模式

分组密码算法只能加密固定长度的分组,但是我们需要加密的明文长度可能会超过分组密码的分组长度,这时就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。而迭代的方法就称为分组密码的模式(mode),分组密码的主要模式有以下5种: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, 电子密码本)模式是最简单的加密模式,明文消息被分成固定大小的块(分组),并且每个块被单独加密。  每个块的加密和解密都是独立的,且使用相同的方法进行加密,所以可以进行并行计算,但是这种方法一旦有一个块被破解,使用相同的方法可以解密所有的明文数据,安全性比较差。  K:密钥; C:密文; P:明文适用于数据较少的情形,加密前需要把明文数据填充到块大小的整倍数。

使用ECB模式加密时,相同的明文分组会被转换为相同的密文分组,也就是说,我们可以将其理解为是一个巨大的“明文分组-->密文分组"的对应表,因此ECB模式也称为电子密码本模式当最后一个明文分组的内容小于分组长度时,需要用一特定的数据进行填充(padding),让值一个分组长度等于分组长度。ECB模式是所有模式中最简单的一种。ECB模式中,明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都将被转换为相同的密文分组。这样一来,只要观察一下密文,就可以知道明文中存在怎样的重复组合,并可以以此为线索来破译密码,因此ECB模式是存在一定风险的。

CBC模式

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

如果将一个分组的加密过程分离出来,我们就可以很容易地比较出ECB模式和CBC模式的区别 。ECB模式只进行了加密,而CBC模式则在加密之前进行了一次XOR。

  • 初始化向量

     当加密第一个明文分组时,由于不存在“前一个密文分组",因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组",这个比特序列称为初始化向量(initialization vector)通常缩写为 IV 一般来说,每次加密时都会随机产生一个不同的比特序列来作为初始化向量。明文分组在加密之前一定会与“前一个密文分组"进行 XOR 运算,因此即便明文分组1和2的值是相等的,密文分组1和2的值也不一定是相等的。这样一来,ECB模式的缺陷在CBC模式中就不存在了。
    

CFB 模式

CFB模式的全称是Cipher FeedBack模式(密文反馈模式)。在CFB模式中,前一个分组的密文加密后和当前分组的明文XOR异或操作生成当前分组的密文。所谓反馈,这里指的就是返回输人端的意思,即前一个密文分组会被送回到密码算法的输入端。IV:初始化向量;  K:密钥; C:密文; P:明文s位:明文,反馈位数,取1、8、64、128 记为CFB-1,CFB-8,CFB-64,CFB-128;    b位:移位寄存器值CFB模式的解密和CBC模式的加密在流程上其实是非常相似的。

在ECB模式和CBC模式中,明文分组都是通过密码算法进行加密的,然而,在CFB模式中,明文分组并没有通过密码算法来直接进行加密。从上图可以看出,明文分组和密文分组之间并没有经过"加密"这一步骤。在CFB模式中,明文分和密文分组之间只有一个XOR。我们将CBC模式与CFB模式对比一下,就可以看出其中的差异了(如下图)。在CBC模式中,明文分组和密文分组之间有XOR和密码算法两个步骤,而在CFB模式中,明文分组和密文分组之间则只有XOR。

  • 初始化向量

     在生成第一个密文分组时,由于不存在前一个输出的数据,因此需要使用初始化向量(IV)来代替,这一点和CBC模式是相同的。一般来说,我们需要在每次加密时生成一个不同的随机比特序列用作初始化向量。
    
  • CFB模式与流密码

     CFB模式是通过将“明文分组”与“密码算法的输出"进行XOR运算来生成“密文分组”的。在CFB模式中,密码算法的输出相当于一个随机比特序列。由于密码算法的输出是通过计算得到的,并不是真正的随机数,因此CFB模式不可能具各理论上不可破译的性质。CFB模式中由密算法所生成的比特序列称为密钥流(key stream)。在CFB模式中,密码算法就相当于用来生成密钥流的伪随机数生成器,而初始化向量相当于伪随机数生成器的“种子“。在CFB模式中,明文数据可以被逐比特加密,因此我们可以将CFB模式看做是一种使用分组密码来实现流密码的方式。
    

OFB 模式

OFB式的全称是Output-Feedback模式(输出反馈模式)。在OFB模式中,密码算法的输出会反馈到密码算法的输入中, 即上一个分组密码算法的输出是当前分组密码算法的输入(下图)。IV:初始化向量;   K:密钥; C:密文; P:明文s位:明文,反馈位数,随机序列;     b位:移位寄存器值OFB模式并不是通过密码算法对明文直接进行加密的,而是通过将 “明文分组" 和 “密码算法的输出” 进行XOR来产生 “密文分组” 的,在这一点上OFB模式和CFB模式非常相似。

  • 初始化向量

     和CBC模式、CFB模式一样,OFB模式中也需要使用初始化向量(IV)。一般来说,我们需要在每次加密时生成一个不同的随机比特序列用作初始化向量。
    
  • CFB模式和OFB模式对比

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

由于CFB模式中是对密文分组进行反馈的,因此必须从第一个明文分组开始按顺序进行加密,也就是说无法跳过明文分组1而先对明文分组2进行加密。相对地,在OFB模式中,XOR所需要的比特序列(密钥流)可以事先通过密码算法生成,和明文分组无关。只要提前准备好所需的密钥流,则在实际从明文生成密文的过程中,就完全不需要动用密码算法了。只要将明文与密钥流进行XOR就可以了。和AES等密码算法相比,XOR运算的速度是非常快的。这就意味着只要提前准备好密钥流就可以快速完成加密。换个角度来看,生成密钥流的操作和进行XOR运算的操作是可以并行的。

CTR 模式

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

  • 计数器的生成方法

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

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

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

  • OFB模式与CTR模式对比

     CTR模式和OFB模式一样,都属于流密码。如果我们将单个分组的加密过程拿出来,那么OFB模式和CTR模式之间的差异还是很容易理解的(下图)。OFB模式是将加密的输出反愦到输入,而CTR模式则是将计数器的值用作输入。
    

  • CTR模式的特点

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

总结

分组密码简介和五大分组模式相关推荐

  1. springcloud简介与五大组件及相关配置

    一.spring cloud版本对应 SpringCloud版本 SPringBoot版本 2021.0.x aka Jubilee 2.6.x 2020.0.x aka Ilford 2.4.x, ...

  2. 分组密码算法分析,改进

    分组密码算法分析,改进 东方龙马公司 孙琳(2000.11) 序:这是我花了近2周的时间写的,可以说比较全面地介绍了各种分组密码.如DES算法.IDEA算法,其中最为宝贵的一部分是最后AES新推荐的算 ...

  3. 谷歌白帽SEO技术让你的搜索流量暴涨

    通过解决谷歌决定搜索结果的关键因素,超越竞争对手.这里有六种 "白帽子 "的方法可以做到. 如何使用以下6种白帽SEO技术让你的搜索流量翻倍 陷入了SEO优化的死循环中,却没有任何 ...

  4. Redis快速入门学习(基于狂神讲解)

    一.NoSQL简介 1.1.为什么要使用NoSQL? 1.单机Mysql时代 90年代,一个网站的访问量一般不会太大,单个数据库完全够用.随着用户增多,网站出现以下问题 数据量增加到一定程度,单机数据 ...

  5. vue3的pinia(大菠萝)

    一:Pinia简介和五大优势 Pinia是vue生态里Vuex的替代者,一个全新的vue状态管理库.在Vue3成为正式版以后,尤雨溪强势推荐的项目就是Pinia. 那先来看看Pinia比Vuex好的地 ...

  6. DL之BP:FFNN(前馈神经网络)结构与BP(一种训练神经网络的方法)算法的简介、训练神经网络的五大方法(RLS/GA/SA/PSO/BP)、FFNNLM对比BP之详细攻略

    DL之BP:FFNN(前馈神经网络)结构与BP(一种训练神经网络的方法)算法的简介.训练神经网络的五大方法(RLS/GA/SA/PSO/BP).FFNNLM对比BP之详细攻略 目录 FFNN(前馈神经 ...

  7. Scrapy五大核心组件简介

    五大核心组件 scrapy框架主要由五大组件组成,他们分别是调度器(Scheduler),下载器(Downloader),爬虫(Spider),和实体管道(Item Pipeline),Scrapy引 ...

  8. Spring Cloud Netflix五大组件简介

    微服务与微服务架构 微服务的优缺点 优点 缺点 Dubbo与Spring Cloud Spring Cloud Netflix Eureka Eureka的自我保护机制 Eureka和ZooKeepe ...

  9. 五大主流浏览器-简介

    世界五大主流浏览器 === **Internet Explorer 简称ie,微软公司旗下浏览器** IE的诞生起源于1994年,当时微软为了对抗几乎占据市场百分之九十份额的网景Netscape Na ...

最新文章

  1. 【安全牛学习笔记】手动漏洞挖掘(三)
  2. C#笔记24:善用Visual Studio
  3. android thrift https,HTTPS 学习
  4. 一个搜索框多个按钮_网站搜索栏设计指南:要不要?怎么设计?
  5. Html中meta标签的用法和作用
  6. Keil(MDK-ARM-STM32)介绍、下载、安装与注册
  7. win11触屏模式在哪 Windows11触屏模式的设置方法
  8. 在C#中利用Keep-Alive处理Socket网络异常断开的方法 (转)
  9. 洛谷P3958 奶酪
  10. 史上最全SpringCloud2.0视频教程
  11. 良心高效,3款超级好用的PC端软件,让你找不到拒绝的理由
  12. 转置矩阵,矩阵的行列式,伴随矩阵,逆矩阵的概念及C#求解
  13. 凯恩斯主义税收思想概述
  14. Java实现给PDF文件加水印、图片、签名(含测试类)
  15. c语言程序中a表示什么区别,C语言中if(!a)表示什么意思?
  16. log4j连接ekl
  17. Linux(进程概念详解)
  18. Ubuntu 14.04 64 位安装 Google 的 TensorFlow
  19. 12、字符(串)输入、输出
  20. 维特比算法[Wiki]

热门文章

  1. 亿嘉和机器人上市了吗_亿嘉和上半年收入持续增长,拟7亿元定增加码主业研发...
  2. php设置cookie值,PHP如何设置和取得Cookie值
  3. mips汇编计算开方_读美国伊利诺伊理工大学计算机科学硕士能学到什么?
  4. spring security:自定义认证成功处理器
  5. mysql change index_MySQL · 引擎特性 · Innodb change buffer介绍
  6. uilabel 自行撑开高度_IOS UILabel自適應里面的文字,自動調整寬度和高度的
  7. 浅聊在美找工作以及工作之后的感受
  8. python if else格式_Python if else条件语句详解
  9. 仿个人税务 app html5_【注意】你下载的可能是个假的个税App
  10. 内存spd规范_C语言内存泄露很严重,如何应对?