分组密码加密模式选择都有哪些?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分组密码加密模式选择都有哪些?相关的知识,希望对你有一定的参考价值。

加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption)。对称加密又分为分组加密和序列密码。分组密码,也叫块加密(block cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组。序列密码,也叫流加密(stream cyphers),一次加密明文中的一个位。是指利用少量的密钥(制乱元素)通过某种复杂的运算(密码算法)产生大量的伪随机位流,用于对明文位流的加密。解密是指用同样的密钥和密码算法及与加密相同的伪随机位流,用以还原明文位流。在分组加密算法中,有ECB,CBC,CFB,OFB这几种算法模式。ECB(Electronic Code Book)/电码。简单,有利于并行计算,误差不会被传送;不能隐藏明文的模式;repetitions in message may show in cipher text/在密文中出现明文消息的重复。可能对明文进行主动攻击;加密消息块相互独立成为被攻击的弱点/weakness due to encrypted message blocks being independent. CBC(Cipher Block Chaining) 这个词在分组密码中经常会用到,它是指一个明文分组在被加密之前要与前一个的密文分组进行异或运算。当加密算法用于此模式的时候除密钥外,还需协商一个初始化向量(IV),这个IV没有实际意义,只是在第一次计算的时候需要用到而已。采用这种模式的话安全性会有所提高。不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。each ciphertext block depends on all message blocks/每个密文块依赖于所有的信息块thus a change in the message affects all ciphertext blocks/明文消息中一个改变会影响所有密文块need Initial Vector (IV) known to sender & receiver/发送方和接收方都需要知道初始化向量 。

参考技术A

分组密码工作模式的应用背景:多次使用相同的密钥对多个分组加密,会引发许多安全问题。为了应对不同场合,因而需要开发出不同的工作模式来增强密码算法的安全性。ECB特别适合数据较少的情况,对于很长的信息或者具有特定结构的信息,其大量重复的信息或固定的字符开头将给密码分析者提供大量的已知明密文对。若明文不是完整的分组,ECB需要进行填充。CBC(Cipher Block Chaining)由于加密算法的每次输入和本明文组没有固定的关系,因此就算有重复的明文组,加密后也看不出来了。为了配合算法的需要,有一个初始向量(IV)。与ECB一样有填充机制以保证完整的分组。CFB(Cipher Feedback)和OFB,CTR模式一样,均可将分组密码当做流密码(实际是将分组大小任意缩减)使用。

参考技术B

密码其目的为通过加密数据为Alice发给Bob的消息提供了保密性。电子密码本模式(ECB)

一种最直接的消息加密方式。若分组密码加密分组大小为b位,则如果长度超过b位时,消息将被分割为欸大小为b位的分组。如果消息长度不是b位的整数倍,则在加密前必须将其填充为b位的整数倍。由于传输问题导致接收方没有收到所有的加密分组时,接收方还是可能解密已收到的分组。但ECB模式最大的问题在于它的加密是高度确定的(只要密钥不变,相同的明文分组总是产生相同的密文分组),即ECB模式可以看作是巨大的密码本,每个输入都映射到特定的输出。ECB容易遭受流量攻击、容易遭受代换攻击、容易遭受统计分析攻击。因此,人们期望每次加密相同的明文会得到不同的密文,这种行为叫做“概率加密”。人们可以引入一些随机化初始向量来实现概率加密。下面所有模式都使用初始向量来实现概率加密。

Day1对称加密分组密码模式

一、密码基础


1.1加密三要素 

明文/密文

秘钥:定长的字符串,需要根据加密算法确定其长度

算法:加密算法、解密算法


1.2常用的两种加密方式

1)对称加密

秘钥: 加密解密使用的是同一个秘钥, 秘钥有一个 

特点:双向保证机密性;加密效率高, 适合加密大数据, 大文件;加密强度不高, 相对于非对称加密。


2)非对称加密
秘钥: 加密解密使用的不同的秘钥, 秘钥有两个, 需要使用秘钥生成算法, 得到密钥对

    -公钥:可以公开的秘钥,公钥加密数据, 解密需要使用私钥

    -私钥:需要妥善保管的秘钥, 知道的人越少越好

特点:私钥加密, 公钥解密;数据的机密性只能单方向保证;加密效率低, 适合加密少量数据 加密强度高, 相对于对称加密。


