素域和扩域

素域(prime field)#

有限域也叫伽罗瓦域(galois field),指的是由有限个元素组成的集合,在这个集合内可以执行加、减、乘和逆运算。

而在密码学中,我们只研究拥有有限个元素的域,也就是有限域。

  • 域中包含元素的个数称为域的阶

  • 只有当m是一个素数幂时,即m=pn(其中n为正整数是p的次数,p为素数),阶为m的域才存,p称为这个域的特征

也就是说,有限域中元素的个数可以是11(p=11是一个素数,n=1)、可以是81(p=3是一个素数,n=4)、也可以是256(p=2是一个素数,n=8).....但有限域的中不可能拥有12个元素,因为12=2·2·3,因此12也不是一个素数幂。

有限域中最直观的例子就是阶为素数的域,即m=pn,(n=1)的域,域中的元素可以用整数{01...p1} 来表示。

域的两种操作就是整数加法(模p)整数乘法(模p)p是一个素数,整数环Z表示为GF(p),也成为拥有素数个元素的素数域或者伽罗瓦域。

所以总结:素域就是有素数个元素的有限域,即阶为素数的有限域。

  • GF(p)中所有的非零元素都存在逆元

  • GF(p)内所有的运算都是模p实现的。

素域内的算数运算规则如下:

  • 加法和乘法都是通过模p实现的;

  • 任何一个元素a的加法逆元都是由a+(a)=0(modp)得到的;

  • 任何一个非零元素a的乘法逆元定义为a·a=1(modp)

例:在素域GF(5)={01234}中,2的加法逆元为3,这是因为2+(3)=55mod5=0,所以2+3=5mod5=0;2的乘法逆元为3,这是因为2·3=66mod5=1,所以2·3=6mod5=1

在很多地方a的加法逆元用a表示,a的乘法逆元用a1表示

注:GF(2)是一个非常重要的素域,也是存在的最小的有限域,由于GF(2)的加法,即模2加法与异或(XOR)门等价,GF(2)的乘法与逻辑与(AND)门等价。

加法:0+1=1;1+1=0;0+0=0

乘法:1×0=0;1×1=1;0×0=0

另外素域GF(p)一般还用符号Fp表示,记Fp是由Fp中所有非零元构成的乘法群,即(1,2,...,p1),又因为Fp是循环群,所以在Fp中至少存在一个元素g,使得Fp中任意非零元都可与由g的一个方幂表示,称gFp的生成元(本原元),即Fp={gi|0ip2}。设a=giFp,其中0ip2,则a的乘法逆元为a1=gp1i

举例:

13是F19的一个生成元,则F19中的元素可以由13的方幂表示出来:

130=1,131=13,132=17,132=134=4,135=10,37=10,137=16,139=18,1310=6,1311=2,1312=7,1314=5,1315=8,1316=9,1317=3,1318=1

扩域(extension field)#

如果有限域的阶不是素数,则这样的有限域内的加法和乘法运算就不能用模整数加法整数乘法模p表示。

阶数不是素数,且大于1的有限域被称为扩展域

为了处理扩展域,我们就要使用不同的符号表示扩展域内的元素,使用不同的规则执行扩展域内元素的算术运算。

q是一个素数或素数方幂,f(x)是多项式环Fq[x]上的一个m(m>1)次不可约多项式商环Fq[x]/f(x)是含qm个元素的有限域,记Fqm,即Fqm是有限域Fq的扩域,域Fq是域Fqm的子域,m是扩展次数(因子)

Fqm可以看作Fq上的m维向量空间,即在Fqm中存在m个元素{α0,α1,....,am1},使得aFqma可以唯一表示为:a=am1αm1+...+a1α1,其中aiFq{αm1,,α1,α0}叫做Fqm上在Fq上的一组基

给定这样的一组基,就可以由向量(am1,am2....,a1,a0)来表示域元素a

⚠️:这里一个元素可以由一个向量表示,在同态加密的SIMD中有用到!

FqmFq上的基有多种选择:多项式基和正规基等,下面简单介绍:

