(Ko) Factoring with Cyclotomic polynomials - indices with a single prime factor
이전 글에서는 cyclotomic polynomial에 관한 정보를 알 때 소인수분해를 빠르게 할 수 있는, 일반적인 알고리즘에 대해 이야기했었습니다.
그러니까, N의 소인수 p에 대해 Φn(p)의 배수를 안다면 Φn(p)를 위수로 갖는 특정한 군을 생성해 p에 대한 정보를 추출할 수 있다는 것이었죠.
해당 논문에서는 Frobenius trace가 automorphism group을 생성한다는 사실을 이용해 generator를 완전탐색하여 맞는 케이스를 항상 순회하도록 구성한 알고리즘이었습니다.
이는 다소 복잡하고 일반적인 케이스를 설명하며, 구현하기가 다소 어려운 알고리즘입니다. 이번 글에서는 n이 특정한 조건을 만족할 때 간단한 군을 만들어 factoring with cyclotomic polynomial을 쉽게 구현할 수 있는 방법을 살펴보겠습니다.
n이 소수라면
n이 소수라면 Φn(x)=xn−1+xn−2+⋯+1=x−1xn−1입니다. 자연스럽게 다음과 같은 군을 생각해볼 수 있습니다.
G=Fℓr×/Fℓ×
∣G∣는 Φn(ℓ)이 된다는 것을 쉽게 확인할 수 있습니다. 문제는 G를 어떻게 구현하는가지만, 이는 G를 구현하지 않으면 해결됩니다. 바로, 다음의 H를 사용하는 것입니다.
H=Fℓn×
H의 임의의 원소 x에 대해, Φn(ℓ) 거듭제곱을 계산하면, ∣H∣=(ℓ−1)Φn(ℓ)이므로 xΦn(ℓ)은 크기 (ℓ−1)의 부분군에 위치하게 됩니다. 즉, y=xΦn(ℓ)는 yℓ=y를 만족하고, 이는 Frobenius mapping의 고정점이라는 것을 의미합니다. H에서 Frobenius mapping의 고정점은 Fℓ의 원소뿐이므로, H를 n차 기약다항식 f에 대해 (Fℓ[α]/f(α))×로 인지한다면, 상수항을 제외한 항의 계수가 전부 0임을 의미합니다.
따라서, 실제로는 다음과 같은 군을 사용합니다.
H′=(Z/NZ)[α]/f(α)
이는 공개된 정보만으로 완전히 계산 가능하며, H를 포함합니다. 임의의 원소를 고르고 Φn(p) 거듭제곱하였을 때 H에서는 상수항이 아닌 항의 계수가 0이 되므로, H′에서도 상수항이 아닌 항의 계수가 ℓ의 배수가 됩니다.
무작위한 monic polynomial이 기약 다항식일 확률은 대략 n에 반비례하므로, 평균 n회 시도하여 얻을 수 있습니다. 대부분의 경우 n은 그리 크지 않으므로 충분히 반복할만한 횟수입니다.