1.3密码信息威胁




二、对称加密


2.1DES


    DES是一种将64比特的明文加密成64比特的密文的对称密码算法, 它的密钥长度是56比特 。尽管从规格上来 说,DES的密钥长度是64比特,但由于每隔7比特会设置一个用于错误检查的比特,因此实质上其密钥长度是56比特

    DES是以64比特的明文(比特序列)为一个单位来进行加密的, 这个64比特的单位称为分组 。一般来说,以分 组为单位进行处理的密码算法称为 分组密码(blockcipher) ,DES就是分组密码的一种。

    DES每次只能加密64比特的数据,如果要加密的明文比较长,就需要对DES加密进行迭代(反复),而迭代的具 体方式就称为模式(mode)。


Day1对称加密、分组密码模式

2.2 三重DES

    三重DES(triple-DES)是为了增加DES的强度, DES重复3次所得到的一种密码算法 ,通常缩写为3DES

    明文经过三次DES处理才能变成最后的密文,由于 DES密钥的长度实质上是56比特 ,因此三重DES的密钥长度就 是56×3=168比特, 加上用于错误检测的标志位8x3, 192bit

    三重DES并不是进行三次DES加密(加密-->加密-->加密),而是 加密-->解密-->加密 的过程。当三重DES中所有的密钥都相同时,三重DES也就等同于普通的DES了。


Day1对称加密、分组密码模式

Day1对称加密、分组密码模式


2.3AES

    和DES—样,AES算法也是由多个轮所构成的,下图展示了每一轮的大致计算步骤。DES使用Feistel网络作为其基 本结构,而AES没有使用Feistel网络,而是使用了SPN Rijndael的输人分组为128比特,也就是16字节。首先,需 要逐个字节地对16字节的输入数据进行SubBytes处理。所谓SubBytes,就是以每个字节的值(0~255中的任意 值)为索引,从一张拥有256个值的替换表(S-Box)中查找出对应值的处理,也是说,将一个1字节的值替换成 另一个1字节的值。

    SubBytes之后需要进行ShiRows处理,即将SubBytes的输出以字节为单位进行打乱处理。从下图的线我们可以 看出,这种打乱处理是有规律的。

    ShiRows之后需要进行MixCo1umns处理,即对一个4字节的值进行比特运算,将其变为另外一个4字节值。最后,需要将MixColumns的输出与轮密钥进行XOR,即进行AddRoundKey处理。到这里,AES的一轮就结東了。 实际上,在AES中需要重复进行10 ~ 14轮计算。

    通过上面的结构我们可以发现输入的所有比特在一轮中都会被加密。和每一轮都只加密一半输人的比特的Feistel网络相比,这种方式的优势在于加密所需要的轮数更少。此外,这种方式还有一个优势,即SubBytesShiRowsMixColumns可以分别按字节、行和列为单位进行并行计算。


Day1对称加密、分组密码模式

    下图展示了AES中一轮的解密过程。从图中我们可以看出,SubBytesShiRowsMixColumns分别存在反向运算InvSubBytesInvShiRowsInvMixColumns,这是因为AES不像Feistel网络一样能够用同一种结构实现加密和解密。


Day1对称加密、分组密码模式

2.4总结

DES -- Data Encryption Standard

  • 不安全, 已经被破解了

  • 是分组密码, 先对数据进行分组, 然后在加密或解密

  • DES的分组长度:8byte == 64bit

  • DES的秘钥长度:56bit秘钥长度+8bit错误检测标志位 = 64bit == 8byte

3DES -- Triple-DES

  • 安全, 但是效率低

  • 算法描述:进行了3次des加密

  • 是分组密码

  • 3DES分组长度:8字节

  • 3DES秘钥长度:24字节, 在算法内部会被平均分成3份

  • 3DES加密过程:秘钥1->加密,秘钥2->解密,秘钥3->加密

  • 3DES解密过程:秘钥1->解密,秘钥2->加密,秘钥3->解密

AES -- Advanced Encryption Standard

  • 安全, 效率高, 推荐使用的

  • 是分组密码

  • AES分组长度:128bit = 16字节

  • AES秘钥长度:128bit = 16字节;192bit = 24字节;256bit = 32字节,go中的秘钥长度只能是16字节



