AES中的加密过程用到了一个轮常量的计算过程,之前对有限域的理解不是很深,也是经过长时间的积累以后,重新又对近世代数的东西有新的理解,特别是这个有限域的乘法,根据资料和笔记整理一下,以备后续参考.
1. 有限域的乘法
这里专门讨论的有限域为 $ GF(2^8)$ 域 ;而$GF(2^8)$的乘法,简单来讲就是$2^8$的乘法的结果求模,求模以后的结果是在$(1,2^8-1)$这个区间内的,这里的操作是二进制的乘法,抽象代数里比较抽象的就是这个操作,乘法不是日常你见到的乘法,他只是代表一个集合的操作规则,具体可以参考这篇文章的说明;这里有一个问题是取模的多项式的定义,这个推导过程放在日后再来推导,定义在这里; 在 $GF(2^8)$中的取模多项式是 $x^8+x^4+x^3+x^2+1$;
2. 有限域乘法(c++实现)
代码之前需要注意的是二进制的加法就是异或(XOR),乘法就是(AND).
1 | /* |
3. 轮常量计算
先附一张图关于如何计算轮常量的,截图来自《密码编码学第七版》
1 | /* |
备注:在AES中这些值是固定的可以直接用,但至少需要知道这些值是怎么来的.本篇的代码aes_1.c 点击下载