ICode9

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

寻找有限域同构映射

2021-12-04 23:35:06  阅读:309  来源: 互联网

标签:同构 映射 有限 self beta alpha


一、有限域简介

有限域亦称伽罗瓦域(Galois Fields),是伽罗瓦于 18 世纪 30 年代研究代数方程根式求解问题时引出的概念。有限域在密码学、近代编码、计算机理论、组合数学等方面有着广泛的应用

在抽象代数中,域是一个对加法和乘法封闭的集合,其中要求每个元素都有加法逆元,每个非零元素都有乘法逆元。若域 \(F\) 只包含有限个元素,则称为有限域,有限域中元素的个数称为有限域的阶。可以证明,有限域的阶必为素数的幂,即有限域的阶可表示为 \(p^n\)(\(p\) 是素数,\(n\) 是正整数)。有限域通常记为 \(GF(p^n)\)

二、有限域同构

因为网上似乎都没有如何寻找有限域同构映射的资料,而正好我上课学到了相关的内容,在此结合自己的理解作简单的介绍。因为不是数学系相关的学生,而且对有限域的理解仅处于皮毛,有很多定理没办法给出详细的证明,在逻辑上或许会多有漏洞,如果读者发现我的漏洞希望能够指出。
(虽然指出了我也不一定能听懂,但还是希望能够指出)

另外,有限域的相关知识(例如有限域的性质,有限域的构造等)将默认读者已经了解,在阅读后续内容前先保证对上述知识有所了解

2.1 寻找同构映射思路

首先,任意相同阶数的有限域都同构。假设 \(p(x)\) 和 \(q(x)\) 都是域 \(F_p\) 上的 \(n\) 阶不可约多项式,那么有限域 \(F_1 = F_p[x] / p(x)\) 和 \(F_2 = F_p[x] / q(x)\) 都是 \(p^n\) 阶有限域。

有下面两条重要定理:

  • 如果假设 \(\alpha\) 是多项式 \(p(x)\) 的一个根,那么有限域 \(F_1\) 可以表示成 \(F_p[\alpha]\)
  • 如果假设 \(\beta\) 是多项式 \(q(x)\) 的一个根,那么有限域 \(F_2\) 可以表示成 \(F_p[\beta]\)

现在需要找到一个两者的同构映射 \(\phi\)
首先,根 \(\alpha\) 和 \(\beta\) 满足 \(p(\alpha)=0\) 和 \(q(\beta)=0\)
直接将 \(\alpha\) 映射到 \(\beta\) 是不可行的,因为线性关系无法保证,即无法保证 \(p(\beta)=0\)
那么如果找到 \(\beta ' \in F_p[\beta]\) 使得 \(p(\beta')=0\) 成立,这样就可以构造 \(\alpha \to \beta '\) 的映射

2.2 寻找同构映射例子

求有限域 \(Z_3[x] / (x^2 + 1)\) 和 \(Z_3[x] / (x^2 + x +2)\) 之间的同构映射

记 \(p(x) = x^2 + 1\) ,\(q(x) = x^2 + x + 2\)
且有 \(\alpha = \overline{x} \; mod \; p(x)\) 为 \(p(x)\) 的一个根
且有 \(\beta = \overline{x} \; mod \; q(x)\) 为 \(q(x)\) 的一个根

寻找得到 \(\beta' = \beta + 2\) ,使得 \(p(\beta') = (\beta + 2)^2 + 1 = \beta^2 + \beta + 2 = 0\)
那么对应的映射为 \(\alpha \to \beta + 2\)

也就是原先 \(Z_3[\alpha]\) 中的元素 \(a_1 \alpha + a_0\) 将被映射成 \(a_1 (\beta + 2) + a_0 = a_1 \beta + (2a_1 + a_0) \in Z_3[\beta]\)
或者说原先 \(Z_3[x] / (x^2 + 1)\) 中的元素 \(a_1 x + a_0\) 将被映射到 \(Z_3[x] / (x^2 + x +2)\) 中的 \(a_1 x + (2a_1 + a_0)\)

2.3 同构映射逆映射

在 2.2 中已经求出了一个同构映射 \(\alpha \to \beta + 2\)
很容易发现 \(q(\alpha - 2) = (\alpha - 2)^2 + (\alpha - 2) + 2 = \alpha^2 + 1 = 0\)

也就是说逆映射为 \(\beta \to \alpha - 2\)

三、复合域与同构

3.1 复合域