三、分组密码模式

  • ECB模式:Electronic Code Book mode(电子密码本模式)

  • CBC模式:Cipher Block Chaining mode(密码分组链接模式)

  • CFB模式:Cipher FeedBack mode(密文反馈模式)

  • OFB模式:Output FeedBack mode(输出反馈模式)

  • CTR模式:CounTeR mode(计数器模式)


3.1ECB模式

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


Day1对称加密、分组密码模式

Day1对称加密、分组密码模式

Day1对称加密、分组密码模式


3.2CBC模式

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


Day1对称加密、分组密码模式

Day1对称加密、分组密码模式

Day1对称加密、分组密码模式

Day1对称加密、分组密码模式


3.3CFB模式

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

    所谓反馈,这里指的就是返回输人端的意思,即前一个密文分组会被送回到密码算法的输入端。CFB模式的解密和CBC模式的加密在流程上其实是非常相似的。

    在CBC模式中,明文分组和密文分 组之间有XOR和密码算法两个步骤,而在CFB模式中,明文分组和密文分组之间则只有XOR




Day1对称加密、分组密码模式

Day1对称加密、分组密码模式

Day1对称加密、分组密码模式

    CFB模式中由密算法所生成的比特序列称为密钥流(key stream)。在CFB模式中,密码算法就相当于用来生成。密钥流的伪随机数生成器,而初始化向量相当于伪随机数生成器的“种子“。

    在CFB模式中,明文数据可以被逐比特加密,因此我们可以将CFB模式看做是一种使用分组密码来实现流密码的方式


3.4OFB模式

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

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


Day1对称加密、分组密码模式

Day1对称加密、分组密码模式

Day1对称加密、分组密码模式

Day1对称加密、分组密码模式


3.5CTR模式

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

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


Day1对称加密、分组密码模式

Day1对称加密、分组密码模式

Day1对称加密、分组密码模式

Day1对称加密、分组密码模式

计数器的生成方法

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

Day1对称加密、分组密码模式

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

Day1对称加密、分组密码模式

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



3.6总结


ECB - Electronic Code Book, 电子密码本模式

特点: 简单, 效率高, 密文有规律, 容易被破解 

最后一个明文分组必须要填充

  • des/3des -> 最后一个分组填充满8字节

  • aes -> 最后一个分组填充满16字节

不需要初始化向量


CBC - Cipher Block Chaining, 密码块链模式 

特点: 密文没有规律, 经常使用的加密方式

最后一个明文分组需要填充

  • des/3des -> 最后一个分组填充8字节

  • aes -> 最后一个分组填充满16字节

需要一个初始化向量 - 一个数组

  • 数组的长度: 与明文分组相等

  • 数据来源: 负责加密的人的提供的

  • 加解密使用的初始化向量值必须相同





CFB - Cipher FeedBack, 密文反馈模式

特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文 

需要一个初始化向量 - 一个数组

  • 数组的长度: 与明文分组相等 

  • 数据来源: 负责加密的人的提供的 

  • 加解密使用的初始化向量值必须相同

不需要填充


OFB - Output-Feedback, 输出反馈模式

特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文 

需要一个初始化向量 - 一个数组

  • 数组的长度: 与明文分组相等 

  • 数据来源: 负责加密的人的提供的 

  • 加解密使用的初始化向量值必须相同

不需要填充


CTR - CounTeR, 计数器模式

特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文 

不需要初始化向量

  • go接口中的iv可以理解为随机数种子, iv的长度 == 明文分组的长度 

不需要填充


最后一个明文分组的填充 

使用cbc, ecb需要填充

使用 ofb, cfb, ctr不需要填充


初始化向量 - IV
ecb, ctr模式不需要初始化向量

cbc, ofc, cfb需要初始化向量

    初始化向量的长度

  •     des/3des -> 8字节

  •     aes -> 16字节 加解密使用的初始化向量相同



推荐使用CBC和CTR

以上是关于分组密码加密模式选择都有哪些?的主要内容,如果未能解决你的问题,请参考以下文章

密码技术--分组密码的加密模式

分组密码模式: CBC模式(密码分组链接模式)

分组密码的五种工作模式

Day1对称加密分组密码模式

分组加密的四种模式

分组加密的四种模式(ECBCBCCFBOFB)