<<<

(Ko) [Paper Review] A New Class of Unsafe Primes

Intro

본 글은 Qi Cheng의 논문 A New Class of Unsafe Primes을 한글로 풀어 설명하는 글입니다. 글에 소개되지 않은 자세한 내용은 원본 논문을 참고해주세요.

RSA를 포함하여, 소인수분해가 풀기 어렵다는 사실은 암호학에서 자주 인용되는 일방향함수입니다. 계산이 단순하며 빠른 돌파구가 없는 문제는 매력적이기 마련입니다.

이런저런 이유로 이후 등장한 비대칭키 암호는 훨씬 복잡한 구조를 갖고 있기에, 개발자의 입장에서 이해하기 어려운 편입니다. 물론, 누구나 구조를 이해하기 쉽다는 것은 함부로 수정을 감행할 수 있다는 점에서 RSA의 큰 단점입니다.

일반적인 조건의 소인수분해를 해결하는 다항시간 알고리즘은 아직 존재하지 않습니다. 현재 가장 강력한 알고리즘은 General Number Field Sieve (GNFS)로, Ln[1/3,(64/9)1/3]L_n\left[1/3,(64/9)^{1/3}\right], Big-O 표기법으로는 exp(((64/9)1/3+o(1))(lgn)1/3(lglgn)2/3)\operatorname{exp}\left(\left((64/9)^{1/3}+o(1)\right)(\lg n)^{1/3}(\lg\lg n)^{2/3}\right)의 시간복잡도를 가지고 있습니다. 지수 시간복잡도보다는 빠르지만 다항 시간복잡도보다는 느리기 때문에, 충분히 큰 수의 소인수분해는 현실적으로 불가능합니다.

일반적인 조건에서 불가능하다면, 특정한 조건을 만족할 때 빠르게 소인수분해할 수 있는 알고리즘을 생각해볼 차례입니다. 암호 체계가 소인수분해를 쓴다면 정말로 무작위한 수를 뽑기보다는 특정한 구성 알고리즘을 사용하여 수를 선택할 것이고, 이는 생성된 수에 무작위에서 벗어난, 특수한 성질을 부여할 것입니다.

그러한 알고리즘은 종류가 매우 다양합니다.

  • Fermat factorization

  • Pollard’s p1p-1 method

  • Williams’s p+1p+1 method

  • Factoring with cyclotomic polynomials

  • Lenstra Elliptic-Curve Method (Lenstra-ECM)

  • Return of Coppersmith Attack (ROCA)

이번 글은 Lenstra Elliptic-Curve Method에서 시작하여, 4p14p-1 method라는 소인수분해 알고리즘에 대해 알아보겠습니다.


Lenstra Elliptic-Curve Method

RSA의 공개키 NN은 두 큰 소수 p,qp,q의 곱 N=pqN=pq로 정의됩니다. 이때, 어떤 타원 곡선 E:y2=x3+Ax+BE:y^2=x^3+Ax+BFp\mathbb{F}_p 상에서 smooth한 위수 K:=#E(Fp)K:=\#E(\mathbb{F}_p)를 갖는다고 가정해 봅시다. 조금 더 엄밀하게, 어떤 자연수 UU에 대해 다음 조건을 만족한다고 생각해 봅시다.

prime qK,qU\forall \text{prime }q\mid K,\quad q\le U

qlgqK+1>Kq^{\left\lfloor\lg_q{K}\right\rfloor+1}> K이므로, KK의 소인수분해에서 qq의 최대 지수 νq(K)\nu_q(K)는 다음을 만족합니다.

νq(K)lgqK\nu_q(K)\le \left\lfloor\lg_q{K}\right\rfloor

이를 이용해 다음 수식이 성립함을 알 수 있습니다. 이때 SSKK의 모든 소인수의 집합입니다.

