分组密码及五种工作模式、DES和AES

一、流密码(Stream Cipher)

每次加密数据流的一位或一个字节
古典流密码的例子有:密钥自动产生的Vigenère密码和Vernam密码。
理想情况下,可以使用一次一密版本的Vernam密码,其中密钥流和明文位流一样长。如果密钥流是随机的,除非是获得了密钥流,否则这个密码是不可破的。然而,密钥流必须提前以某种独立、安全的信道提供给双方。
实际上,位流必须以算法程序的方式实现,从而双方都可以生产具有密码学意义的位流。两个用户只需要共享生成密钥,则可以生产密钥流。

二、分组密码(Block Cipher)

将一个明文分组作为整体加密,并且通常得到的是与明文等长的密文分组
典型的分组大小是64位或128位
与流密码一样,两个用户要共享一个对称加密密钥
分组密码作用在n位明文分组上,产生n位密文分组,共有2n个不同的明文分组。由于加密是可逆的(即可以解密),每一个明文分组将唯一对应一个密文分组,这样的变换称为可逆变换或非奇异变换。
对于n位的代替分组密码,密钥的规模是nX2n位。
一般来说,分组密码的应用范围比流密码广泛。绝大多数基于网络的对称密码应用使用的是分组密码。
在这里插入图片描述

三、Feistel分组密码

现在使用的大多数对称分组加密算法都是基于Feistel分组密码结构的。
Feistel密码:交替使用代替(换成别的)和置换(只是顺序变了)
基于1945年Shannon理论的Feistel密码结构,仍是当前使用的大多数重要对称密码的基本结构
Shannon引进混淆扩散这两个术语来刻画任何密码系统的两个基本构件,为了对付基于统计分析方法的密码分析

  • 扩散:使明文的统计特征消散在密文中,可以通过让每个明文数字尽可能地影响多个密文数字获得,等价于说每个密文数字被许多明文数字影响。(尽可能地使明文和密文间的统计关系变得复杂)
  • 混淆:尽可能地使密文和加密密钥间的统计关系变得复杂,即使攻击者拥有一些密文的统计特征信息,利用密钥产生密文的方法的复杂性使得推导密钥极其困难。

Feidtel加密和解密(16轮):
在这里插入图片描述
Feistel结构的具体实现依赖于以下参数和特征
分组长度:分组长度越长意味着安全性越高,但会降低加、解密的速度,这种安全性的增加来自更好的扩散性(传统上,64位的长度比较合理,在分组密码设计里比较常见,高级加密标准中采用128位的分组长度)
密钥长度:密钥长度越长意味着安全性越高,但会降低加、解密的速度,这种安全性的增加来自更好的抗穷举攻击能力和更好的混淆性(64位的密钥不太够,一般使用的密钥长度是128位)
迭代轮数:Feistel密码的本质在于单轮不能提供足够的安全性而多轮加密可以取得很高的安全性,迭代轮数的典型值是16
子密钥产生算法:子密钥产生越复杂,密码分析就越困难
轮函数F:轮函数越复杂,抗攻击的能力就越强
快速软件加解密:很多情况下,加密算法被嵌入到应用程序中,以避免硬件实现的麻烦,因此,算法执行的速度很重要
简化分析难度:算法描述起来简洁清楚,那么分析其脆弱性也就容易一些,可以开发出更强的算法(DES并没有容易的分析方法)

Feistel结构示例:
在这里插入图片描述

四、分组密码的设计原理

Feistel密码的强度来自于3个方面:迭代轮数、函数F、密钥使用算法
迭代轮数(Number of rounds):迭代轮数越多,密码分析越困难。一般,迭代轮数的选择标准是使密码分析的难度大于简单穷举攻击的难度
函数F(Round function F):Feistel密码的核心是函数F,函数F给Feistel密码注入了混淆的成分,难以破解由F实现的这个代替密码函数的作用,F的明显标准是非线性的。F的非线性成分越多,任何形式的分析就会越困难。越难将F近似表示为某些线性等式,F的非线性度就越高。
密钥扩展算法(Key schedule algorithm):对于任何Feistel分组密码,密钥被用来为每轮迭代产生一个子密钥。一般,子密钥的选择应该加大推导子密钥及密钥种子的难度。Adams建议,密钥扩展算法至少应保证密钥和密文符合严格雪崩标准(SAC)和位独立标准(BIC)(两个标准是为了加强混淆的有效性。SAC:若S盒的输入的任意一位发生变化,输出的任意一位发生变化的可能性为二分之一。BIC:对任意的i,j,k,输入中的一位i发生变换,输出中的j,k的变化是彼此无关的)。

