分组密码---AES原理详解

高级数据加密标准 AES**(SP结构)**
Rijndael 提交者:Joan Daemen & Vincent Rijmen
分组长度:128bit
密钥长度:128/192/256bit

一. AES的数学基础

  1. 01010111组成的字节可表示为 x^6 + x^4 + x^2 + x + 1,也可以为16进制‘57’
    选定m(x)为所有次数为8的不可约多项式列表中的一个。
    若a(x) * b(x) modm(x) = 1,则b(x)为a(x)的逆元。
  2. 有限环GF(2^8)[x] / (x^4+1)中的运算。
    加法:比特位异或
    乘法:假定有GF(2^8)上的多项式:
    a(x) = a3x^3 + a2x^2 + a1x + a0
    b(x) = b3x^3 + b2x^2 + b1x + b0
    因为x^i mod(x^4 + 1) = x^(imod4),所以环中
    d(x) = a(x) * b(x)
    =d3x^3 + d2x^2 + d1x + d0
    在这里插入图片描述

二. AES的算法描述

在这里插入图片描述
PS. 最后一轮没有列变换

一. 数据处理
AES是数据块长度和密钥长度都可变的迭代分组加密算法。数据块长度和密钥长度可分别为128bit,192bit,256bit。
数据块写成字的形式,把字记为列。
在这里插入图片描述
在这里插入图片描述

二. 一轮加密

  1. 逐字节进行SubBytes处理:以每个字节的值为索引,从一张拥有256个值的替换表(S-Box)中查找出对应的值的处理。非线性字节变换
  2. ShiftRows(扩散):数据块的第0行保持不变,第一行循环左移C1位,第二行循环左移C2位,第三行循环左移C3位。
    在这里插入图片描述
  3. MixColumns(扩散):
    在这里插入图片描述
    用行列式计算:‘02’ = 00000010 = x ‘03’ = 00000011 = x+1, 需要模多项式m(x)=x^8 + x^4 + x^3 + x + 1
  4. AddRoundKey:将MixColumns的输出与轮密钥进行XOR(异或运算)。
    Rijndael中要重复进行10~14轮
    在这里插入图片描述
    SP:输入的所有比特在一轮中都会被加密
    Feistel:每一轮都只加密一半输入的比特

三. 子密钥的生成
密钥长度为128bit时:
首先将初始密钥输入到一个44矩阵中。这个44矩阵的每一列的4个字节组成一个字,矩阵4列的4个字依次命名为w[0]、w[1]、w[2]和 w[3]。它们构成了一个以字为单位的数组 w。接着,对w数组扩充 40 个新列,构成总共 44 列的扩展密码数组。
(1)如果 i 不是 4 的倍数,那么第 i 列由如下等式确定:
w[i]=w[i−4]⊕w[i−1]
(2)如果i是4的倍数,那么第i列由如下等式确定:
w[i]=w[i−4]⊕SubByte(RotWord(w[i−1]))⊕Rcon[i/4]
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四. 解密

解密:


三. AES的安全性

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值