K=qSqνq(K)qSqlgqKKqSqlgqKK = \prod_{q\in S} q^{\nu_q(K)} \mid \prod_{q\in S} q^{\left\lfloor\lg_q{K}\right\rfloor}\\ K \mid \prod_{q\in S} q^{\left\lfloor\lg_q{K}\right\rfloor}

(라그랑주의 정리) 타원 곡선 EE 위의 임의의 점 PP 에 대해, KP=E(Fp)P=OKP=\left\vert E(\mathbb{F}_p)\right\vert P=\mathcal{O}가 성립합니다.

무한 원점은 임의의 정수를 곱하여도 무한 원점이므로, EE 위의 임의의 점 PP에 대해 (qSqlgqK)P=O\left(\prod_{q\in S} q^{\left\lfloor\lg_q{K}\right\rfloor}\right)P=\mathcal{O}임을 알 수 있습니다.

위 성질을 이용하여, Lenstra Elliptic-Curve Method는 다음과 같은 과정으로 nn의 소인수를 찾습니다.

  1. Z/nZ\mathbb{Z}/n\mathbb{Z}의 임의의 타원 곡선 E:y2=x3+Ax+BE: y^2=x^3+Ax+B와 그 위의 점 P=(x0,y0)P=(x_0,y_0)를 선택합니다.

  2. (U!)P(U!)P을 계산합니다. U!U!을 직접 계산할 필요는 없으며, 다음과 같이 절차적으로 계산할 수 있습니다.

    1. P2:=2PP_2 := 2P를 계산합니다.

    2. P3:=3P2P_3 := 3P_2를 계산합니다.

    3. PU:=UPU1P_U := UP_{U-1}을 계산합니다. PU=(U!)PP_U=(U!)P입니다.

  3. 덧셈 계산 중 λ\lambda의 분모가 nn과 서로소가 아닌 경우가 없다면, E(Fp)\left\vert E(\mathbb{F}_p)\right\vert의 소인수 중 UU보다 큰 수가 존재한다는 의미입니다. 이 경우 1회의 시도가 실패한 것이므로, 1번으로 돌아가 다시 시도합니다.

  4. 덧셈 계산 중 λ\lambda의 분모 vvnn과 서로소가 아닌 경우가 있었다면, gcd(v,n)\gcd(v,n)을 계산합니다. 이 값이 nn이 아니라면 pp 또는 qq이므로 nn을 소인수분해할 수 있습니다.

이번 글에서 소개하는 소인수분해 알고리즘은 Lenstra Elliptic-Curve Method에 기반합니다. 차이점이라면,


Division Polynomial

타원 곡선 y2=x3+Ax+By^2=x^3+Ax+B 상의 점 P:=(xP,yP)P:=(x_P,y_P)에 대해, 2P2P의 좌표는 다음과 같이 계산할 수 있습니다.

λ=3xP2+A2yPx2P=λ22xP=(3xP2+A)28xPyP24yP2y2P=λ(xPx2P)yP=(3xP2+A)(xPx2P)2yP22yP\begin{align*} \lambda &= \frac{3{x_P}^2+A}{2{y_P}}\\ x_{2P} &= \lambda^2-2{x_P} = \frac{(3{x_P}^2+A)^2-8{x_P}{y_P}^2}{4{y_P}^2}\\ y_{2P} &= \lambda(x_{P}-x_{2P})-y_{P} = \frac{(3{x_P}^2+A)(x_P-x_{2P})-2{y_P}^2}{2{y_P}} \end{align*}

λ\lambda의 정의 중 분모의 2yP2y_P가 만약 0이라면 2P2P의 x좌표와 y좌표는 정의할 수 없을 것입니다. 타원 곡선에서 그러한 점은 오직 무한 원점 O\mathcal{O} 뿐이므로, 2yP=02y_P=0인 점 PP에 대해 2P2P를 계산하면 O\mathcal{O}가 된다는 의미입니다.

