1. 前言
要解决的问题:(cequiv m^{e} extrm{mod} N)((m<N),(N)已被分解,但((e,phi(N))>1))
2. 分类讨论
首先给出求解方程((q,e)为素数)(yequiv x^{e} extrm{mod} q^{k})的Python脚本
注:当(k=1)时,可(使用Sagemath)直接在有限域(GF(q))上对(y)开(e)次方;
2.1. (N=p^{a})
记(g=(e,phi(N)),e_{1}=e/g),则((e_{1},phi(N))=1),因此可以计算(d_{1}equiv e_{1}^{-1} extrm{mod} phi(N));(c^{d_{1}}equiv m^{ecdot d_{1}}equiv (m^{g})^{d_{1}cdot e_{1}}equiv m^{g} extrm{mod} N),从而可得(m^{g} extrm{mod} p^{a}),接下来使用上述工具求解(最多有(g)个解)。
2.2. (N=p_{1}^{a_{1}}cdots p_{k}^{a_{k}})
(cequiv m^{e} extrm{mod} NRightarrow cequiv m^{e} extrm{mod} (p_{1}^{a_{1}}cdots p_{k}^{a_{k}})),则有
记(phi_{i}=phi(p_{i}^{a_{i}})),(g_{i}=(e,phi_{i})),(e_{i}=e/g_{i}),(d_{i}equiv e_{i}^{-1} extrm{mod} phi_{i})
这时处理的方式不唯一;我们只考虑那些(g_{i})很小的线程同余方程,不妨设(g_{1},cdots,g_{t})很小;
(1)(g_{1}=cdots =g_{s}=r),(sleqslant t)(不妨设前(s)个(g_{i})相等)
利用中国剩余定理求解前(s)个方程组成的方程组,得到方程组在模(p_{1}^{a_{1}}cdots p_{s}^{a_{s}})下的解;当(m^{r}<p_{1}^{a_{1}}cdots p_{s}^{a_{s}})时,直接对解开(r)次方即得(m);
(2)一般情况,(g_{i}(i=1,cdots,t))很小但是大多数各不相同
那么首先对每个方程组利用上述工具求解(记(x_{i})为第(i)个方程的解,此时大多数方程组有多个解,每个方程组的解最多有(g_{i})个)
利用中国剩余定理求解前(t)个方程组成的方程组,得到方程组在模(p_{1}^{a_{1}}cdots p_{k}^{a_{t}})下的解;当(m<p_{1}^{a_{1}}cdots p_{t}^{a_{t}})时,(m)必在这些解中。
注:其实这里也解释了为什么考虑那些(g_{i})很小的线程同余方程,我们最多要求解(g_{1}cdots g_{t})个这样的方程组,每个方程组会求出一个解;如果(g_{i})很大,那么候选的解太多;但是我们要保证(p_{1}^{a_{1}}cdots p_{t}^{a_{t}}>m)。