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

 

posted on 2019-10-08 15:50  jald  阅读(322)  评论(0)    收藏  举报

导航