이를 임의의 자연수 nn에 대해 확장시켜봅시다. nPnP를 계산할 때 λ\lambda의 분모를 ψn\psi_n이라고 하면, 처음 몇 개의 ψn\psi_n은 다음과 같습니다.

ψ1=1ψ2=2yψ3=3x4+6Ax2+12bxA2ψ4=4y(x6+5Ax4+20Bx35A2x24ABx8B2A3)\begin{align*} \psi_1 &= 1\\ \psi_2 &= 2y\\ \psi_3 &= 3x^4+6Ax^2+12bx-A^2\\ \psi_4 &= 4y(x^6+5Ax^4+20Bx^3-5A^2x^2-4ABx-8B^2-A^3)\\ \end{align*}

이러한 다항식을 division polynomial이라고 합니다. 이는 nP=OnP=\mathcal{O}를 충족하는 점 PP들, 즉 nn-torsion과 큰 관련이 있다고도 볼 수 있습니다.

다음은 division polynomial 사이에 성립하는 점화식입니다.

ψ2m+1=ψm+2ψm3ψm1ψm+13ψ2m=(ψm2y)(ψm+2ψm13ψm2ψm+13)\begin{align*} \psi_{2m+1} &= \psi_{m+2}{\psi_{m}}^3-\psi_{m-1}{\psi_{m+1}}^3\\ \psi_{2m} &= \left(\frac{\psi_m}{2y}\right)\cdot\left(\psi_{m+2}{\psi_{m-1}}^3-\psi_{m-2}{\psi_{m+1}}^3\right) \end{align*}

Some stuffs on Elliptic Curves…

타원 곡선에는 j-invariant라는 개념이 있습니다. 등장한 배경은 다소 복잡하므로 생략하고, 대수적으로 닫힌 체에서는 두 타원 곡선이 서로 isomorphic하다두 타원 곡선의 j-invariant가 동일하다와 동치입니다.

E:y2=x3+Ax+Bj(E):=17284A24A2+27B3K:algebraically closed fieldE1/KE2/Kj(E1/K)=j(E2/K)E : y^2=x^3+Ax+B\\ j(E) := 1728\cdot\frac{4A^2}{4A^2+27B^3}\\[2em] K : \text{algebraically closed field}\\[2em] E_1/K \simeq E_2/K \Leftrightarrow j(E_1/K) = j(E_2/K)

처 음 등장한 두 단어의 정의를 간단하게 짚고 넘어가겠습니다.

대수적으로 닫힌 체(algebraically closed field)는 임의의 다항방정식이 근을 가지는 체를 말합니다. 복소수의 집합 C\mathbb{C}는 임의의 다항방정식이 근을 가지므로, 대수적으로 닫힌 체입니다.

fC[X]rCf(r)=0\forall f\in\mathbb{C}[X] \quad \exists r\in\mathbb{C} \quad f(r)=0

두 타원 곡선(혹은 일반적인 맥락에서 두 군)이 homomorphic하다는 것은 다음을 조건하는 함수 ϕ\phi가 존재한다는 뜻입니다. 이러한 ϕ\phihomomorphism이라고 부릅니다.

P,QE1ϕ(P)+ϕ(Q)=ϕ(P+Q)\forall P,Q\in E_1 \quad \phi(P)+\phi(Q)=\phi(P+Q)

만약 homomorphism ϕ\phi가 일대일대응 함수라면 isomorphism이라 부르고, 두 타원 곡선이 isomorphic하다고 합니다.

Homomorphism의 정의역과 공역이 같은 타원 곡선이라면 그러한 ϕ\phiendomorphism이라고 부릅니다.

그런데 Fp\mathbb{F}_p는 대수적으로 닫힌 계가 아니므로 앞서 설명한 동치 관계가 성립하지 않습니다. 그중 다음과 같은 한 방향만 성립합니다.

