AES 数学 群
群 G
性质:
对于可以在群里进行的操作用 op 表示
封闭性 a op b -> G a和b进行操作后的结果 也属于G,op = operation 操作
结合律 (a op b) op c = a op (b op c)
单位元素(ie) a op e = e op a = a e为G的单位元素 存在一个元素e,和任意元素a进行运算,都满足该条件(对op=加法而言,e为0,乘法而言,e为1)
逆元 a op b = b op a = e b为a的逆元 任意元素a能够再g中找到另一个元素b,符合该条件(对op=加法而言,b=-a,a+(-a)=0,0是加法操作的单位元,乘法而言b=1/a,a*(1/a)=1,1是乘法操作的单位元)
举例:
整数集合Z
op = +
封闭性 2 + 3 = 5 5也属于G
结合律 2 + 3 + 4 = 2 + (3 + 4)
单位元素 b=0, a+0 = 0+a = a
逆元 b=-a, a+b=b+a = a+(-a)=(-a)+a = 0
有限个数:
但如果集合Z 中只有 [-4,4],这9个元素
那么 4+1 = 5 ,5不属于这个群,所以这不能算作一个群了,因为不满足封闭性
为了满足封闭性,让运算结果不超出集合Z的范围
我们修改 op 从 op = + 为 op = + (mod)
那么 (4+1) mod 4 = 1 。。。。 结果都属于集合Z,那么该 op 和 集合 Z 属于一个群,因为满足了封闭性
(对一个群而言,可以由我们定义的有 1.目标集合,2.op操作 。为了满足群的性质,会调整这2个的定义)
上面例子中的Z称作有限群,元素数量称作有限群的阶
那么Z是一个 9阶有限群
域
组成域的元素要求有性质
加法交换群:op = + 和 ie = 0 (ie是单位元素)
乘法交换群:op = * 和 ie = 1
(XXX交换群,是以op的定义来命名的,如果一个操作op具有求对数操作,且该op和集合s满足群的性质,那么这个群可以叫做 对数交换群吗?)
结合律(这不是分配律吗?):混合使用加法和乘法时 a * (b + c) = a * b + a * c
换句话说,域是指的一个集合,且这个集合同时满足2种op(加法和乘法)的群,且又满足结合律(应该是加法和乘法混合起来的分配律吧?)。
举例:
对于满足该性质的集合,我们称作为域
实数集合 R 中的元素满足以上性质,所以R是一个域
因为对于 op=+而言
R满足,封闭性,结合律,单位元素为0 (任意的a+0=0+a=a),逆元为-a (a+(-a)=(-a)+a=0=单位元素)
对于op=*而言
R满足,封闭性,结合律,单位元素为1 (任意的a,a*1=1*a=a),逆元为1/a (a*(1/a)=(1/a)*a=1=单位元素)
并且满足结合律(这不是分配律吗?)
所以R是一个域
满足域性质的有限集合:
如果存在一个集合,其元素满足上面性质,但是限制其元素数量
n > 0 时, p 为质数
m = p ^ n
那么就存在m阶的域
(如 m=3^2 = 9阶有限域)
另外,当 n = 1 时
素域:m = p (如 m=7 = 7阶素域)
n >= 2 时
扩展域 : m = p ^ n
(如 m=3^2 = 9阶有限扩展域, =9阶扩展域 =扩展域, 也称作 Galois Field,写作 GF(m) , m阶的Galois Field)
AES中会用到GF(m)的概念。
结合上面讲的几个特性 某个m阶的有限集合 1. 满足群的性质 2.满足域的性质 3.是一个有限集合 4.该m阶的域满足 m = p ^ n
二阶Galois域
GF(2)
= {0,1}
首先看看是否满足加法交换群的性质
封闭性:1+1= 2 ,2超出了集合表示范围, 所以需要特别定义op=+ mod 2
那么式子变成了 1+1 mod 2 = 0,此时满足封闭性的性质 ( + mod 2,为 异或 (XOR) 操作)
乘法规则也需要特别定义为 op = * mod 2 ( * mod 2,为 与 (AND) 操作)
(mod 用 % 符号代替)
加法交换群的性质:
单位元素:(a + 0) mod 2 = (0 + a) mod 2 = a , 0+0%2=0+0%2=0 , 1+0%2=0+1%2=1, 所以 0 是单位元素
逆元:a+b=0 , b=-a a+(-a)=0, 当a=0时 0+-0%2=0 , 当a=1时 1+(-1)%2=0 , 但若b=1 1+1%2=0 , 此时 不光-1是1的逆元,1也是1的逆元
乘法交换群的性质:
单位元素:(a*1) % 2 = (1*a) % 2 = a , 当a=0时 0*1%2 = 1*0%2 = 0, 当a=1时 1*1%2 = 1*1%2 = 1, 所以 1是单位元素
逆元:a*b=0 , b=1/a a*(1/a)=1 , 当a=1 1*(1/1)%2=1, 1/a 是逆元 ,也说 1的逆元是1
所以加法操作中 1的逆元是他自己,乘法操作中1的逆元也是他自己
1的加法逆元是他自己 : b=-a 1的逆元=(-1) , 1 + 1 mod 2 = 0 , 那么 1 + (-1) mod 2 = 0 (可以做减法操作)
减法:1-1 = 1+(-1) 减1就是加上1的逆元 , 1 + 1 %2 (加法) 也等于 1+(-1) %2 (减法) ,结果都是0
1的乘法逆元是他自己 : b=-a 那么 (-1) = - 1, a op b = b op a , = 1 * -1 mod 2 = -1 * 1 mod 2 (可以做除法操作)
除法:a/a=a*(-a) => 1/1%2=1 从带入逆元的角度思考 a/a=a*(1/a) 除以1就是乘以1的逆元 , 1*(1/1)%2 = 1 (但是资料中给的是 1/1=1*(-1)=1 ; 这不是写错了吗? 这里是在讨论乘法交换群,可以把加法交换群里的逆元拿来过吗? 再说 1*-1=1 吗? 把mod加上 (1*(-1)) mod 2 = -1 mod 2 = 1 才成立的,不知道是不是资料里没有说明白,或者我理解错了)
在GF(2)里对于1而言 ,加法=减法,减法=加法,乘法=除法,除法=乘法
GF(2^8)
字节为单位的 加洛瓦域,不用集合的方法表示,而用多项式
b7x^7+b6x^6+b5x^5+b4x^4+b3x^3+b2x^2+b1x^1+b0x^0
b0~b7 取值 GF(2) = {0,1},分别对应一个字节的第0~7位
在GF(2^8)中进行两字节相加:
A(x) = b2x^2 = 0x04 (x=0x04)
B(x) = b7x^7 + b3x^3 + b2x^2 = 0x8C (x=0x8C)
每一个位上按照 GF(2) 的 加法法则进行 op = + mod 2 = 按位异或
A(x) + B(x) =
0000 0100
+ 1000 1100
--------------
1000 1011
(注意,没有进位这种性质,这里不是相加2个8位二进制数,而是在GF(2^8)域中用加法交换群定义的 加法 = 对每一位进行GF(2)中的加法 op = + mod 2)
=0x8B
写回多项式为
x^7 + x^3 + x^1 + 1
在GF(2^8)中进行两字节相乘:
A(x) = b2x^2 = 0x04 (x=0x04)
B(x) = b7x^7 + b3x^3 + b2x^2 = 0x0C (x=0x8C)
按照代数的计算方式,计算多项式:
A(x) * B(x) = (x^2) * ( b7x^7 + x^3 + x^2)
=x^2 * x^7 + x^2 * x^3 + x^2 * x^2
=x^9 + x^5 + x^4
mod 2 (将对多项式的系数取模2)
=x^9 + x^5 + x^4
=10 0011 000 = 0x230
但是x^9 超出了 2^8 的集合,
AES 设计了一个 不可约多项式 P(x) 用来做取莫操作,将超出的部分重新绕回到2^8这个有限集合中,以求满足群的封闭性性质。
不可约:P(x)不能表示为 2^8 的集合中 任意2个多项式的乘积,也就是 A(x)*B(x)=P(x) 不会满足。所以P(x)在 2^8 的集合范围内,其表达式具有像质数一样的性质
P(x) 也叫素多项式
P(x) = x^8 + x^4 + x^3 + x + 1
因为最高次为 x^8 ,所以将刚才的结果对 P(x) 取模,那么新的结果一定会回绕到 2^8 的集合内
上一步结果记为 a
那么取模运算为 a - (x * P(x)) (为什么?这看起来一点不像是取模, 为啥用 x * P(x) ? 为啥还用 a 去减 ?)
(x * P(x)) = x * (x^8 + x^4 + x^3 + x + 1)
=x^9 + x^5 + x^4 + x^2 + x
x^9 + x^5 + x^4
- x^9 + x^5 + x^4 + x^2 + x
----------------------------------------
x^2 + x
按每一位计算,规则是GF(2)中的减法,因为GF(2)中的减法=加法
=0x03
根据 op = * mod P(x)
若a op b = b op a = e = 1, 那么 b 是 a 的逆元
若在GF(2^8)集合中有 A(x) 和 B(x)
A(x) * B(x) mod P(x) = 1的话,根据逆元的定义 ,此时 B(x) 就为 A(x) 的逆元
所以我们可以根据这个性质,找出给定的任意A(x) 的逆元B(x)。
如何在给定A(x)后求到其逆元B(x)?
1.穷举法,遍历2^8 带入 B(x) ,依次计算,找到满足条件的
2.利用生成元的关系查表,任意一个非0多项式,可以写成 (x + 1)^n (多项式之间用GF(2^8)的加法和乘法,但每一位用GF(2)的加法和乘法)
(x+1)^n 中 n = 0 时 值为1 ,n递增直到n = 254 ,值为 =x^7+x^6+...x^2+x , n=255时 值又为1
x+1 又叫做生成元, 将 (x + 1)^n 中 n 的值和 对应的每一个多项式 存储成一张映射表。
对于给定的 A(x) * B(x) 可以转换成生成元的表达方式 (若 B(x) 是 A(x)的逆元那么满足)
= (x+1)^a * (x+1)^b = (x+1)^(a+b) = 1 (mod P(x))
找到A(x)对应的a ,用 255 - a 找到 b ,用b根据映射表找到 B(X) ,就可以在常数时间复杂度内找到 B(x)。
主要概念:群,域,GF,生成元
闭合性,分配律,单位元,逆元;有限群,阶
加法交换群,乘法交换群,分配律;素域,扩展域
GF(2),GF(2^8)
参考:https://boxueio.com/series/let-us-build-an-apn-provider/episode/562
浙公网安备 33010602011771号