ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

信息安全密码学高级加密标准AES

2021-10-16 12:33:41  阅读:162  来源: 互联网

标签:混淆 AES 字节 信息安全 算法 密钥 密码学 移位


AES


AES

简介

数据加密标准(DES)的密钥长度是56比特,算法的理论安全强度是256,随着计算机的发展,DES变得不够安全,1997年1月,美国国家标准技术研究所(NIST)宣布征集高级加密标准(AES),用于取代DES。最终Rijndael、Serpent、Twofist、RC6、MARS五种算法进入最后一轮,经过安全性分析、软硬件性能评估等步骤,Rijndael获胜。该算法是一个分组密码算法族,分组长度包括128bit、160bit、192bit、224bit、256bit五种,密钥长度也包括这五种长度,但是最终AES选择了分组长度为128bit,密钥长度分为128bit、192bit、256bit三种版本。三种版本的思路基本一样,密钥扩展算法的过程略有不同,加解密的轮数适当增加,但是操作是一致的。AES算法是一个分组密码,属于对称密码范畴。


算法流程

AES加密算法包含4个操作:字节替代(SubBytes)、位移位(ShiftRows)、列混淆(MixColumns)和轮密钥加。解密算法的每一步对应加密算法的逆操作;加解密所有操作的顺序正好相反。加解密中每轮的的密钥分别由种子密钥经过密钥扩展算法得到。算法中的16字节的明文、密文和轮子密钥都用一个4*4的矩阵表示。
AES算法加解密流程图

操作1:字节替代

字节替代主要是通过S盒完成一个字节到另外一个字节的映射。下面的两张图分别为S盒和S-1(S盒的逆)。S盒用于提供密码算法的混淆性。
S盒
S盒的逆
S盒和S盒的逆都是16*16的矩阵,完成8bit输入到8bit输出的映射,输入的高4bit对应的值为行标,低4bit的值为列标,假定输入字节的值为a=a7a6a5a4a3a2a1a0,则输出的值为S[a7a6a5a4][a3a2a1a0],S-1的变换也同理。

S盒的构造方法

  1. 按字节值的升序逐行初始化S盒。第一行是{00},{01},{02},…,{0F};第二行是{10},{11},{12},…,{1F}…直至第16行。因此在第y+1行第x+1列的字节值为{yx}。
  2. 把S盒中每个字节映射为它在有限域GF(28)中的逆,如{00}被映射为{00}。
  3. 把S盒中每个字节的8个构成位分别记为(b1,b2,b3,b4,b5,b6,b7,b8)。对每个字节的每个构成位做如下操作: b i ′ = b i ⨁ b ( i + 4 ) m o d 8 ⨁ b ( i + 5 ) m o d 8 ⨁ b ( i + 6 ) m o d 8 ⨁ b ( i + 7 ) m o d 8 ⨁ c i b_{i}^{'}=b_i \bigoplus b_{(i+4) mod 8} \bigoplus b_{(i+5) mod 8} \bigoplus b_{(i+6) mod 8} \bigoplus b_{(i+7) mod 8} \bigoplus c_i bi′​=bi​⨁b(i+4)mod8​⨁b(i+5)mod8​⨁b(i+6)mod8​⨁b(i+7)mod8​⨁ci​其中ci是指值为{63}的字节c的第i位。符号(’)表示变量的值要被等式右边的值更新。

操作2:行移位

行移位是一个4*4的矩阵内部字节之间的置换,用于提供算法的扩散性。

正向行移位

正向行移位用于加密,其原理图如下。
正向行移位原理
其中第一行保持不变,第二行循环左移8bit,第三行循环左移16bit,第四行循环左移24bit。
假定矩阵为s,用公式表示如下: s [ i ] [ j ] = s [ i ] [ ( i + j ) s[i][j] = s[i][(i+j) % 4] s[i][j]=s[i][(i+j),其中i、j均属于[0, 3]。

逆向行移位

逆向行移位是正向行移位的相反的操作,即:第一行保持不变,第二行循环右移8bit,第三行循环右移16bit,第四行循环右移24bit。

操作3:列混淆

利用GF(28)域算数特性的一个代替,同样用于提供算法的扩散性。

正向列混淆

正向列混淆原理图如下。
正向列混淆原理图
根据矩阵的乘法可知,在列混淆过程中,每个字节对应的值只与该列的4个值有关。此处的乘法和加法都是定义在GF(28)域上的,需要注意如下几点:

  1. 将某个字节所对应的值乘以2,其结果就是该值的二进制位左移一位,如果原始值的最高位为1.则还需要将移位后的结果异或;
  2. 乘法对加法满足分配率;
  3. 此处的矩阵乘法与传统意义上的乘法有所不同,各个值在相加时使用的是模28加法(异或运算)。

逆向列混淆

是正向列混淆的逆变换,经过一次逆向列混淆后即可恢复原文。

操作4:轮密钥加

原理是“任何数和自身的异或结果为0”。加密过程中,每轮的输入与轮子密钥异或一次,因此解密时,再异或该轮子密钥即可恢复。

密钥扩展算法

密钥扩展算法原理图

  1. 将种子密钥按图a的格式排列,其中k0、k1、…、k15依次表示种子密钥的一个字节;排列后用4个32bit的字表示,分别记为w[0]、w[1]、w[2]、w[3];
  2. 按照如下方式,依次求解w[j,其中j是整数并且属于[4, 43];
  3. 若j%4=0,则 w [ j ] = w [ j − 4 ] ⨁ g ( w [ j − 1 ] ) w[j] = w[j-4]\bigoplus g(w[j-1]) w[j]=w[j−4]⨁g(w[j−1]),否则 w [ j ] = w [ j − 4 ] ⨁ w [ j − 1 w[j] = w[j-4]\bigoplus w[j-1 w[j]=w[j−4]⨁w[j−1,其中函数g的流程如下:将w循环左移8bit;分别对每个字节做S盒置换;与32bit的常量进行异或。

源码

后续补上

标签:混淆,AES,字节,信息安全,算法,密钥,密码学,移位
来源: https://blog.csdn.net/wcy1034036507/article/details/120788870

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有