(1)多项式基

  • 不可约多项式f(x)可以取首一多项式f(x)=xm+fxn1+...+f2x2+f1x+f0(其中fiFq,i=0,...,m1

  • Fqm中的元素由多项式环Fq[x]中所有次数低于m的多项式构成,即Fqm={am1xm1+am2xm2++a1x+a0aiFq,i=0,1,,m1}

  • 多项式集合{xm1,xm2,,x,1}Fqm作为向量空间在Fq上的一组基,称为多项式基

  • m含有因子d(1<d<m) 时, Fqm 可以由Fqd扩张生成, 从 Fqd[x] 中选取一个合适的 m/d 次不可约多项式作为 FqmFqd 上的不可约多项式,Fqm 可以由塔式扩张方法 (towering method) 得到, 这种扩张的基本形式仍是由Fq 中元素组成的向量

  • 例如当 m=6 时, 可以先由 Fq 经过 3 次扩张得扩域 Fq3 ,再由 Fq3 经过 2 次扩张得到扩域 Fq5 ; 也可以先由 Fq 经过 2 次扩张得扩域 Fq2 , 再由 Fq2 经过 3 次扩张得到扩域Fq5

(2)正规基

FqmFq上形如{β,βq,βq2,,βqm1} 的一组基称为正规基, 其中 βFqmaFqm,a 可以唯一 表示为: a=a0β+a1βq++am1βqm1 , 其中 aiFq,i=0,1,,m1

  • 对于任意有限域 Fq 及其扩域Fqm , 这样的基总是存在的。

⚠️:常用的是多项式基表示,以下都是以多项式基表示!

image

例如在扩展域GF(2m)中,元素并不是用整数表示的,而是用系数为域GF(2)中元素的多项式表示,这个多项式最大阶数(degree)为m-1,所以每个元素共有m个系数。比如在AES算法使用的域GF(28)中,每个元素AGF(28)都可以表示为:A(x)=a7x7+a6x6+...+a1x+a0,aiGF(2)

注意:在域GF(28)中这样的多项式共有256个,这256个多项式组成的集合就是扩展域GF(28),每个多项式都可以按一个8位向量的数值形式存储:A=(a7,a6,...,a1,a0),像x7,x6,x等因子都无需存储,因为从位的位置就可以清楚地判断出每个系数对应的幂。

扩域GF(2m)内的算数运算规则如下:

  • 加减法

例如在AES算法中的密钥加法层中就使用了这部分的知识,但是不是很明显,因为我们通常把扩展域中的加法当作异或运算进行处理了,因为在扩展域GF(2m)中的加减法处理都是在底层域GF(2)内完成的,与按位异或运算等价。假设A(x)B(x)GF(2m),计算两个元素之和的方法就是:

C(x)=A(x)+B(x)=i=0m1cixi,其中ci=(ai+bi)mod2

两个元素之差的计算公式就是:

C(x)=A(x)B(x)=i=0m1Cixi,其中ci=(aibi)mod2=(ai+bi)mod2

注:在减法运算中减号之所以变成加号,这就和二进制减法的性质有关了,从上述两个公式中我们发现在扩展域中加法和减法等价,并且与XOR等价(异或运算也被称作二进制加法)

二进制减法:(01)mod2=(0+1)mod2=1;(11)mod2=(1+1)mod2=0

  • 乘法

例如扩展域的乘法主要运用在AES算法的列混淆层(Mix Column)中,也是列混淆层中最重要的操作。

我们想将扩展域中的两个元素用多项式形式展开,然后使用标准的多项式乘法规则将两个多项式相乘:C(x)=A(x).B(x)=(am1xm1+...+a0).(bm1xm1+...+b0)=c2m2x2m2+...+c0,其中c0=(a0.b0)mod2,c1=(a1.b0+a0.b1)mod2,...,c2m2=(am1.bm1)mod2

注:通常在多项式乘法中C(x)的级数会大于m1,因此需要对此进行化简,而化简的基本思想与素域内乘法情况相似:在素域GF(p)中,将两个整数相乘得到的结果除以一个素数,化简后的结果就是最后的余数。而在扩展域中进行的操作就是:将两个多项式相乘的结果除以一个不可约多项式,最后的结果就是最后的余数。(这里的不可约多项式大致可以看作一个素数)

img

举例:

img

参考#

https://www.cnblogs.com/chenshikun/p/11667438.html

作者:Hang Shao

出处:https://www.cnblogs.com/pam-sh/p/16540779.html

版权:本作品采用「知识共享」许可协议进行许可。

声明:欢迎交流! 原文链接 ,如有问题,可邮件(mir_soh@163.com)咨询.

posted @   PamShao  阅读(5660)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2021-08-01 mysql数据库备份
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu