Skip to content

基于代数群的整数分解

Published: at 06:42 AM

对于大整数分解的 Pollard’s p1p-1 和 Williams’ p+1p+1 算法,作为密码学民科,我一直都只知道它们的使用条件—— p1p-1q1q-1 光滑,当作黑盒去使用. 最近打了 NeSE 升级赛,发现这种算法的思想是可以扩展的,在这里稍微深入学习一下.(我的代数基础约等于 0,所以下面的描述很可能会有问题,希望大家指正)

Pollard’s p1p-1

该算法的核心是 Fermat 小定理

ap11(modp)a^{p-1}\equiv 1\pmod{p}

考虑 RSA 的情形(n=pqn=pq).

如果我们找到一个 NN 满足 p1Np-1\mid Nq1Nq-1 \nmid N,那么对于一个一般的 aa,有 aN1(modp)a^N\equiv 1\pmod{p}aN≢1(modq)a^N\not\equiv 1\pmod{q}(当 aann 互素时才偶然地不成立). 因此在这种情况下,GCD(aN1,n)=p\text{GCD}(a^N-1,n)=p.

怎么找到这样的 NN 呢?令 PPp1p-1 的最大素因子, QQq1q-1 的最大素因子,不失一般性地,P<QP<Q. Pollard 告诉我们,下面这个 NN 可以分解 nn

N=πPπlogn/logπN =\prod_{\pi \leq P}\pi^{\lfloor{\log{n}/log{\pi}}\rfloor}

也就是所有小于 PP 的素因子的累乘.

Williams’ p+1p+1

Pollard’s p1p-1 依赖于 p1p-1,Williams 告诉我们,可以在 二次域中使用幂的迹替换普通的幂运算,这样就可以让 p+1p+1 代替 p1p-1 的作用. 关键在于,这个域的阶数为 p21p^2-1,我们能从中选出阶为 p+1p+1 的元素.

对于给定的参数 AA 定义 Lucas 序列 ViV_i

V0=2,V1=A,Vm=AVm1Vm2.\begin{align} V_0&= 2,\\ V_1&= A,\\ V_m&= AV_{m-1}-V_{m-2}. \end{align}

我们知道 Vm=C1α1m+C2α2mV_m=C_1\alpha_1^m+C_2\alpha_2^m,其中 α1,α2\alpha_1,\alpha_2 是特征方程 t2At+1t^2-At+1 的根

α1,2=A±A242\alpha_{1,2}=\frac{A\pm \sqrt{A^2-4}}{2}

容易验证 C1=C2=1C_1=C_2=1,我们得到公式

Vn=(A+A242)n(AA242)nV_n ={\left(\frac{A+\sqrt{A^2-4}}{2}\right)}^n-{\left(\frac{A-\sqrt{A^2-4}}{2}\right)}^n

现在开始,假设计算在模 pp 下进行,可以把根 α1,α2\alpha_1,\alpha_2 看作域 Zp[A24]\mathbb{Z}_p[\sqrt{A^2 - 4}] 的两个元素. 接下来我们讨论一下 A24\sqrt{A^2 - 4} 是不是二次剩余,这决定了这个域是不是「扩」了.

A24\sqrt{A^2 - 4} 是二次非剩余的时候,Zp[A24]\mathbb{Z}_p[\sqrt{A^2 - 4}] 是一个二次域,这时 VnV_nα1n\alpha_1^n 的迹. 此外,(A24)(p1)/21(modp)(A^2-4)^{(p-1)/2}\equiv -1\pmod{p},所以

(x+yA24)p=xyA24inZp[A24]\left(x+y\sqrt{A^2 - 4}\right)^p = x-y\sqrt{A^2 - 4}\quad \text{in}\quad \mathbb{Z}_p [\sqrt{A^2 - 4}]

因此 α1p=α2\alpha_1^p=\alpha_2,进而 α1p+1=α2p+1=α1α2=1\alpha_1^{p+1}=\alpha_2^{p+1}=\alpha_1\alpha_2=1. 立即推对于任意的 cc 都有

Vc(p+1)2(modp)V_{c(p+1)}\equiv 2\pmod{p}

