합동방정식의 거듭제곱근
📂정수론합동방정식의 거듭제곱근
알고리즘
자연수 b,k,m 가 gcd(b,m)=gcd(k,ϕ(m))=1 을 만족하면 합동방정식 xk≡b(modm) 의 해 x 는 다음과 같이 계산할 수 있다.
Step 1.
ϕ(m) 을 계산한다.
Step 2.
ku−ϕ(m)v=1 을 만족하는 u,v 을 찾고 양변에 u 승을 취해 xku≡bu(modm) 를 얻는다.
Step 3.
bu(modm) 을 연속제곱법으로 계산한다.
설명
ϕ 는 토션트 함수로, 곱셈적 성질을 가져 m 의 소인수분해가 핵심이다.
알려져있듯 소인수분해엔 딱히 왕도가 없어서 무척 어려운데, 무지막지하게 큰 소수 p,q 가 존재해서 m=pq 이라고 한다면 x:=ϕ(m) 을 구하는 것부터가 힘들다. 언뜻 이것은 단점으로 보이지만, 오히려 이를 이용하면 x 를 암호처럼 사용할 수 있게 된다. k 와 m 이 공개되어 있어도 m 의 소인수분해를 모르면 x 를 계산 하는 것이 몹시 어렵다. 따라서 x 를 알 자격이 있는 사람만 m 의 소인수분해를 안다면 훌륭한 암호 체계가 된다. 이러한 암호 체계를 RSA 암호라고 한다.
이 알고리즘은 아주 큰 소수를 찾는 일이 실용적 가치를 가진다는 것을 말해준다.
증명
ku−ϕ(m)v=1 을 만족하는 정수해 u,v 의 존재성은 보장되어있고, ku=ϕ(m)v+1 이므로
xku≡xϕ(m)v+1(modm)
오일러의 토션트 정리: gcd(x,m)=1⟹xϕ(m)≡1(modm)
xϕ(m)v+1≡x1=bu(modm) 이므로, bu 만 계산하면 된다. 여기서 조건인 gcd(x,m)=1 을 만족하진 않았지만, 이렇게 구해진 x 는 주어진 합동방정식의 해로써 전혀 문제가 없다.
xk=(bu)k=buk=b1+ϕ(m)v=b⋅bϕ(m)v
인데, gcd(b,m)=1 을 가정했으므로 다음이 성립한다.
xk≡b(modm)
■