logo

半素数の素因数分解が容易に解ける条件 📂整数論

半素数の素因数分解が容易に解ける条件

要旨 1

準素数の素因数分解問題 N=pqN = pq は、次の条件下では比較的簡単に解ける。

説明

条件 (ii) の意味は、ppqq の差が少ないときに簡単に解けるということだが、これには説明が必要だろう:

  • 一見すると、p,qNp,q \in \mathbb{N}(p+q)(p + q) に制限されているなら、N=pqN = pq を最大にする方法は、可能な限り ppqq の差を小さくすることだ。例えば、p+q12p+q \le 12 であれば、pqpq7=pq=57 = p \approx q = 5 のとき最大値 3535 を持つ。

「力技で解く」ことを防ぐためには、ppqq は可能な限り大きい方がいい。例えば N1=347=141N2=1113=143 N_{1}=3 \cdot 47=141 \\ N_{2}=11 \cdot 13=143 があったとすると、公開された時には 22 しか差がないが、N1N_{1} は「手間をかけて」すぐに解けるようになる。

  • しかし、このような一次元的な理由で大きさが似ている ppqq を使う場合、二次元的に考える攻撃者には破られるしかない。単純に考えて、本当に pqp \approx q なら攻撃者は Np2N \approx p^2 と仮定し、N\sqrt{N} の近くにソリューションの候補を大幅に減らすことができる。このアイデアから数学的な技巧を駆使すれば、N=pqN=pq は非常に簡単な問題になる。

証明

(i)

ppスムーズな素数ならば、ポラード p1p-1 素因数分解アルゴリズムを使うことができるので、準素数の素因数分解問題が比較的簡単に解けるようになる。

(ii)

p:=a+bp := a + bq:=abq := a - b とすると、ppqqaa を中心に ±b\pm b 離れた素数になる。これを NN で表すと N=(a+b)(ab)=a2b2 \begin{align*} N =& ( a + b)(a - b) \\ =& a^2 - b^2 \end{align*} つまり N+b2=a2N + b^2 = a^2 となる。したがって、NNbb11 ずつ増やしながら (N+b2)\left( N + b^2 \right) が平方数になるのを探すと p=a+bp = a + bq=abq = a - b が何であるかわかるので、準素数の素因数分解問題が比較的簡単に解ける。

例として、N=25217N = 25217 を考えよう。NN を直接素因数分解するのは容易ではないが、25217+82=159225217 + 8^2 = 159^2 とわかると p=159+8=167q=1598=151 \begin{align*} p =& 159 + 8 = 167 \\ q =& 159-8 = 151 \end{align*} をすぐに求めることができる。文の文脈に沿って言えば、167151167 \approx 151 のために簡単に解けてしまったのだ。

一方で、この bb を見つけるのをもっと賢くしよう。何か kk について kN=a2b2 k N = a^2 - b^2 とすると、(a+b)(a+b)(ab)(a-b)kk の倍数なので、両辺を kk で割るだけで NN に関する式をそのまま得ることができる。このような面倒なことをする理由は、この式が次のように表せるからだ。 a2b2(modN) a^2 \equiv b^2 \pmod{N} その後は、次の方法で d=qd = q を探す。


ステップ 1. cic_{i}

計算約数が少ない数 cic_{i} について、ciai2(modp)c_{i} \equiv a_{i}^{2} \pmod{p} を満たす a1,,ara_{1} , \cdots , a_{r} を探しておく。


ステップ 2. b2b^2 の計算

ai1ais=aci1cis=b2 a_{i_{1}} \cdots a_{i_{s}} = a \\ c_{i_{1}} \cdots c_{i_{s}} = b^2 を満たす ci1,,cisc_{i_{1}} , \cdots , c_{i_{s}} を探す。


ステップ 3. d=gcd(N,ab)d = \gcd \left( N , a-b \right)

計算された aabb を用いて、 a2(ai1ais)2ai12ais2ci1cisb2 \begin{align*} a^2 & \equiv \left( a_{i_{1}} \cdots a_{i_{s}} \right)^{2} \\ & \equiv a_{i_{1}}^{2} \cdots a_{i_{s}}^{2} \\ & \equiv c_{i_{1}} \cdots c_{i_{s}} \\ & \equiv b^2 \end{align*} こうして ddNN約数、つまり qq になる。

参照

素因数分解問題の難しさを利用したセキュリティアルゴリズム

素因数分解問題に対する攻撃アルゴリズム


  1. Hoffstein. (2008). An Introduction to Mathematical Cryptography: p133~139. ↩︎