期末复习:信息安全(五)

高级加密标准AES

1997年9月12日,美国联邦登记处公布了正是整机AES候选算法的通告,基本要求是:比三重DES快、至少与三重DES一样安全、数据分组长度为128比特、密钥长度为128/192/256比特
⭐️AES的总体描述
AES具有128bit的分组长度,三种可选的密钥长度, 128bit、192bit和256bit。AES是一个迭代型密码,轮数Nr依赖于密钥长度。密钥和128bit、192bit、256bit时,轮数分别为10、12、14,算法执行过程如下:

  1. 给定一个明文x,将State初始化为x,并进行AddRoundKey操作,将RoundKey和State异或。
  2. 对前Nr-1轮中的每一轮,用S盒对进行一次代换操作,称为SubBytes;对State做一置换ShiftRows;再对State做一次操作MixColumns;然后进行AddRoundKey操作。
  3. 依次进行SubBytes、 ShiftRows和AddRoundKey操作。
  4. 将State定义为密文。
    🌸字节代换、行移位、列混淆、密钥加
    ⭐️AES的参数
    假定一个字是32位,不论密钥长度是多少,分组长度都是128bit,即4个字,如下所示:
    在这里插入图片描述
    ⭐️AES算法结构
    在这种密码的每一轮中,轮输入首先被一个由子密钥控制的可逆函数S作用,然后再对所的结果置换(或可逆线性变换)P作用。S和P分别被称为混乱层扩散层主要起混乱(密钥和密文的关系复杂)和扩散(明文和密文的关系复杂)作用。
    在这里插入图片描述
    🌸AES算法的轮变换中没有Feistel结构,轮变换是由三个不同的可逆一致变换组成,称之为层:
  • 线性混合层(行移位和列混合):确保多伦至上的高度扩散。
  • 非线性层(字节替换):S-盒的并行应用。
  • 密钥加层:轮密钥简单地异或到中间状态上。
    在这里插入图片描述
    ⭐️AES-128加解密过程
    在这里插入图片描述
    Add round key:轮密钥加,将明文与密文异或,影响下一轮的明文。
    Substitue bytes:字节代换。

⭐️AES算法描述

//假设:State表示数据,以及每一轮的中间结果RoundKey表示每一轮对应的子密钥。算法如下:
第一轮之前执行AddRoundKey(State,RoundKey)
     Round(State,RoundKey) {
          ByteSub(State);  ShiftRow(State);
 	             MixColumn(State);	               AddRoundKey(State,RoundKey);
               }
               FinalRound(State,RoundKey) {
               ByteSub(State);  ShiftRow(State);
               AddRoundKey(State,RoundKey);
               }

最后一轮没有进行列混淆操作。
AES中的操作都是以字节为基础,所有用到的变量都由适当数量的字节组成。明文x包括16个字节x0,…x15。State用如下矩阵表示:
在这里插入图片描述
在这里插入图片描述

  • 字节代替
    字节代替是一个非线性的字节代替,独立地在每个状态字节上进行运算,代替表(S-盒)是可逆的,是一个16x16的矩阵。
    在这里插入图片描述
    在这里插入图片描述
    举例:
    (查表即可)在这里插入图片描述
    注意:高位表示行数,低位表示列数。
  • 行移位变换
    在这里插入图片描述
    举例:
    在这里插入图片描述
  • 列混合变换:
    代替操作,将状态的列看作有限域GF(28)上的四维向量并被有限域GF(28)上的一个固定可逆方针A乘。每一列和矩阵相乘得到列混淆的结果。
    在这里插入图片描述
  • 轮密钥加:一个简单的按位异或的操作
    在这里插入图片描述
    ⭐️AES的密钥调度
    轮密钥是通过密钥调度算法从密钥中产生,包括两个组成部分:密钥扩展和轮密钥选取
    基本原理如下:
    所有轮密钥比特的总数等于分组长度乘轮数加1。(如128比特的分组长度和10轮迭代,共需要128×11=1408比特的密钥)。
    将密码密钥扩展成一个扩展密钥。
    轮密钥按下述方式从扩展密钥中选取:第一个轮密钥由开始Nb个字组成,第二个轮密钥由接下来的Nb个字组成,如此继续下去。
    🌸AES的密钥扩展
    轮密钥的并联叫做扩展密钥,供包含44个字,表示为:w0,…w43,在这里的每一个wi,都是一个字。
    在这里插入图片描述
    在这里插入图片描述
    🌸AES中的g变换
    Rotword执行一字节循环左移:[b0,b1,b2,b3] → [b1,b2,b3,b0]
    Subword执行使用S-盒实行字节替换
    前两步的结果XOR与轮常数Rcon[j]
    在这里插入图片描述
    举例:
    在这里插入图片描述
    缓存–>左移–>查询S-盒表–>查Rcon表–> 与Rcon异或–>再将结果与上一行同样位置的数值进行异或