E1/FpE2/Fpj(E1/Fp)=j(E2/Fp)E_1/\mathbb{F}_p \simeq E_2/\mathbb{F}_p \Rightarrow j(E_1/\mathbb{F}_p) = j(E_2/\mathbb{F}_p)

따라서 동일한 j-invariant를 갖는 타원 곡선은 두 개 이상의 isomorphism class로 구성됩니다. j-invariant의 실제 값에 따라 경우의 수를 나누어 보면,

  • j=0j=0이면 최대 6개, (quadratic twist + cubic twist)

  • j=1728j=1728이면 최대 4개, (quartic twist)

  • 둘 모두 아니라면 정확히 2개 (quadratic twist)

의 isomorphism class가 존재합니다.

세 번째 경우가 일반적이며, 이 경우 해당 j-invariant 값을 갖는 타원 곡선의 isomorphism class는 다음과 같이 2개입니다. 이때 k=27j4(1728j)k=\frac{27j}{4(1728-j)}, ccpp의 이차 비잉여입니다.

  • E1:y2=x3+kx+kE_1:y^2=x^3+kx+k와 isomorphic한 타원 곡선

  • Ec:y2=x3+c2kx+c3kE_c:y^2=x^3+c^2kx+c^3k와 isomorphic한 타원 곡선

조금 변형하면, EcE_c가 곡선 y2=c3(z3+kz+k)y^2=c^3(z^3+kz+k)와 일대일대응이라는 사실을 알 수 있습니다.

이 형태에 르장드르 기호를 취하면 #E1(Fp)+#Ec(Fp)=2p+2\#E_1(\mathbb{F}_p)+\#E_c(\mathbb{F}_p)=2p+2라는 사실을 관찰할 수 있습니다.

#E1(Fp)=1+xFp(1+χ(x3+kx+k))=(p+1)+xFpχ(x3+kx+k)#Ec(Fp)=1+xFp(1+χ(c3(x3+kx+k)))=(p+1)+xFpχ(c3(x3+kx+k))=(p+1)+xFpχ(c3)χ(x3+kx+k)=(p+1)xFpχ(x3+kx+k)#E1(Fp)+#Ec(Fp)=2(p+1)+xFpχ(x3+kx+k)xFpχ(x3+kx+k)=2p+2\begin{align*} \#E_1(\mathbb{F}_p) &= 1 + \sum_{x\in\mathbb{F}_p} \left(1+\chi(x^3+kx+k)\right)\\ &= (p+1) + \sum_{x\in\mathbb{F}_p} \chi(x^3+kx+k)\\ \#E_c(\mathbb{F}_p) &= 1 + \sum_{x\in\mathbb{F}_p} \left(1+\chi(c^3(x^3+kx+k))\right)\\ &= (p+1) + \sum_{x\in\mathbb{F}_p} \chi(c^3(x^3+kx+k))\\ &= (p+1) + \sum_{x\in\mathbb{F}_p} \chi(c^3)\chi(x^3+kx+k)\\ &= (p+1) - \sum_{x\in\mathbb{F}_p} \chi(x^3+kx+k)\\ \end{align*}\\[2em] \begin{align*} \#E_1(\mathbb{F}_p)+\#E_c(\mathbb{F}_p) &= 2(p+1) + \sum_{x\in\mathbb{F}_p} \chi(x^3+kx+k) - \sum_{x\in\mathbb{F}_p} \chi(x^3+kx+k)\\ &= 2p+2 \end{align*}

Some stuffs on Elliptic Curves… (continued)

Hasse’s bound는 타원 곡선 E(Fp)E(\mathbb{F}_p)의 점 수 #E(Fp)\#E(\mathbb{F}_p)의 상한과 하한을 보여주는 정리입니다. 구체적인 범위는 다음과 같습니다.

#E(Fp)[p+12p,p+1+2p]\#E(\mathbb{F}_p)\in[p+1-2\sqrt{p},p+1+2\sqrt{p}]