五、数据加密标准(Data Encryption Standard,DES)

明文64位,密钥64位(密钥实际长度为56位,8位用作奇偶校验或随意设置),密文64位
在这里插入图片描述
从上图左半部分可见明文的处理经过三个阶段:
64位明文经过初始置换IP被重新排列,进行16轮相同函数的作用,每轮作用都有置换和代替,最后一轮迭代的输出有64位,它是输入明文和密钥的函数。左半部分和右半部分互换产生预输出,最后预输出再被与初始置换IP互逆的置换(IP)-1 作用产生64位的密文。
右半部分给出了使用56位密钥的过程:
密钥经过一个置换后,再经过循环左移和一个置换分别得到各轮的子密钥(48位)用于各轮的迭代每轮的置换函数都一样,但由于密钥的循环移位使得各轮子密钥互不相同。

六、计时攻击

通过观察算法的一个既定实现对多种密文解密所需时间,来获得关于密钥或明文的信息。
计时攻击所利用的事实是加密算法和解密算法对于不同的输入所花的时间有着细微的差别。
目前还不能成功攻击DES,也不能攻击3DES和AES。

七、多重加密与三重DES

1.双重DES的加解密
密钥长度为56X2=112位
C=E(K2,E(K1,P))
在这里插入图片描述
P=D(K1,D(K2,C))
在这里插入图片描述
已知明文攻击可以成功对付密钥长度为112位的双重DES

2.使用两个密钥的三重DES
两个密钥,三次加密
运算过程:加密——解密——加密(EDE)
在这里插入图片描述
在这里插入图片描述
第二步采用解密运算并没有什么密码学上的含义,仅仅是为了使用三重DES的用户可以利用该算法解密单DES加密的数据。

3.使用三个密钥的三重DES
使用三个密钥进行三次加密
3DES的密钥长度为56x3=168位
C=E(K3,D(K2,E(K1,P)))
若想和单DES兼容,只需设K3=K2或K1=K2就可以了

八、分组密码的工作模式

在这里插入图片描述
(一)电码本模式(ECB)
一次处理一组明文分块,每次使用相同的密钥分别对明文分组独立加密
一段消息中有几个相同的明文组,密文也将出现几个相同的密文分组
需要填充
适合于数据较少的情况
应用:单个数据的安全传输(如:传输一个DES或AES密钥)
对于很长的消息,ECB模型可能是不安全的。如果消息是非结构化的,密码分析者可能利用这些规律性特征来破译。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(二)密文分组链接模式(CBC)
加密算法的输入是当前的明文组和上一个密文组的异或使用的密钥相同,相当于将所有的明文组链接起来了,加密算法的每次输入与本明文组没有固定的关系。
解密时,每个密文组分别进行解密,再与上一块密文异或就可恢复出明文
第一块明文可以和一个初始向量IV异或后再加密,以产生第一个明文分组
解密时将第一块密文解密的结果与IV异或而恢复出第一块明文
IV是和密文具有相同长度的数据分组,IV必须为收发双方共享,但第三方不能预测,IV不能不经授权而修改
需要填充

应用:面向分组的通用传输、认证
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(三)密文反馈模式(CFB)
CFB、OFB、CTR均可将分组密码当流密码使用。流密码不需要将明文填充到长度是分组长度的整数倍,且可实时操作。所以,待发送的字符流中任何一个字符都可以用面向字符的流密码加密后立即发送。流密码有个性质:密文与明文等长。
尽管CFB可以被视为流密码,但是它和流密码的典型构造并不一致。典型的流密码输入某个初始值和密钥,输出位流,这个位流再和明文位进行异或运算。CFB模式中,与明文异或的位流是与明文相关的。
加密时多重密码操作不能并行运行,解密时,如果输入块是首次建于IV和密文,那么必需的密码操作是可以并行的。
需要填充
加密算法的输入是上一个密文,产生的伪随机数和明文异或产生下一个输出
在这里插入图片描述
应用:面向数据流的通用传输、认证
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(四)输出反馈模式(OFB)
加密算法的输入是上一层加密的输出,且使用整个分组
OFB用加密函数的输出填充移位寄存器,CFB是用密文单元来填充移位寄存器
OFB对整个明文和密文分组进行运算,而不是仅对s位的子集运算
需要一个初始化向量,IV必须是一个时变值,即对每次加密运算都是唯一的
不需要填充
错误不传播
抗消息流篡改攻击的能力不如CFB

