문제
소수 \(p\)(또는 일반 법 \(m\))에서
$$ a^x \equiv b \pmod{p} $$
를 만족하는 가장 작은 비음 정수 \(x\)를 찾는 것이 이산 로그(discrete logarithm) 문제다. 지수 \(x\)가 미지수라는 점에서 거듭제곱(\(a^x\) 계산)과 정반대 방향이다.
이 문제의 어려움 이 Diffie–Hellman, ElGamal 등 공개키 암호의 기반이다. 하지만 경시 범위의 \(p\)(\(\le 10^{18}\) 또는 그 이하)에서는 \(O(\sqrt p)\) 알고리즘으로 풀 수 있다.
Baby-step Giant-step (BSGS)
\(x = i \cdot n - j\)로 쓰자. 여기서 \(n = \lceil \sqrt{p} \rceil\), \(0 \le j < n\), \(1 \le i \le n\). 그러면
$$ a^{in - j} \equiv b \;\Longleftrightarrow\; a^{in} \equiv b \cdot a^{j} \pmod p. $$
(또는 \(x = in + j\) 변형도 흔하다. 부호 규약만 일관되면 된다.)
전략:
- Baby steps: \(j = 0, 1, \dots, n-1\)에 대해 \(b \cdot a^j \bmod p\)를 모두 해시맵에 저장.
- Giant steps: \(i = 1, 2, \dots, n\)에 대해 \(a^{in} \bmod p\)를 계산하며, 해시맵에 같은 값이 있으면 매칭. 그때 \(x = in - j\).
각 단계가 \(O(\sqrt p)\), 맵 조회 \(O(1)\) 평균. 총 \(O(\sqrt p)\) 시간/공간.
정당성
답 \(x\)가 존재하면 \(0 \le x < \text{ord}(a) \le p-1\)이므로 \(x = in - j\) 형태로 \(i \in [1, n], j \in [0, n)\) 범위에서 반드시 표현된다(\(n^2 \ge p\)). 따라서 두 단계의 어딘가에서 충돌이 일어난다. 가장 작은 \(x\)는 \(i\)를 오름차순으로 보며 첫 매칭에서 얻는다(같은 \(i\) 내에선 큰 \(j\) = 작은 \(x\) 주의 — 규약에 맞게 정리).
\(\gcd(a, p) \ne 1\) 일반화
\(a\)와 법 \(m\)이 서로소가 아니면 \(a\)가 가역이 아니라 위 변형이 깨진다. 공통 인수를 단계적으로 제거한다.
반복: \(g = \gcd(a, m)\). \(g \nmid b\)이고 \(b \ne 1\)이면 해 없음. \(g \mid b\)이면
$$ \frac{a}{g} \cdot a^{x-1} \equiv \frac{b}{g} \pmod{\frac{m}{g}} $$
로 줄이고 \(x\)를 1 줄인 부분 문제를 푼다. 이 "제거 후 BSGS"가 확장 BSGS.
복잡도
| 항목 | 비용 |
|---|---|
| 시간 | \(O(\sqrt m \log m)\) (맵/거듭제곱 포함) |
| 공간 | \(O(\sqrt m)\) |
지수가 매우 큰 군(암호 수준)에선 비현실적이지만, 경시 \(m\)에선 충분히 빠르다. 다음 강의에서 구현과 확장.