즉, #E(Fp)(p+1)\#E(\mathbb{F}_p)-(p+1)의 절댓값이 2p2\sqrt{p} 이하임을 나타내는 것이기도 합니다. 이 값을 타원 곡선의 trace라고 부릅니다. 흔히 tr(E(Fp))\operatorname{tr}(E(\mathbb{F}_p))처럼 작성하거나, 문자 tt로 표기하기도 합니다.

Frobenius endomorphism π\pi는 다음과 같이 정의되는 endomorphism입니다. 확장된 체에서의 성질을 분석하는 등 타원 곡선을 연구할 때 자주 다루어지는 도구이나, 이번 글에서는 다음과 같은 정의와 성질만 기억하셔도 좋습니다.

π:(x,y)(xp,yp)π2tπ+p=0\pi: (x,y)\mapsto(x^p,y^p)\\ \pi^2-t\pi+p=0

유리수의 집합 Q\mathbb{Q}에 대해, supersingular하지 않은 타원 곡선 E(Fp)E(\mathbb{F}_p)은 다음을 만족합니다. supersingular라는 새로운 단어가 등장했지만, 여기서는 대부분의 타원 곡선이 supersingular하지 않다는 사실만 알고 넘어갑시다.

Q(π):={a0+a1π+a2π2+aiQ}={a+bπa,bQ}(π2=tπp)Q[X]/(X2tX+p)=Q(t24p)=Q(D)(D:=sqaure-free part of 4pt2)\begin{align*} \mathbb{Q}(\pi) :=& \{a_0+a_1\pi+a_2\pi^2+\cdots \vert a_i\in\mathbb{Q}\}\\ =& \{a+b\pi\vert a,b\in\mathbb{Q}\} &&(\because \pi^2=t\pi-p)\\ \simeq& \mathbb{Q}[X]/(X^2-tX+p)\\ =& \mathbb{Q}\left(\sqrt{t^2-4p}\right)\\ =& \mathbb{Q}\left(\sqrt{-D}\right) &&(D:=\text{sqaure-free part of }4p-t^2) \end{align*}

Hasse’s bound에 의해 t24pt^2\le4p이고 pp는 소수이므로 t2=4pt^2=4p일 수는 없습니다. 따라서 t2<4pt^2<4p이고, t24p<0t^2-4p<0이므로 위 식의 마지막 줄은 타당한 변환이라고 볼 수 있습니다.

자세한 과정은 생략하나, 다음과 같은 결과를 얻을 수 있습니다.

#E(Fp)=p+1tr(π)\#E(\mathbb{F}_p) = p+1-\operatorname{tr}(\pi)
자세한 과정 보기

Endomorphism의 덧셈, 뺄셈, 합성의 결과는 endomorphism이므로 Z[π]\mathbb{Z}[\pi]의 모든 원소는 endomorphism이며, 이는 Z[π]EndFp(E)\mathbb{Z}[\pi]\sub\operatorname{End}_{\overline{\mathbb{F}}_p}(E)임을 의미합니다.

supersingular하지 않은 타원 곡선(즉 ordinary한 타원 곡선)은 정의 상 End0(E):=EndFp(E)ZQ\operatorname{End}^0(E):=\operatorname{End}_{\overline{\mathbb{F}}_p}(E)\otimes_{\mathbb{Z}}\mathbb{Q}가 imaginary quadratic field(Q(D)\mathbb{Q}\left(\sqrt{-D}\right) 꼴의 체)와 isomorphic합니다.

이는 즉 KK(또는 Q(π)\mathbb{Q}(\pi))와 동일하므로, ring of integers OK\mathcal{O}_K에 대해 Z[π]End(E)OK\mathbb{Z}[\pi]\sub\operatorname{End}(E)\sub\mathcal{O}_K가 성립하므로 End(E)\operatorname{End}(E)는 ring of integers OK\mathcal{O}_K의 유한한 index를 갖는 subring입니다. 따라서 order입니다.

