分组加密算法-AES

1. AES明文即密钥长度

        明文:明文分组长度为128位,即16字节。

        密钥:密钥长度可以是16字节,24字节,32字节(128位,192位,256位)。根据密钥的长度,算法被分为AES-128、AES-192、AES-256。

2. AES加解密过程

        加密和解密算法的输入是一个128位分组,这个分组被描述为4×4字节的方阵。同样,密钥也被描述为方阵。密钥被扩展为一个密钥字序列,每个字都为4字节,128位密钥最终拓展为44个字的序列。       

        注意:矩阵中的字节按列排序。加密算法的128位明文分组输入的前4字节被按序放在in矩阵的第一列,接着的4字节放在in矩阵的第二列,以此类推。类似的,扩展密钥的前4字节放在w矩阵的第一列。

        密码由N轮组成,N取决于密钥长度。密钥扩展函数产生N+1轮密钥。

        前N-1轮由4个不同的变换组成:①字节替代②行移位③列混淆④轮密钥加。

        第N轮只包含3个变换:缺少了列混淆。

        在第一轮的前面有一个起始的单变换(轮密钥加),可将其视为第0轮。

        与大多数分组密码一样,解密算法按逆序方式利用了扩展密钥。然而,AES解密算法与加密算法并不相同,这是由AES的特定结构决定的。

3. S-Box的构造

3.1 S盒的构造

        1)按字节的升序逐行初始化S盒。第一行是{00},{01},{02},...,{0F};第二行{10},{11},{12},...,{1F};以此类推。y行x列的字节值是{yx}。

        2)将S盒中的每个字节映射为他在有限域GF(2^8)中的逆;{00}映射为其自身{00}。

        3)将S盒中每个字节的8个构成位记为({b_7,b_6,b_5,b_4,b_3,b_2,b_1,b_0})。对S盒的每个字节的每个位做如下变换:

{b}'=b_i\oplus b_{(i+4)mod\;8}\oplus b_{(i+5)mod\;8}\oplus b_{(i+6)mod\;8}\oplus b_{(i+7)mod\;8}\oplus c_i

  式中,c_i是指值为{63}的字节c的第i位,即(c_7,c_6,c_5,c_4,c_3,c_2,c_1,c_0)=(01100011)。符号  “ ' ”表示变量的值要被等式右边的值更新。AES标准用矩阵形式描述了这个变换:

\begin{bmatrix} b_7'\\b_6' \\b_5' \\b_4' \\b_3' \\b_2' \\b_1' \\b_0' \end{bmatrix}=\begin{bmatrix} 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0\\ 0 & 1 & 1 & 1 & 1 & 1 & 0 & 0\\ 0 & 0 & 1 & 1 & 1 & 1 & 1 & 0\\ 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1\\ 1 & 0 & 0 & 0 & 1 & 1 & 1 & 1\\ 1 & 1 & 0 & 0 & 0 & 1 & 1 & 1\\ 1 & 1 & 1 & 0 & 0 & 0 & 1 & 1\\ 1 & 1 & 1 & 1 & 0 & 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} b_7\\ b_6\\ b_5\\ b_4\\ b_3\\ b_2\\ b_1\\ b_0 \end{bmatrix}+\begin{bmatrix} 0\\ 1\\ 1\\ 0\\ 0\\ 0\\ 1\\ 1 \end{bmatrix}

3.2 逆S盒的构造

1)按字节的升序逐行初始化S盒。第一行是{00},{01},{02},...,{0F};第二行{10},{11},{12},...,{1F};以此类推。y行x列的字节值是{yx}。

2)逆变换

{b}'=b_{(i+2)mod\;8}\oplus b_{(i+5)mod\;8}\oplus b_{(i+7)mod\;8}\oplus d_i

        式种,字节d={05}或00000101。可以按如下方式描述这个变换:

\begin{bmatrix} b_7'\\b_6' \\b_5' \\b_4' \\b_3' \\b_2' \\b_1' \\b_0' \end{bmatrix}=\begin{bmatrix} 0 & 1 & 0 & 1 & 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 & 1 & 0 & 0 & 1 \\ 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 & 1 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 & 0 & 1 & 0 & 1 \\ 1 & 0 & 0 & 1 & 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 & 1 & 0 & 0 & 1 \\ 1 & 0 & 1 & 0 & 0 & 1 & 0 & 0 \end{bmatrix}\begin{bmatrix} b_7\\ b_6\\ b_5\\ b_4\\ b_3\\ b_2\\ b_1\\ b_0 \end{bmatrix}+\begin{bmatrix} 0\\ 0\\ 0\\ 0\\ 0\\ 1\\ 0\\ 1 \end{bmatrix}

3)求逆变换后的值在有限域GF(2^8)的乘法逆元。

        基本原理:S盒的输出值不能是输入的线性数学函数。非线性度的产生是因为使用了乘法逆元。此外,在式(6.1)中选择的常量使得在S盒中没有不动点[S-box(a) = a],也没有反不动点[S-box(a) = \bar{a}],其中\bar{a}表示a的逐位取反。