接下来介绍一个稍微复杂的有限域——复合域,复合域在密码学中具有非常大的用途,将一个高阶的有限域转化为两个或多个低阶有限域的复合,便于后续分析

记 \(p(x) = x^2 + x + 4\) ,\(F_2[x] / p(x)\) 为 \(2^2\) 阶有限域
记 \(q(x) = x^4 + x^3 + 1\) ,\(F_2[x] / q(x)\)为 \(2^4\) 阶有限域
那么将两者复合得到 \(F : b_1 x + b_2 \; mod \; p(x), \; b_i \in F_2[x] / q(x)\) ,为 \((2^4)^2 = 2^8\) 阶有限域(复合域)

3.2 复合域同构

通过一个例子来了解求复合域同构的过程

记 \(F_2[x] / r(x)\) 为 \(2^8\) 阶有限域, \(r(x) = x^8 + x^7 + x^6 + x^5 + x^4 + x^2 + 1\)

记 \(F[x] / (p(x), q(y)) = (a_3 y^3 + a_2 y^2 + a_1 y + a_0) x + (b_3 y^3 + b_2 y^2 + b_1 y + b_0)\) 为上述 3.1 中的 \((2^4)^2\) 阶有限域

求 \(F_2[x] / r(x) \to F[x] / (p(x), q(x))\) 的一个同构映射