⭐️分组密码的工作模式
分组密码在加密时明文分组的长度是固定的,而实用中待加密消息的数据量是不定的,数据格式可能是多种多样的。为了能在各种应用场合安全地使用分组密码,通常对不同的使用目的运用不同的工作模式。
一个分组密码的工作模式就是以该分组密码为基础构造的一个密码系统
目前已提出许多种分组密码的工作模式,如电码本(ECB)、密码分组链接(CBC)、密码反馈(CFB)、输 出反馈(OFB)、级连(CM)、计数器、分组链接(BC)、扩散密码分组链接(PCBC)、明文反馈(PFB) 、非 线性函数输出反馈(OFBNLF)等模式。

  • ECB模式
    ECB(Electronic Codebook)模式是最简单的运行模式,它一次对一个64比特长的明文分组加密,而且每次的加密密钥都相同。
    在这里插入图片描述
    优点:
    (1) 实现简单
    (2) 不同明文分组的加密不存在依赖关系,可并行实施,尤其是硬件实现时速度很快
    缺点:
    不同的明文分组之间的加密独立进行,造成相同明文分组对应相同密文分组,因而不能隐蔽明文分组的统计规律和结构规律,不能抵抗替换攻击。
    典型应用:
  1. 用于随机数的加密保护;
  2. 用於单分组明文的加密。
  • 密码分组连接(CBC)模式
    为了克服ECB的安全性缺陷,希望设计一个工作模式,可以使得当同一个明文分组重复出现时产生不同的密文分组
    一个简单的方法是密码分组链接,从而使输出不仅与当前输入有关,而且与以前输入和输出有关。
    一种简单的方案就是密码分组链接(Cipher Block Chaining)模式。
    每次加密使用同一密钥,加密算法的输入是当前明文前一次密文组的异或。因此加密算法的输入与明文分组之间 不再有固定的关系,所以重复的明文分组不会在密文中暴露。
    在这里插入图片描述
    解密时,每一个密文分组被解密后,再与前一个密文分组异或来产生明文分组。即:DK[Ci]⊕Ci-1=DK[EK[Ci-1⊕Pi]]⊕Ci-1=Ci-1⊕Pi⊕Ci-1=Pi
    这里Ci=EK[Ci-1⊕Pi],i=1,2,…,N。
    为产生第一个密文分组 ,需要一个初始向量C0=Vi 与第一个明文分组异或。解密时,Vi与解密算法的第一输出进行异或以恢复第一个明文分组。
    Vi对于收发双方都应是已知的。为使安全性程度最高,Vi应像密钥一样被保护。
    🌸CBC的特点
    明文块的统计特性得到了隐蔽。
    由于在密文CBC模式中,各密文块不仅与当前明文块有关,而且还与以前的明文块及初始化向量有关,从而使明文的统计规律在密文中得到了较好的隐蔽。
    具有有限的(两步)错误传播特性。
    一个密文块的错误将导致两个密文块不能正确脱密。
    具有自同步功能
    密文出现丢块和错块不影响后续密文块的脱密。若从第t块起密文块正确,则第t+1个明文块就能正确求出。
    明文分组中一位出错,将影响该分组的密文及其以后的所有密文分组
    典型应用:
  1. 数据加密; 2) 完整性认证和身份认证;
    完整性认证的含义
    完整性认证是一个“用户”检验它收到的文件是否遭到第三方有意或无意的篡改。
    利用CBC模式可实现报文的完整性认证
    目的:检查文件在(直接或加密)传输和存储中是否遭到有意或无意的篡改
    例:电脑彩票的防伪技术
    方法:
  2. 选择一个分组密码算法和一个认证密钥,存于售票机内
  3. 将电脑彩票上的重要信息,如彩票期号、彩票号码、彩票股量、售票单位代号等重要信息按某个约定的规则作为彩票资料明文
  4. 对彩票资料明文扩展一个校验码分组后,利用认证密钥和分组密码算法对之加密,并将得到的最后一个分组密文作为认证码打印于彩票上面;
    认证过程:
    执行3),并将计算出的认证码与彩票上的认证码比较,二者一致时判定该彩票是真彩票,否则判定该彩票是假彩票。
  • 密码反馈模式(FCB)
    若待加密消息需按字符、字节或比特处理时,可采用CFB模式。并称带加密消息按j比特处理的CFB模式为j比特CFB模式。
    设传送的每个单元(如一个字符)是j 比特长,通常取 j =8,与CBC模式一样,明文单元被链接在一起,使得密文是前面所有明文的函数。
    加密时,加密算法的输入是64比特移位寄存器,其初值为某个初始向量Vi。
    加密算法输出的最左(最高有效位) j比特与明文的第一个单元P1异或,产生出密文的第一个单元C1,并传送该单元。
    然后将移位寄存器的内容左移j位并将C1送入移位寄存器的最右边(最低有效位)j位。
    这一过程持续进行直到明文的所有单元都被加密为止。
    在这里插入图片描述
    优点:
  1. 这是将分组密码当作序列密码(数据以位或者字节形式到达)使用的一种方式,
    2)加密、解密都需要用到分组加密器;
    2)明文发生错误,错误会传播;
  2. 如果密文发生传输错误,只会影响它出现在移位寄存器期间解密的8个字节的数据得不到正确解密,8个字节一过,后面明文可以得到正确的解密结果。
    缺点:
    比较浪费,因为每轮加解密中都丢弃了大部分结果,通常只保留了的S为为1个字节。
  • 输出反馈模式(OFB)
    OFB 模式在结构上类似于CFB。不同之处
  1. OFB模式将加密算法的输出反馈到移位寄存器,而CFB模式是将密文单元反馈到移位寄存器。
  2. OFB针对明文和密文分组运算,而CFB仅对S位的子集运算
    在这里插入图片描述
    优点:
    1)传输过程中的比特错误不会被传播。
    例如C1中出现一比特错误,在解密结果中 只有P1受影响,以后各明文单元则不受影响 。而在CFB中, C1也作为移位寄存器的输入,因此它的一比特错误会影响解 密结果中各明文单元的值。
    解密中密文的1比特也只影响明文的1个错误
    2).分组密码转化为流模式;
    3).可以及时加密传送小于分组的数据;
    缺点:难于检测密文是否被篡改。
    适用于传输语音图像
  • 计数器模式(CTR)
    对一系列输入数据块(称为计数)进行加密,产生一系列的输出块,输出块与明文异或得到密文。
    应用于ATM网络安全及IPSec中
    密码算法产生一个16 字节的伪随机码块流,伪随机码块与输入的明文进行异或运算后产生密文输出。密文与同样的伪随机码进行异或运算后可以重产生明文。
    在这里插入图片描述
    使用与明文分组规模相同的计数器长度
    处理效率高(并行计算)
    预处理可以极大提高吞吐量:算法和加密盒的输出不依靠明文和密文的输入
    可以随机对任意一个密文分组进行解密处理,对该密文分组的处理与其他密文无关(第i块解密不依赖第i-1块)
    实现的简单性,只是异或,且无解密算法
    适用于实时性和速度要求较高的场合
  • 流密码:RC4
    RC4由RSA三人组中的头号人物Ronald Rivest在1987年设计的密钥长度可变的流加密算法簇。
    和DES算法一样,是一种对称加密算法。
    算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性 。
    可变密钥长度,可变范围为1-256字节(8-2048比特)
    以随机置换为基础。密钥长度是可变的,RC4起初是用于保护商业机密的。但是在1994年9月,它的算法被发布在互联网上,也就不再有什么商业机密了
    用途广泛,常用于SSL/TLS,IEEE 802.11无线语句网标准的一部分WEP(Wired Equivalent Privacy)协议和新Wifi受保护访问协议(WPA)中。
    1、密钥流:RC4算法的关键是根据明文和密钥生成相应的密钥流,密钥流的长度和明文的长度是对应的,也就是说明文的长度是500字节,那么密钥流也是500字节。当然,加密生成的密文也是500字节,因为密文第i字节=明文第i字节^密钥流第i字节;
    2、状态向量S:长度为256,S[0],S[1]…S[255]。每个单元都是一个字节,算法运行的任何时候,S都包括0-255的8比特数的排列组合,只不过值的位置发生了变换;
    3、临时向量T:长度也为256,每个单元也是一个字节。如果密钥的长度是256字节,就直接把密钥的值赋给T,否则,轮转地将密钥的每个字节赋给T;
    4、密钥K:长度为1-256字节,注意密钥的长度keylen与明文长度、密钥流的长度没有必然关系,通常密钥的长度趣味16字节(128比特)。
    在这里插入图片描述
//第一部分:初始化算法(KSA) 
1、初始化S和T
for i=0 to 255 do
   S[i]=i;
   T[i]=K[ i mod keylen ];
2、初始排列S
j=0;
for i=0 to 255 do
   j= ( j+S[i]+T[i])mod256;
   swap(S[i],S[j]);
//第二部分:伪随机子密钥流生成算法
3、产生密钥流
i,j=0;
for r=0 to len do  //r为明文长度,r字节
   i=(i+1) mod 256;
   j=(j+S[i])mod 256;
   swap(S[i],S[j]);
   t=(S[i]+S[j])mod 256;
   k[r]=S[t]; 

在这里插入图片描述
分组密码工作模式一览

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章