즉, 다음이 성립하는 conductor ff가 존재합니다.

End(E)=Of=Z+fOK\operatorname{End}(E) = \mathcal{O}_f = \mathbb{Z}+f\mathcal{O}_K

이는 EE가 Complex Multiplication을 갖는다는 것을 의미합니다.

Frobenius endomorphism π\pi는 임의의 PE(Fp)P\in E(\mathbb{F}_p)에 대해 π(P)=P\pi(P)=P를 만족하므로 다음 두 식이 성립합니다. 두 번째 줄은 1π1-\pi가 separable isogeny이기 때문에 성립합니다.

E(Fp)=ker(1π)#E(Fp)=deg(1π)E(\mathbb{F}_p)=\operatorname{ker}(1-\pi)\\ \#E(\mathbb{F}_p)=\operatorname{deg}(1-\pi)

EE가 CM을 갖기 때문에, 다음과 같은 성질이 성립합니다.

#E(Fp)=deg(1π)=N(1π)=(1π)(1π)=(1π)(1π)=1(π+π)+ππ=1(π+π)+N(π)=1(π+π)+p=1tr(π)+p=p+1tr(π)\begin{align*} \#E(\mathbb{F}_p) &=\operatorname{deg}(1-\pi)\\ &=N(1-\pi)\\ &=(1-\pi)\overline{(1-\pi)}\\ &=(1-\pi)(1-\overline{\pi})\\ &=1-(\pi+\overline{\pi})+\pi\overline{\pi}\\ &=1-(\pi+\overline{\pi})+N(\pi)\\ &=1-(\pi+\overline{\pi})+p\\ &=1-\operatorname{tr}(\pi)+p\\ &=p+1-\operatorname{tr}(\pi)\\ \end{align*}

이는 증명하려던 명제이므로, 증명이 마무리되었습니다.


4p-1 method

직전에 언급한 식을 다시 살펴보겠습니다. 아래 식에서 tr(π)=1\left\vert\operatorname{tr}(\pi)\right\vert=1이라면 E1E_1 또는 EcE_c의 점이 정확히 pp가 될 것입니다. RSA에서 공격자는 공개키이자 pp의 배수인 N=pqN=pq을 알고 있으므로, 위수가 pp인 타원 곡선에서 NN을 곱하면 그 결과는 무한 원점 O\mathcal{O}가 될 것입니다.

이는 타원 곡선의 임의의 점 (x,y)(x,y)를 골라도 division polynomial ψN(x) mod p\psi_N(x)\text{ mod }p가 0이 됨을 의미합니다. 즉, ψN(x) mod N\psi_N(x)\text{ mod }Npp의 배수입니다. 이를 계산할 수만 있다면 gcd(ψN(x),N)\gcd(\psi_N(x),N)을 계산하여 pp를 찾을 수 있을 것입니다.

논문의 Table 1에서는 공격에 사용할 수 있는 DD와 대응되는 jDj_D, 그리고 pp의 꼴을 소개합니다.

DD jDj_D The form of pp
33 00 4p1=3b24p-1=3b^2
1111 (25)3\left(-2^5\right)^3 4p1=11b24p-1=11b^2
1919 (253)3\left(-2^5\cdot 3\right)^3 4p1=19b24p-1=19b^2
4343 (2535)3\left(-2^5\cdot 3\cdot 5\right)^3 4p1=43b24p-1=43b^2
6767 (253511)3\left(-2^5\cdot 3\cdot 5\cdot 11\right)^3 4p1=67b24p-1=67b^2
163163 (26352329)3\left(-2^6\cdot 3\cdot 5\cdot 23\cdot 29\right)^3 4p1=163b24p-1=163b^2

