조건 (ii)의 의미는 p 와 q 의 차이가 적을 때 쉽게 풀린다는 것인데, 이에 대해서는 설명이 필요할 것이다:
언뜻 생각해보았을 때 p,q∈N 에 대해 (p+q) 가 제한되어있다면 N=pq 를 가장 크게 만드는 방법은 가능한 한 p 와 q 의 차가 크지 않게 하는 것이다. 가령 p+q≤12 이라면 pq 는 7=p≈q=5 일 때 최대값 35 를 갖는다.
거꾸로 ‘때려 맞히기’를 통한 풀이를 막기 위해서는 p, q 는 둘 다 가능한 한 큰 게 좋다. 가령
N1=3⋅47=141N2=11⋅13=143
이 있다고 치면 공개되었을 때는 2 밖에 차이가 나지 않지만 N1 은 ‘노가다’를 시작하자마자 풀리게 된다.
그러나 이런 일차원적인 이유에서 크기가 비슷한 p, q 을 쓴다면 이차원적인 생각을 하는 공격자에게 뚫릴 수 밖에 없다. 단순하게 생각해서 정말 p≈q 라면 공격자는 N≈p2 이라 가정하고 N 의 근방으로 솔루션의 후보를 크게 줄일 수 있다. 이런 아이디어에서 수학적인 기교를 발휘하면 N=pq 는 아주 쉬운 문제가 되어버린다.
증명
(i)
p 가 스무스한 소수면 폴라드 p−1 소인수분해 알고리즘을 사용할 수 있으므로 준소수의 소인수분해 문제가 비교적 쉽게 풀릴 수 있다.
■
(ii)
p:=a+b, q:=a−b 이라고 두면 p, q 는 a 를 가운데로 ±b 만큼 떨어진 소수가 된다. 이를 N 에 대해서 나타내보면
N==(a+b)(a−b)a2−b2
즉 N+b2=a2 이다. 따라서 N 에 b 를 1 씩 증가시켜가며 (N+b2) 가 제곱수가 되면 p=a+b, q=a−b 가 무엇인지 알 수 있어 준소수의 소인수분해 문제가 비교적 쉽게 풀릴 수 있다.
■
예시
예로써 N=25217 을 생각해보자. N 을 곧이곧대로 소인수분해하는 것은 만만하지 않은 일이지만, 25217+82=1592 임을 알고나면 a=159, b=8 이므로
p=q=159+8=167159−8=151
을 바로 구할 수 있다. 글의 맥락에 따라 말해보자면 167≈151 이기 때문에 쉽게 풀려버린 것이다.
한편 이 b 를 찾는 걸 더 지혜롭게 해보자. 어떤 k 에 대해서
kN=a2−b2
이라고 하면 (a+b) 와 (a−b) 는 k 의 배수이므로 양변을 k 로 나누기만 하면 N 에 대한 식을 그대로 얻을 수 있다. 이렇게 번거로운 짓을 하는 이유는 이 식을 다음과 같이 나타낼 수 있기 때문이다.
a2≡b2(modN)
이후는 다음과 같은 방법으로 d=q 를 찾는다.
Step 1. ci
계산약수가 적은 수 ci 들에 대해서 ci≡ai2(modp) 를 만족시키도록 하는 a1,⋯,ar 들을 찾아두자.
Step 2. b2 계산
ai1⋯ais=aci1⋯cis=b2
를 만족하는 ci1,⋯,cis 들을 찾는다.
Step 3. d=gcd(N,a−b)
a2≡(ai1⋯ais)2≡ai12⋯ais2≡ci1⋯cis≡b2
이렇게 구한 a, b 를 통해 d=gcd(N,a−b) 를 계산하면 d 는 N 의 약수q 다.