AES

密码学实验

AES算法的基本结构

输入:128位明文,128/192/256位密钥

子过程:

  1. S盒变换
  2. 行移位
  3. 列混合
  4. 轮密钥加

输出: 128位密文

AES算法的基本运算

  1. $GF(2^8)$上的加法

  2. $GF(2^8)上的多项式加法$

  3. $GF(2^8)上的乘法$

    1. 借助xtime运算快速实现

      • 倍乘函数:移位运算(定义:${02} \cdot {??}$)
      • 加法:异或运算
        由于$GF(2^8)$中的所有元素都可以表示为02的不同幂次的和,因此所有的乘法运算都能够通过重复调用北城函数和加法快速实现
        例:({}中表示16进制)
        $$
        \begin{aligned}
        y \cdot {15} &=y\cdot {01 \oplus 04 \oplus 10} = y\cdot {01 \oplus 02^2 \oplus 02^4}
        \
        &= y\oplus xtime(xtime(y)) \oplus xtime(xtime(xtime(xtime(y))))
        \
        &= y \oplus xtime(xtime(y\oplus xtime(xtime(y))))
        \end{aligned}
        $$
        更快速的方法:
        造表:将128所有乘法结果取值与计算,存入表中,直接查表
    2. 借助生成元快速实现
      $GF(2^8)$的全体非零元素对于 乘法 构成循环群。设$a$为生成元,则循环群
      $G = {a^0, a^1, … a^{254}}$
      G中的乘法运算:
      $a^p \cdot a^q = a^{(p+q) mod 255}$
      于是可以把$GF(2^8)$上的乘法运算简化为整数的加法运算。

      零元素00与任何元素相乘都得00

编程实现

  1. 造表

AES
http://example.com/2024/11/26/AES/
作者
yvyvSunlight
发布于
2024年11月26日
许可协议