AES
密码学实验
AES算法的基本结构
输入:128位明文,128/192/256位密钥
子过程:
- S盒变换
- 行移位
- 列混合
- 轮密钥加
输出: 128位密文
AES算法的基本运算
$GF(2^8)$上的加法
$GF(2^8)上的多项式加法$
$GF(2^8)上的乘法$
借助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所有乘法结果取值与计算,存入表中,直接查表
借助生成元快速实现
$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
编程实现
- 造表
AES
http://example.com/2024/11/26/AES/