(Ko) [Paper Review] Factoring with Cyclotomic polynomials
Intro
이전 글에서 특수한 상황에 적용할 수 있는 소인수분해 알고리즘에 관해 이야기했었습니다. 해당 글에서 다룬 Lenstra-ECM과 마찬가지로, 특수한 조건의 소인수분해 알고리즘은 대개 특정한 군(group)의 위수의 배수를 안다는 가정을 합니다. 이번 글에서는 이러한 아이디어의 근간이 되는 Pollard’s p−1 algorithm, Williams’s p+1 algorithm과 그 일반화인 Factoring with cyclotomic polynomials에 대해 다루어 보겠습니다.
Pollard’s p−1 algorithm
페르마 소정리에 기반한 알고리즘입니다. p−1의 배수 E를 알고 있다고 가정합니다. 페르마 소정리는 다음을 보장합니다.
ap−1≡1(modp)
이는 a가 p의 배수일 때 성립하지 않지만, 그러한 경우는 일반적으로 마주하기 어려우며 마주하더라도 N=pq와 a의 gcd가 1이 아닌지 확인하여 p를 복구할 수 있기 때문에 고려하지 않습니다. E는 p−1의 배수이므로, 다음이 성립합니다.
aE≡(ap−1)z≡1z≡1(modp)
즉 aE−1은 p의 배수이며, 이는 N으로 나눈 나머지에 대해서도 성립합니다. (aE−1)modN은 쉽게 계산할 수 있으므로, gcd((aE−1)modN,N)을 계산하여 p를 얻을 수 있습니다.
Williams’s p+1 algorithm
영문 위키피디아에서 정의하는 Williams’s p+1 algorithm을 알아봅시다. 이는 선형점화식을 활용합니다.
V0=2,V1=A,Vj=AVj−1−Vj−2
선형점화식은 전이행렬을 통해서도 표현할 수 있는데, 여기서는 다음과 같은 식으로 표현할 수 있습니다.
[VjVj−1]=[A1−10][Vj−1Vj−2]
귀납적으로 적용하면 다음과 같습니다.
[VjVj−1]=[A1−10]n[Vj−nVj−n−1]
이때 전이행렬의 특성다항식은 x2−Ax+1이며, 이는 A2−4가 mod p에서 이차잉여인지에 따라 대각화가 가능할 수도, 그렇지 않을 수도 있습니다.
(pA2−4)=1가 성립한다면 특성다항식의 두 근 α,β는 [A1−10]∼[α00β]을 만족합니다. α,β는 페르마 소정리에 따라 αp−1≡βp−1≡1(modp)을 만족하므로, 전이행렬의 multiplicative order는 p−1, 즉 수열의 주기도 p−1이 됩니다.
(pA2−4)=−1로 Fp에서 대각화가 불가능한 경우라도, Fp2에서는 대각화가 가능합니다. Fp2에서의 고유값 α,β는 서로 (Fp2≃Fp[D]라는 관점에서) 켤레이고, Frobenius map x↦xp에 대해 β=αp를 만족합니다.
이차방정식의 근과 계수의 관계로부터 1=αβ=αp+1이므로 α의 multiplicative order는 p+1의 약수입니다. 이는 β도 마찬가지이므로, 수열의 주기는 p+1의 약수가 됩니다.
즉 A2−4가 이차잉여가 아닌 A를 찾는다면 주기가 p+1의 약수인 수열을 얻을 수 있습니다. 이차잉여는 약 50% 존재하므로, 평균 2번 정도 시도하면 적절한 A를 찾을 것이라고 기대할 수 있습니다.
p+1의 배수인 E를 안다면, VE≡2(modp)라는 것을 알 수 있으므로 gcd(VE−2,N)을 계산하여 p를 계산할 수 있습니다.
Williams’s p+1 algorithm - alternative
직전 문단에서 설명한 알고리즘은 Pollard’s p−1 algorithm과 유사하다는 느낌은 잘 들지 않습니다. 본질적으로 군이지만, 수열을 사용하여 그 구조가 직관적으로 와닿지 않을 수 있기 때문일 것입니다. 이에 군에 집중한 방식의 Williams’s p+1 algorithm을 살펴보겠습니다.
t:=a+bd
x:=tˉ/t
u+vd:=xE
gcd(u−1,v,N)을 계산
d가 이차잉여가 아니라면 t∈Fp[d]≃Fp2이고, 따라서 Frobenius mapping에 의해 tˉ=tp이므로 x=tˉ/t=tp−1입니다. 즉, p+1의 배수 E에 대해 xE=tE(p−1)=(tp2−1)z=1z=1이 되므로, u=1,v=0이 됩니다. 따라서 gcd(u−1,v,N)은 p가 될 것이라고 기대할 수 있습니다.
Cyclotomic polynomials
위의 두 알고리즘을 관찰하면, 다음과 같은 조건을 만족해야 한다는 것을 알 수 있습니다.
위수의 배수를 아는 군을 선택할 것
선택한 군을 부분군으로 갖는 군을 공개된 정보만으로 구성할 수 있을 것
Pollard’s p−1 algorithm에서는 Fp를, Williams’s p+1 algorithm에서는 Fp2를 선택했다고 볼 수 있습니다. 각각 quotient polynomal ring과 isomorphic하므로 Z/⟨N,f⟩ 꼴의 군의 부분군이라 생각할 수 있습니다.
즉, 조금 더 일반화해보자면 Fpk× 꼴의 군이라면 이러한 방식의 공격에 활용할 수 있다는 것입니다.
여기서 cyclotomic polynomial이 등장합니다. 군 Fpk×의 위수는 pk−1입니다. 이때, xk−1 꼴의 다항식은 k 값에 따라 다양한 인수를 갖습니다. 이들은 각각 특정한 k′에 대해 xk′−1의 약수인 기약다항식인데, 그러한 다항식을 cyclotomic polynomial이라고 합니다.
Building a group
앞에서 확인했듯이 최종적으로 사용하고 싶은 것은 Fpk×입니다. 하지만 p는 우리가 구하려는 값이므로 Fpk를 직접 구성할 수는 없습니다. 임의의 k-degree 다항식 f(X)를 선택하여
(Z/NZ)[X]/(f(X))
를 구성할 수는 있지만, f(X)가 mod p에서 기약이라는 보장은 없습니다. 또한 이후에 필요한 Frobenius map x↦xp 역시 p를 모르는 상태에서는 직접 계산할 수 없습니다.
논문은 이를 해결하기 위해 Fpk를 직접 구성하는 대신, 공개된 값만으로 위수가 k인 automorphism을 갖는 ring을 먼저 구성합니다. 이후 이 ring을 mod p에서 바라보았을 때 일부가 Fpk가 되고, 구성해 둔 automorphism의 어떤 거듭제곱이 Frobenius map이 되기를 기대합니다. 여기서 Galois group은 field의 연산을 보존하면서 여러 근을 서로 바꾸는 automorphism들의 군 정도로 이해해도 충분합니다.
먼저 다음을 만족하는 auxiliary prime m을 선택합니다.
m≡1(modk)
ζm을 primitive m-th root of unity라고 하면 cyclotomic field Q(ζm)의 Galois group은 다음과 같습니다.
Gal(Q(ζm)/Q)≃(Z/mZ)×
m은 prime이므로 우변은 위수가 m−1인 cyclic group입니다. k∣m−1이므로 이 군에는 index가 k인 부분군 H가 존재하고, Galois correspondence에 따라 그 fixed field
Km=Q(ζm)H
은 degree가 k인 cyclic field가 됩니다. 따라서
Gal(Km/Q)≃Ck
이고, 위수가 k인 automorphism σ를 얻을 수 있습니다.
이 field는 Gaussian period를 사용하여 구체적으로 표현할 수 있습니다. g를 mod m의 primitive root라 하고 H를 (Z/mZ)×의 k-th power들로 이루어진 부분군이라 하면,
ηi=a∈H∑ζmgia,0≤i<k
를 정의할 수 있습니다. 이들은 서로 켤레이며, Galois group의 generator는 다음과 같이 작용합니다.
σ(ηi)=ηi+1modk
즉 period basis {η0,…,ηk−1}를 사용하면 σ는 단순한 cyclic shift로 구현됩니다.
Km의 ring of integers를 Om이라 하고 이를 mod N으로 내리면 실제 계산에 사용할 ring을 얻습니다.
Rm=Om/NOm
Rm의 element는 period basis에 대한 k개의 계수로 저장할 수 있으며, 각 계수는 mod N의 정수입니다. multiplication은 미리 계산한 multiplication table로 수행하고, σ는 계수들을 한 칸씩 순환시키는 linear transformation으로 수행합니다. Gaussian period η0의 minimal polynomial fm(X)를 사용하여 좀 더 익숙한 형태로 표현할 수도 있습니다.
Rm≃(Z/NZ)[X]/(fm(X))
이 경우 σ는 power basis 위의 k×k matrix로 구현됩니다.
이제 N=pq라고 하면 중국인의 나머지 정리에 의해
Rm≃Om/pOm×Om/qOm
으로 생각할 수 있습니다. 선택한 m에 대해 fm(X)가 mod p에서 기약이라면 첫 번째 component는 다음과 같이 됩니다.
Om/pOm≃Fpk
또한 σ를 mod p에서 본 automorphism은 Gal(Fpk/Fp)의 generator가 됩니다. 이 Galois group의 generator들은 Frobenius map의 거듭제곱이므로, 어떤 i에 대해서는
τ=σi,gcd(i,k)=1
가 정확히 x↦xp로 작용합니다. 어떤 i가 이에 해당하는지는 알 수 없으므로, 알고리즘에서는 gcd(i,k)=1인 i를 모두 시도합니다.
이 automorphism을 사용하면 Φk(p)의 배수를 pk−1의 배수로 바꿀 수 있습니다. 다음과 같이 정의합시다.
Ψk(X)=Φk(X)Xk−1
그리고 다항식
A(X)=a0+a1X+⋯+adXd
과 automorphism τ에 대해 symbolic exponent를 다음과 같이 정의합니다.
zA(τ)=za0τ(z)a1⋯τd(z)ad
mod p에서 τ가 Frobenius map이라면 τj(z)=zpj이므로,
zA(τ)≡zA(p)(modp)
가 됩니다.
이제 Φk(p)의 배수 E가 주어졌다고 하고, random unit t∈Rm에 대해 x=tE를 계산합니다. 올바른 τ를 선택했다면
xΨk(τ)≡xΨk(p)=tEΨk(p)≡1(modp)
가 성립합니다. 실제로 E=zΦk(p)이므로
EΨk(p)=zΦk(p)Ψk(p)=z(pk−1)
입니다.
마지막으로 y=xΨk(τ)와 1을 같은 basis로 표현합니다.
y=j=0∑k−1yjβj,1=j=0∑k−1cjβj
그러면 올바른 p-component에서는 모든 cj−yj가 p의 배수가 됩니다. 반면 다른 인수 q에 대해서는 일반적으로 이 관계가 성립하지 않으므로,
gcd(N,c0−y0,…,ck−1−yk−1)
을 계산하여 p를 얻을 수 있습니다.
모든 auxiliary prime m이 원하는 성질을 갖는 것은 아니므로, 알고리즘은 m≡1(modk)인 prime들을 바꾸어 가며 같은 과정을 반복합니다. 논문은 Chebotarev density theorem을 사용하여 이러한 m이 충분히 자주 존재함을 보입니다. 즉 이 construction은 Φk(p) 위수의 군을 직접 만드는 방식이 아니라, 공개된 정보만으로 계산 가능한 군을 만들고 mod p에서 그 action이 Frobenius map이 되는 경우를 찾는 방식으로 동작합니다.
Outro
다음 글에서는 Factoring with Cyclotomic polynomials의 아이디어를 활용하는, 특수 케이스에서의 최적화를 소개하겠습니다.