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 를 갖는다.

거꾸로 ‘때려 맞히기’를 통한 풀이를 막기 위해서는 pp, qq 는 둘 다 가능한 한 큰 게 좋다. 가령 N1=347=141N2=1113=143 N_{1}=3 \cdot 47=141 \\ N_{2}=11 \cdot 13=143 이 있다고 치면 공개되었을 때는 22 밖에 차이가 나지 않지만 N1N_{1} 은 ‘노가다’를 시작하자마자 풀리게 된다.

  • 그러나 이런 일차원적인 이유에서 크기가 비슷한 pp, qq 을 쓴다면 이차원적인 생각을 하는 공격자에게 뚫릴 수 밖에 없다. 단순하게 생각해서 정말 pqp \approx q 라면 공격자는 Np2N \approx p^2 이라 가정하고 N\sqrt{N} 의 근방으로 솔루션의 후보를 크게 줄일 수 있다. 이런 아이디어에서 수학적인 기교를 발휘하면 N=pqN=pq 는 아주 쉬운 문제가 되어버린다.

증명

(i)

pp스무스한 소수면 폴라드 p1p-1 소인수분해 알고리즘을 사용할 수 있으므로 준소수의 소인수분해 문제가 비교적 쉽게 풀릴 수 있다.

(ii)

p:=a+bp := a + b, q:=abq := a - b 이라고 두면 pp, qqaa 를 가운데로 ±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 + b, q=abq = a - b 가 무엇인지 알 수 있어 준소수의 소인수분해 문제가 비교적 쉽게 풀릴 수 있다.

예시

예로써 N=25217N = 25217 을 생각해보자. NN 을 곧이곧대로 소인수분해하는 것은 만만하지 않은 일이지만, 25217+82=159225217 + 8^2 = 159^2 임을 알고나면 a=159a = 159, b=8b = 8 이므로 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 를 찾는다.


Step 1. cic_{i}

계산약수가 적은 수 cic_{i} 들에 대해서 ciai2(modp)c_{i} \equiv a_{i}^{2} \pmod{p} 를 만족시키도록 하는 a1,,ara_{1} , \cdots , a_{r} 들을 찾아두자.


Step 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}} 들을 찾는다.


Step 3. d=gcd(N,ab)d = \gcd \left( N , a-b \right)

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*} 이렇게 구한 aa, bb 를 통해 d=gcd(N,ab)d = \gcd \left( N , a-b \right) 를 계산하면 ddNN약수 qq 다.

같이보기

소인수분해 문제의 어려움을 이용한 보안 알고리즘

소인수분해 문제에 대한 공격 알고리즘


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