AES算法

AES

  • Advanced Encryption Standard(高级加密标准)
  • 分组加密算法
  • 是Rijndael算法的子集,实际应用中等价
  • 分组长度为128位
  • 密钥长度为三种:128 / 192 / 256 位,相应的迭代轮数为 10 / 12 / 14 轮
  • 基本运算单位是字节,加密和解密过程都是在一个4×4的字节矩阵上运作,该矩阵又称为“体”或“状态”
    在这里插入图片描述

一般结构图

在这里插入图片描述

明文初始矩阵构造

在这里插入图片描述

  • 输出密文128位按相同顺序提取
  • 填不满的矩阵用0补满

密钥初始矩阵

以192位密钥长度为例:
在这里插入图片描述

轮密钥加

在这里插入图片描述
c:明文块
k:子密钥

字节代替

在这里插入图片描述
S盒(16×16):
在这里插入图片描述

  • 输入字节的前 4 位指定S盒的行值,输入字节的后 4 位指定S盒的列值
  • 行号和列号都从0开始计数

行移位

在这里插入图片描述

列混合

  • 通过矩阵相乘来实现,经行移位后的状态矩阵与固定的矩阵相乘,得到混淆后的状态矩阵
    在这里插入图片描述
  • 固定矩阵是给定的
  • 都是模运算
    在这里插入图片描述

密钥扩展

  • 其复杂性是确保算法安全性的重要部分
  • 由于 10 轮迭代需要 10 个轮密钥,初始密钥也被扩展为一个轮密钥,因此共需要11个轮密钥
  • 密钥比特的总数 = 密钥长度 × (轮数 + 1)
  • 密钥扩展的目的是将输入的 128 位密钥扩展成 11 / 13 / 15 个 128 位子密钥
  • AES的密钥扩展算法是以字为一个基本单位(一个字为 4 个字节),刚好是密钥矩阵的一列
    在这里插入图片描述
    在这里插入图片描述

g函数

  1. 将该列以字节为单位,循环左移一个字节,例如FF EE EE AA变成EE EE AA FF
  2. 将循环左移之后的输出进行字节代替(利用S盒)
  3. 根据Rcon常量表查表得到RC[i]值,i代表的是轮数
    Rcon[i] = (RC[i],0,0,0),
    其中RC[1] = 1,RC[i] = 2•RC[i-1]
    乘法是定义在域GF(2^8)上的
    在这里插入图片描述
  4. 将步骤 2 和步骤 3 的结果异或

解密

轮密钥加

与加密时相同

逆字节代替

更换S盒为逆S盒
在这里插入图片描述

逆行移位

循环左移变循环右移

逆列混合

固定矩阵改变:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值