ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

素域和扩域

2022-08-01 16:34:22  阅读:276  来源: 互联网

标签:扩域 元素 GF 素数 加法 mod 素域 乘法


素域(prime field)

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

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

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

  • 只有当\(m\)是一个素数幂时,即\(m=p^n\)(其中\(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=p^n,(n=1)\)的域,域中的元素可以用整数\(\left \{0、1、...、p-1 \right \}\) 来表示。

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

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

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

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

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

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

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

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

例:在素域\(GF(5)=\left \{0、1、2、3、4 \right \}\)中,2的加法逆元为3,这是因为\(2+(3)=5,5mod5=0\),所以\(2+3=5mod5=0\);2的乘法逆元为3,这是因为\(2·3=6,6mod5=1\),所以\(2·3=6mod5=1\)。

在很多地方a的加法逆元用\(-a\)表示,a的乘法逆元用\(a^{-1}\)表示

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

加法:\(0+1=1;1+1=0;0+0=0\)

乘法:\(1\times 0=0;1\times 1=1;0\times 0=0\)

扩域(extension field)

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

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

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

例如在扩展域\(GF(2^m)\)中,元素并不是用整数表示的,而是用系数为域\(GF(2)\)中元素的多项式表示,这个多项式最大阶数(degree)为m-1,所以每个元素共有m个系数。比如在AES算法使用的域\(GF(2^8)\)中,每个元素\(A\in GF(2^8)\)都可以表示为:\(A(x)=a_7x^7+a_6x^6+...+a_1x+a_0,a_i\in GF(2)\)

注意:在域\(GF(2^8)\)中这样的多项式共有256个,这256个多项式组成的集合就是扩展域\(GF(2^8)\),每个多项式都可以按一个8位向量的数值形式存储:\(A=(a_7,a_6,...,a_1,a_0)\),像\(x^7,x^6,…x\)等因子都无需存储,因为从位的位置就可以清楚地判断出每个系数对应的幂。

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

  • 加减法

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

\(C(x)=A(x)+B(x)=\sum_{i=0}^{m-1}c_ix^i\),其中$c_i=(a_i+b_i)mod 2 $

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

\(C(x)=A(x)-B(x)=\sum_{i=0}^{m-1}C_ix^i\),其中$c_i=(a_i-b_i)mod 2=(a_i+b_i)mod 2 $

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

二进制减法:\((0-1)mod 2=(0+1)mod 2=1;(1-1)mod2=(1+1)mod 2=0\)

  • 乘法

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

我们想将扩展域中的两个元素用多项式形式展开,然后使用标准的多项式乘法规则将两个多项式相乘:\(C(x)=A(x).B(x)=(a_{m-1}x^{m-1}+...+a_0).(b_{m-1}x^{m-1}+...+b_0)=c_{2m-2}x^{2m-2}+...+c_0\),其中\(c_0=(a_0.b_0)mod 2,c_1=(a_1.b_0+a_0.b_1)mod 2,...,c_{2m-2}=(a_{m-1}.b_{m-1})mod 2\)

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

这里是不是和多项式环\(R_q=Z_q[x]/(x^n+1)\)很像,留一个疑问:有什么区别?

img

举例:

img

参考

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

标签:扩域,元素,GF,素数,加法,mod,素域,乘法
来源: https://www.cnblogs.com/pam-sh/p/16540779.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有