首先,需要遍历 \(F[x] / (p(x), q(y))\) 的全部元素,找到其中一个 \(\beta'\) 满足 \(r(\beta') = 0\) 的元素 \((y^2 + 1)x + (y^3 + y^2 + y)\)
记 \(\alpha = \overline{x} \; mod \; r(x)\) 为 \(r(x)\) 的根
那么同构映射为 \(\alpha \to \beta'\)

四、映射矩阵

4.1 有限域与矩阵

在密码学中,常将多项式表示为矩阵的形式,例如在 \(GF(2^8)\) 上的多项式

\[x^7 + x^6 + x + 1 \equiv \begin{bmatrix} 1 & 1 & 0 & 0 & 0 & 0 & 1 & 1 \end{bmatrix}^T \]

假设 \(p(x)\) 和 \(q(x)\) 都是 \(F_2\) 上的 \(8\) 次不可约多项式,那么可以构成 \(2^8\) 阶有限域 \(F_2[x]/p(x)\) 和 \(F_2[x]/q(x)\)

假设 \(\alpha\) 是多项式 \(p(x)\) 的一个根,那么有限域 \(F_2[x]/p(x)\) 可以表示成 \(F_2[\alpha]\)
假设 \(\beta\) 是多项式 \(q(x)\) 的一个根,那么有限域 \(F_2[x]/q(x)\) 可以表示成 \(F_2[\beta]\)

且假设 \(c_7 x^7 + c_6 x^6 + c_5 x^5 + \cdots + c_1 x + c_0\) 是 \(F_2[x]/p(x)\) 上的一个多项式,那么该多项式也可以等价于 \(c_7 \alpha^7 + c_6 \alpha^6 + c_5 \alpha^5 \cdots c_1 \alpha + c_0\) ,即

\[\begin{bmatrix} \alpha^7 & \alpha^6 & \alpha^5 & \alpha^4 & \alpha^3 & \alpha^2 & \alpha & 1 \end{bmatrix} \times \begin{bmatrix} c_7 & c_6 & c_5 & c_4 & c_3 & c_2 & c_1 & c_0\end{bmatrix}^T \]

4.2 多项式矩阵

假设 \(\alpha^i = a_{7,i} x^7 + a_{6,i} x^6 + \cdots a_{1,i} x + a_{0,i}\)

那么

\[\begin{bmatrix} \alpha^7 \\ \alpha^6 \\ \alpha^5 \\ \alpha^4 \\ \alpha^3 \\ \alpha^2 \\ \alpha \\ 1 \end{bmatrix}^T \equiv \begin{bmatrix} a_{7,7} & a_{7,6} & a_{7,5} & a_{7,4} & a_{7,3} & a_{7,2} & a_{7,1} & a_{7,0}\\ a_{6,7} & a_{6,6} & a_{6,5} & a_{6,4} & a_{6,3} & a_{6,2} & a_{6,1} & a_{6,0}\\ a_{5,7} & a_{5,6} & a_{5,5} & a_{5,4} & a_{5,3} & a_{5,2} & a_{5,1} & a_{5,0}\\ a_{4,7} & a_{4,6} & a_{4,5} & a_{4,4} & a_{4,3} & a_{4,2} & a_{4,1} & a_{4,0}\\ a_{3,7} & a_{3,6} & a_{3,5} & a_{3,4} & a_{3,3} & a_{3,2} & a_{3,1} & a_{3,0}\\ a_{2,7} & a_{2,6} & a_{2,5} & a_{2,4} & a_{2,3} & a_{2,2} & a_{2,1} & a_{2,0}\\ a_{1,7} & a_{1,6} & a_{1,5} & a_{1,4} & a_{1,3} & a_{1,2} & a_{1,1} & a_{1,0}\\ a_{0,7} & a_{0,6} & a_{0,5} & a_{0,4} & a_{0,3} & a_{0,2} & a_{0,1} & a_{0,0} \end{bmatrix} \]

当 \(\alpha = \overline{x} \; mod \; p(x)\) 时,上式为单位阵 \(I\)

4.3 同构映射与矩阵

假设 \(c_7 x^7 + c_6 x^6 + c_5 x^5 + \cdots + c_1 x + c_0\) 是 \(F_2[x]/p(x)\) 上的多项式
假设 \(d_7 x^7 + d_6 x^6 + d_5 x^5 + \cdots + d_1 x + d_0\) 是 \(F_2[x]/q(x)\) 上的多项式

记它们两者的矩阵表示为 \(C\) 和 \(D\)

要找到两个域的映射关系,将一个多项式映射到另一个多项式
也就是要找到一个映射矩阵 \(T\) ,使得一个多项式的矩阵表示 \(C\) 和另一个多项式的矩阵表示 \(D\) 满足 \(TC = D\)

上文提到,可以找到一个同构映射 \(\alpha \to \beta'\) ,使得有限域 \(F_2[\alpha]\) 和有限域 \(F_2[\beta]\) 同构

根据同构关系的线性性质,有 \(\alpha^i \to \beta'^i\) ,故映射为

\[c_7 \alpha^7 + c_6 \alpha^6 + c_5 \alpha^5 \cdots c_1 \alpha + c_0 \to c_7 \beta'^7 + c_6 \beta'^6 + c_5 \beta'^5 \cdots c_1 \beta' + c_0 \]

记 \(\alpha\) 对应的矩阵(如4.2所示)为 \(A\) , \(\beta'\) 对应的矩阵为 \(B\)
那么映射矩阵 \(T\) 满足 \(TAC = BC\) ,即 \(T= B A^{-1}\)

为了计算方便,一般选取的根 \(\alpha = \overline{x} \; mod \; p(x)\)
那么 \(\alpha\) 对应的矩阵 \(A\) 即为单位阵 \(I\)
那么 \(T = B\)

假设 \(\beta'^i = b_{7,i} x^7 + b_{6,i} x^6 + \cdots b_{1,i} x + b_{0,i}\)
那么

\[T = \begin{bmatrix} b_{7,7} & b_{7,6} & b_{7,5} & b_{7,4} & b_{7,3} & b_{7,2} & b_{7,1} & b_{7,0}\\ b_{6,7} & b_{6,6} & b_{6,5} & b_{6,4} & b_{6,3} & b_{6,2} & b_{6,1} & b_{6,0}\\ b_{5,7} & b_{5,6} & b_{5,5} & b_{5,4} & b_{5,3} & b_{5,2} & b_{5,1} & b_{5,0}\\ b_{4,7} & b_{4,6} & b_{4,5} & b_{4,4} & b_{4,3} & b_{4,2} & b_{4,1} & b_{4,0}\\ b_{3,7} & b_{3,6} & b_{3,5} & b_{3,4} & b_{3,3} & b_{3,2} & b_{3,1} & b_{3,0}\\ b_{2,7} & b_{2,6} & b_{2,5} & b_{2,4} & b_{2,3} & b_{2,2} & b_{2,1} & b_{2,0}\\ b_{1,7} & b_{1,6} & b_{1,5} & b_{1,4} & b_{1,3} & b_{1,2} & b_{1,1} & b_{1,0}\\ b_{0,7} & b_{0,6} & b_{0,5} & b_{0,4} & b_{0,3} & b_{0,2} & b_{0,1} & b_{0,0} \end{bmatrix} \]

4.4 一般算法流程

首先,需要找到两个域 \(F_2[x]/p(x)\) 和 \(F_2[x]/q(x)\) 满足映射关系的 \(\alpha\) 和 \(\beta'\)
其中 \(\alpha = \overline{x} \; mod \; p(x)\) , \(\beta = \overline{x} \; mod \; q(x)\)
且 \(p(\beta') = 0, \beta' \in F_2[\beta] = F_2[x]/q(x)\)

计算 \(\beta'^i, i = 0, 1, \cdots , 7\) ,并将 \(\beta'^i\) 的系数值置于矩阵 \(T\) 的倒数第 \(i\) 列(从0开始)

五、代码实现(寻找同构映射)

有限域的四则运算:点击此处跳转

假设 \(p(x) = x^8 + x^4 + x^3 + x + 1\) ,\(q(x) = x^8 + x^7 + x^6 + x^5 + x^4 + x^2 + 1\)
需要求解 \(F_2[x]/p(x)\) 和 \(F_2[x]/q(x)\) 之间的映射关系

5.1 有限域类(GF28)

def gf2_mul(a: int, b: int, poly: int) -> int:
    """有限域乘法"""
    ans = 0
    digit = poly.bit_length() - 1
    while b:
        if b & 1:
            ans = ans ^ a
        a, b = a << 1, b >> 1
        if a >> digit:
            a = a ^ poly
    return ans


class GF256:
    def __init__(self, value, poly):
        self.value = value
        self.poly = poly

    def __add__(self, other):
        """加法"""
        return GF256(self.value ^ other.value, self.poly)

    def __sub__(self, other):
        """减法"""
        return GF256(self.value ^ other.value, self.poly)

    def __mul__(self, other):
        """乘法"""
        return GF256(gf2_mul(self.value, other.value, self.poly), self.poly)

    def __pow__(self, power, modulo=None):
        """幂"""
        res = GF256(1, self.poly)
        for i in range(power):
            res = res * self
        return res

5.2 p(x)和q(x)定义

px = 0b100011011  # x^8 + x^4 + x^3 + x + 1
qx = 0b111110101  # x^8 + x^7 + x^6 + x^5 + x^4 + x^2 + 1
p = lambda x: x ** 8 + x ** 4 + x ** 3 + x + x ** 0
q = lambda x: x ** 8 + x ** 7 + x ** 6 + x ** 5 + x ** 4 + x ** 2 + x ** 0

5.3 遍历搜索

for i in range(2 ** 8):
    # 遍历 F_2[x]/q(x) 的元素
    t = GF256(i, qx)
    if p(t).value == 0:  # 满足p(t)=0
        print(bin(t.value))

得到8个结果

0b100000
0b110011
0b111110
0b1110000
0b10011111
0b10100110
0b10101010
0b11001110

5.4 结果

令 \(\alpha = \overline{x} \; mod \; p(x)\) 为 \(p(x)\) 的一个根
令 \(\beta = \overline{x} \; mod \; q(x)\) 为 \(q(x)\) 的一个根

上述结果也就是找到了8个映射关系,分别为

关系
0b100000 \(\alpha \to \beta^5\)
0b110011 \(\alpha \to \beta^5 + \beta^4 + \beta + \beta^0\)
0b111110 \(\alpha \to \beta^5 + \beta^4 + \beta^3 + \beta^2 + \beta^1\)
0b1110000 \(\alpha \to \beta^6 + \beta^5 + \beta^4\)
0b10011111 \(\alpha \to \beta^7 + \beta^4 + \beta^3 + \beta^2 + \beta^1 + \beta^0\)
0b10100110 \(\alpha \to \beta^7 + \beta^5 + \beta^2 + \beta^1\)
0b10101010 \(\alpha \to \beta^7 + \beta^5 + \beta^3 + \beta^1\)
0b11001110 \(\alpha \to \beta^7 + \beta^6 + \beta^3 + \beta^2 + \beta^1\)

六、有限域同构与密码学

在例如 AES 和 SM4 这类对称密码的 S 盒变换的底层,所使用的就是有限域 \(GF(2^8)\) 的求逆变换(除了求逆还涉及一些仿射变换)。

如果采用硬件(例如FPGA)实现密码算法,可将 \(GF(2^8)\) 的同构于 \(GF((2^4)^2)\) 复合域甚至同构于 \(GF(((2^2)^2)^2)\) 复合域,便于分析有限域的求逆表达式,使用逻辑函数代替原先的查表运算,能够节省门电路资源

如果使用软件实现,可以利用有限域同构关系将 SM4 的 S盒 转化为 AES 的 S盒,利用 AES 指令集完成 SM4 的 S盒 操作

标签:同构,映射,有限,self,beta,alpha
来源: https://www.cnblogs.com/kentle/p/15643760.html

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

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

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

ICode9版权所有