Division polynomial의 값을 계산할 때, 단순히 앞서 소개한 점화식을 사용한다면 계산해야 하는 항의 수가 지수적으로 증가한다면 이를 계산할 수 없을 것입니다. 저자는 연속한 인덱스의 division polynomial의 값을 계산할 때 필요한 항의 수가 O(lgN)O(\lg N)개임을 보입니다.

Division polynomial에 대해 다음의 점화식이 성립합니다.

ψ4n+1=16(x3+Ax+B)ψ2n+2ψ2n3ψ2n1ψ2n+13,ψ4n+2=ψ2n+1(ψ2n+3ψ2n2ψ2n1ψ2n+22),ψ4n+3=ψ2n+3ψ2n+1316(x3+Ax+B)ψ2nψ2n+23,ψ4n+4=ψ2n+2(ψ2n+4ψ2n+12ψ2nψ2n+32).\begin{align*} \psi_{4n+1} &= 16(x^3 + Ax + B)\psi_{2n+2}\psi{2n}^3 - \psi_{2n-1}\psi_{2n+1}^3, \\ \psi_{4n+2} &= \psi_{2n+1} \left( \psi_{2n+3}\psi_{2n}^2 - \psi_{2n-1}\psi_{2n+2}^2 \right), \\ \psi_{4n+3} &= \psi_{2n+3}\psi_{2n+1}^3 - 16(x^3 + Ax + B)\psi_{2n}\psi_{2n+2}^3, \\ \psi_{4n+4} &= \psi_{2n+2} \left( \psi_{2n+4}\psi_{2n+1}^2 - \psi_{2n}\psi_{2n+3}^2 \right). \end{align*}

이를 조금 일반화하면 다음과 같이 연속한 j+1j+1개의 division polynomial을 계산하는데 필요한 division polynomial의 값을 찾을 수 있습니다.

ψi(x), ψi+1(x), , ψi+j(x)depend onψi/22, ψi/21, , ψ(i+j)/2+1, ψ(i+j)/2+2\psi_i(x),\ \psi_{i+1}(x),\ \cdots,\ \psi_{i+j}(x)\\ \text{depend on}\\ \psi_{\lceil i/2\rceil-2},\ \psi_{\lceil i/2\rceil-1},\ \cdots,\ \psi_{\lfloor(i+j)/2\rfloor+1},\ \psi_{\lfloor(i+j)/2\rfloor+2}

전자의 항 개수는 j+1j+1개, 후자의 항 개수는 5+(i+j)/2i/25+\lfloor(i+j)/2\rfloor-\lceil i/2\rceil개입니다. 이 변환은 j10j\ge 10이라면 항 개수가 줄어들고, 그렇지 않은 경우 항의 수가 10개 이하로 상한이 정해져 있습니다. 실제로 그래프를 그려서 성립함을 확인할 수 있습니다.

인덱스는 대략 절반씩 줄어들고 있고, 각 스텝에서 필요한 연속한 division polynomial의 개수 역시 상한이 존재하므로, 대략 O(lgn)O(\lg n)개의 division polynomial을 계산하게 됩니다.

Division polynomial의 값 역시 특정 x좌표에서 계산한 값을 NN으로 나눈 나머지만 계산한다면 무한정 발산하지 않으므로, 구하려는 division polynomial의 값을 O(lgN)O(\lg N)번의 ring operation으로 계산할 수 있습니다.

정리한 알고리즘의 의사코드입니다.

For each j in {j_D values in Table 1}:
    compute a:=j/(1728-j) mod N
    randomly choose B1 integers c_1,...,c_B1
    randomly choose B2 integers x_1,...,x_B2
    For each c in {c_1,...,c_B1}:
        For each x in {x_1,...,x_B2}:
            compute z:= Ψ_N(x) mod N
                of the elliptic curve y^2=x^3+3ac^2x+2ac^3
            compute gcd(z,n)
            If the gcd is non-trivial, output the result and exit
        End For
    End For
End For