反之,当 A24\sqrt{A^2 - 4} 是二次剩余的时候,Zp[A24]\mathbb{Z}_p[\sqrt{A^2 - 4}] 实际上没「扩」,「降维」成 Zp\mathbb{Z}_p. 因此

Vc(p+1)=α1c(p+1)+α2c(p+1)α12c+α22c(modp)V_{c(p+1)}=\alpha_1^{c(p+1)}+\alpha_2^{c(p+1)}\equiv\alpha_1^{2c}+\alpha_2^{2c}\pmod{p}

因为 α1α2=1\alpha_1\alpha_2=1,我们有

(α12c1)(α22c1)=2α12cα22c(\alpha_1^{2c}-1)(\alpha_2^{2c}-1)= 2-\alpha_1^{2c}-\alpha_2^{2c}

因此 Vc(p+1)2(modp)V_{c(p+1)}\equiv 2\pmod{p} 当且仅当 α12cα22c1(modp)\alpha_1^{2c}\equiv \alpha_2^{2c}\equiv 1\pmod{p}.

总结一下,对于一个一般的模 pp 二次非剩余 AA,如果 qpq\neq p 我们有 Vc(p+1)2(modp)V_{c(p+1)}\equiv 2\pmod{p}Vc(q+1)≢2(modq)V_{c(q+1)}\not\equiv 2\pmod{q}(当 (q1)/2c(q-1)/2\mid c 时才偶然地不成立).

两种算法的本质

从更高更抽象的视角来看,这两个算法其实是很相似的,我们把它们的核心 idea 放在一起看看:

我们可以从中抽象出一个更一般的算法:

  1. 构造一个模 nn 的代数群,它在某个 特别的因子 pnp\mid n 下「降维」的群的 阶是可预测的
  2. 取群的 一般的元素 aa ,计算「NN 次幂」,得到一个 特别的元素 aNa^N
  3. nn 和这个 特别的元素 aNa^N,通过 GCD\text{GCD} ,分解出 pp.

注意我这里说的「可预测」指的不是我们知道阶的值。例如在没有分解 nn 的情况下,我们是不知道模 pp 乘法群的阶具体是多少的,但是我们知道它一定是 p1p-1.

Imaginary CTF 2023 - Sus

这是 maple 的一道 题目,要求分解 n=pqrn=pqr,其中素数 q=p2+p+1q=p^2+p+1

第一次看到这个解法会觉得非常神奇,不过有了上面的抽象结果我想会稍微好理解一些:

Pick a random polynomial f(x)=x3+ax2+bx+cf(x)=x^3+ax^2+bx+c, and pick a random element aa in R=Zn[x]/f(x)\mathbb{R}=\mathbb{Z}_n[x]/f(x). If f(x)f(x) is irreducible in Fp[x]\mathbb{F}_p[x] then K=Fp[x]/f(x)=Fp3\mathbb{K}=\mathbb{F}_p[x]/f(x)=\mathbb{F}_{p^3} will be a field with order p31=(p1)(p2+p+1)p^3-1=(p-1)(p^2+p+1).

We raise aa to the power of n=pqr=p(p2+p+1)rn=pqr=p(p^2+p+1)r then ana^n would probably be of order p1p-1, which implies it will be in the form of u+0x+0x2u+0x+0x^2 in K\mathbb{K}. This means we can take the degree 1 or 2 coefficient of ana^n in R\mathbb{R} and gcd it with nn to get pp, then we can fully factor nn to decrypt the flag.

This is basically the same idea as Pollard’s p-1 or Williams’ p+1 factorization algorithm, but we are doing it in a field with higher degree.

用我们上面的抽象就是:

  1. 构造一个模 nn 的代数群 R=Zn[x]/f(x)\mathbb{R} = \mathbb{Z}_n[x]/f(x),它在某个 特别的因子 pnp\mid n 下「降维」的群 K=Fp[x]/f(x)=Fp3\mathbb{K} = \mathbb{F}_p[x]/f(x) = \mathbb{F}_{p^3}阶是可预测的,为 p31=(p1)(p2+p+1)p^3 - 1 = (p - 1)(p^2 + p + 1)
  2. 取群的 一般的元素 aa ,计算「nn 次幂」,得到一个 特别的元素 ana^n
  3. nn 和这个 特别的元素 ana^n,通过 GCD(an1次或2次系数,n)\text{GCD}(a^n的1次或2次系数,n) ,分解出 pp.