具有典型流密码的结构
OFB一次加密一个明文分组,分组的典型长度是64或128位。许多流密码一次加密一个字节。
应用:噪声信道上的数据流的传输
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(五)计数器模式(CTR)
应用在ATM(异步传输模式)网络安全与IPSec中
计数器使用与明文分组规模相同的长度
加密时,计数器加密后与明文分组异或得到密文分组没有链接。解密使用具有相同值的计数器序列,用加密后的计数器的值与密文分组异或恢复明文分组。解密时必须知道初始计数器的值。初始计数器的值必须为时变值。
保证计数器值唯一的一个办法是每一个消息计数器都增加1
不需要填充

应用:面向数据流的通用传输、用于高速需求
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、AES

1.AES的结构(AES structure)

明文分组的长度为128位即16字节
密钥长度可以为16、24、32字节(128、192、256位),根据密钥的长度,算法被称为AES-128,AES-192,AES-256
轮数依赖于密钥长度:16、24、32字节分别对应10、12、14轮
加密和解密算法的输入是一个128位分组

AES的加密过程(AES encryption process)
在这里插入图片描述
AES parameters:
在这里插入图片描述

2.AES加密和解密(AES encryption and decryption)

在这里插入图片描述

  • AES的显著特征是它不是Feistel结构,在每一轮都使用代替和混淆将整个数据分组作为一个单一的矩阵处理。
  • 输入的密钥被扩展成由44个32位字所组成的数组
  • 由4个不同的阶段组成,包括一个置换和三个代替
    • 字节代替:用一个S盒完成分组的字节到字节的代替
    • 行移位:一个简单的置换
    • 列混淆:利用域GF(28 )上的算术特性的一个代替
    • 轮密钥加:当前分组和扩展密钥的一部分进行按位异或
  • 算法结构简单:对加解密操作,算法由轮密钥加开始,执行9轮迭代运算,每轮包含所有四个阶段的代替,接着是第10轮的3个阶段
  • 仅在轮密钥加阶段使用密钥
  • 算法以轮密钥加开始,以轮密钥加结束
  • 轮密钥加实质上是一种Vernam密码形式,就其本身是不难破译的,另外三个阶段(没有提供算法的安全性)一起提供了混淆、扩散以及非线性功能
  • 每个阶段均可逆
  • 解密算法按逆序方式利用了扩展密钥。解密算法和加密算法不一样,这是由AES的特定结构决定。加密和解密中密钥扩展的形式一样,但在解密中变换的顺序与加密中变换的顺序不同,缺点:对同时需要加解密的应用而言,需要两个不同的软件或固件模块。
  • 加密和解密过程的最后一轮只包含3个阶段,由AES的特定结构决定的,也是密码算法可逆性的要求

3.AES的密钥扩展(AES key expansion)

密钥扩展算法用来防止已有的密码分析攻击,使用与轮相关的轮常量是为了防止不同轮的轮密钥产生方式上的对称性或相似性。
输入4个字(16字节),输出一个44个字组成(176字节)的一维线性数组(11轮:为初始轮密钥加阶段和算法中其他10轮中的每一轮提供4字的轮密钥)。
输入密钥直接被复制到扩展密钥数组的前4个字,然后每次用4个字填充扩展密钥数组余下的部分,每一个新增的字w[i]的值依赖于w[i-1]和w[i-4]。
在四种情形中,三组使用了异或。
对w数组中下标为4的倍数的元素采用更复杂的函数来计算。

基本原理:

  • 知道密钥或轮密钥的部分位不能计算出轮密钥的其他位
  • 是一个可逆的变换
  • 能够在各种处理器上有效的执行
  • 使用轮变量来消除对称性
  • 将密钥的差异性扩散到轮密钥中
  • 足够的非线性以防止轮密钥的差异完全由密钥的差异决定
  • 易于描述
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页