4. 行移位变换

4.1正向行移位

        状态的第一行保持不变,状态的第二行循环左移1字节,状态的第三行循环左移2字节,状态的第四行循环左移3字节

4.2 逆向行移位

        状态的第一行保持不变,状态的第二行循环右移1字节,状态的第三行循环右移2字节,状态的第四行循环右移3字节。

        基本原理:行移位将某字节从一列移到另一列,它的线性距离是4字节的倍数,这个变换确保一列中的4字节被拓展到4个不同的列。

5. 列混淆变换

5.1 正向列混淆

        正向列混淆变换对每列独立的进行运算。每列中的每个字节都被映射为一个新值,该值由列中的4字节通过函数变换得到。这个变换可由下面基于状态的矩阵乘法表示:

\begin{bmatrix} 02 & 03 & 01 & 01\\ 01 & 02 & 03 & 01\\ 01 & 01 & 02 & 03\\ 03 & 01 & 01 & 02 \end{bmatrix} \begin{bmatrix} s_{0,0} & s_{0,1} & s_{0,2} & s_{0,3}\\ s_{1,0} & s_{1,1} & s_{1,2} & s_{1,3}\\ s_{2,0} & s_{2,1} & s_{2,2} & s_{2,3}\\ s_{3,0} & s_{3,1} & s_{3,2} & s_{3,3} \end{bmatrix} =\begin{bmatrix} s_{0,0}' & s_{0,1}' & s_{0,2}' & s_{0,3}'\\ s_{1,0}' & s_{1,1}' & s_{1,2}' & s_{1,3}'\\ s_{2,0}' & s_{2,1}' & s_{2,2}' & s_{2,3}'\\ s_{3,0}' & s_{3,1}' & s_{3,2}' & s_{3,3}' \end{bmatrix}

5.2 逆向列混淆

        逆向时称的乘的矩阵为:

\begin{bmatrix} 0E & 0B & 0D & 09\\ 09 & 0E & 0B & 0D\\ 0D & 09 & 0E & 0B\\ 0B & 0D & 09 & 0E \end{bmatrix}

        基本原理:正向列混淆使用的乘法矩阵的系数基于码字间有最大距离的线性编码,这使得每列的所有字节具有良好的混淆性。此外,列混淆变换的系数{01},{02},{03}是基于算法实现角度考虑的。这些系数的乘法涉及至多一次移位和一次XOR。逆向列混淆变换中的系数更加难以实现。

6. 轮密钥加

        轮密钥加就是将状态矩阵与轮密钥矩阵对应字节进行XOR。

        基本原理:尽管轮密钥加斌换非常简单,但能对状态中的每一位产生影响。密钥扩展的复杂性和AES的其他阶段运算的复杂性,确保了该算法的安全性。

7. 密钥扩展

        输入密钥直接被复制到扩展密钥数组的前4个字。在扩展密钥数组中,每个新增的字w_i依赖于w_{i-1}w_{i-4}。分为两种情况,当 i 不是4的倍数时,使用了异或运算,当 i 是4的倍数时,采用了更复杂的函数计算。下图说明了如何计算扩展密钥,其中 g表示这个复杂的函数。

 

        Rcon[j]是轮常量,其中j=i/4。这个轮常量是一个字,这个字左右边的3个字节为0。因此,字与Rcon异或,结果只与该字最左边的那个字节异或。每轮的轮常量均不同,其定义为Rcon[j]=(RC[j],0,0,0),其中,RC[1]=1RC[j]=2RC[j-1](乘法是定义在域GF(2^8)上的)。RC[j]的值按十六进制表示为:

j12345678910
RC[j]01020408102040801B36

        

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DES(Data Encryption Standard)是一种对称分组加密算法,使用56密钥,将64的明文数据分块加密成64的密文数据。DES算法由于密钥长度较短,已经不再安全,因此现在用较新的算法替代。 AES(Advanced Encryption Standard)是现代对称分组加密算法,使用128、192或256密钥,将128的明文数据分块加密成128的密文数据。AES算法的安全性比DES更高,广泛应用于各种领域。 IDEA(International Data Encryption Algorithm)是一种对称分组加密算法,使用128密钥,将64的明文数据分块加密成64的密文数据。IDEA算法在速度和安全性方面都有较好的表现,但因专利原因,未被广泛使用。 RC6是一种对称分组加密算法,可以使用不同的密钥长度,将明文数据分块加密成密文数据。RC6算法使用了分组加密算法中的乘法、加法和异或运算,具有很高的安全性和较好的性能表现。 SMS4是一种对称分组加密算法,使用了128密钥,将128的明文数据分块加密成128的密文数据。SMS4算法在中国国家密码管理局发布的《商用密码分组密码算法》中作为标准加密算法被采纳,并广泛应用于各行业和领域。 这些分组加密算法在保护数据安全方面都发挥着重要的作用,具有不同的特点和适用场合。在选择加密算法时,需要根据具体需求和安全要求来进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值