当然这里面还有很多细节值得我们推导:为什么群 K\mathbb{K} 的阶数是 p31p^3 - 1?为什么 ana^n 的 1 次或 2 次系数是 0?可以看 糖醋小鸡块的分析(tql). 我这里按我的想法梳理一下:

有限域的构造

有限域的具体构造

基于这个方法,我们可以从 素域 Fp\mathbb{F}_p 出发,通过商环去构造 任意阶的域 Fq\mathbb{F}_q.

需要注意的是,构造出的群有 p3p^3 个元素,而在有限域中 除了零元素 以外的所有元素组成一个乘法群,所以这里说的

K=Fp[x]/f(x)=Fp3\mathbb{K}=\mathbb{F}_p[x]/f(x)=\mathbb{F}_{p^3} will be a field with order p31=(p1)(p2+p+1)p^3-1=(p-1)(p^2+p+1)

实际上是说 域的乘法群 Fp3\mathbb{F}_{p^3}^* 的阶数是 p31p^3-1.

拉格朗日定理

(拉格朗日定理)若 GG 是一个有限群,而 HHGG 的一个子群,则 HH 的阶整除 GG 的阶。

拉格朗日定理意味着,群中的每个元素的阶也会整除群的阶,而我们构造出的群的阶是 p31p^3 - 1,那么我们随机选择一个元素 aa ,它的阶就有可能是 p31p^3-1 的因子 p1p-1.

现在假设我们从扩域 K=Fp[x]/f(x)=Fp3\mathbb{K} = \mathbb{F}_p[x]/f(x) = \mathbb{F}_{p^3}抽卡 抽到了一个元素 aa 使得 ana^n 阶为 p1p-1(an)p1=1(a^n)^{p-1}=1,也就是 (an)p=an(a^n)^p=a^n. 这让我想到最近学的一个概念,Frobenius 自同构.

Frobenius 自同构

Frobenius 自同构

从这个角度看,由 Fermat 小定理可以证明 σ\sigma 的不动元就是元素 ana^n 所在的循环群的元素,也就是素域 Fp\mathbb{F}_ppp 个元素, ana^n 的 1 次或 2 次系数是 0 似乎是不证自明的了.

NeSE 升级赛

本题的一部分难点抽象出来就是:

类似地我们构造阶为 q21q^2-1 的群即可. 同样套用我们前面的抽象来理解,由于 4n=(q+1)q4n=(q+1)q

  1. 构造一个模 m=kplqm=kp\cdot lq 的代数群 R=Zm[x]/f(x)\mathbb{R} = \mathbb{Z}_{m}[x]/f(x),它在某个 特别的因子 qmq\mid m 下「降维」的群 K=Fq[x]/f(x)=Fq2\mathbb{K} = \mathbb{F}_q[x]/f(x) = \mathbb{F}_{q^2}阶是可预测的,为 q21=(q1)(q+1)q^2 - 1 = (q - 1)(q + 1)
  2. 取群的 一般的元素 aa ,计算「4n4n 次幂」,得到一个 特别的元素 a4na^{4n}
  3. nn 和这个 特别的元素 a4na^{4n},通过 GCD(an1次系数,n)\text{GCD}(a^n的1次系数,n) ,分解出 qq.

需要注意的是这里 mm 还有一些从 k,lk,l 里面来的小因子 pip_i,这样我们随机抽一个元素 aa,得到 a4na^{4n} 的阶就有可能被这些小因子影响,而我们想要的阶是 q+1q+1,所以要先枚举一下小因子把它们从 mm 里面去掉.

但是我并不知道怎么说明在这种情况下 a4na^{4n}K\mathbb{K} 上的形式是 u+0xu+0x. 如果说 Sus 的情形是 p1p-1,可以类比到 Pollard’s p1p-1 用费马小定理去证明,那从直觉上这种 p+1p+1 的情形也可以类比到 Williams’ p+1p+1 算法用 Lucas 序列去证明. 以后有机会再继续研究吧.


Previous Post
Gröbner 基学习
Next Post
差分分析学习(三)