이산로그 계산기 (BSGS)
gˣ ≡ h (mod p)의 x를 베이비스텝–자이언트스텝으로 찾습니다. 표를 단계별로 보이고, 전수 탐색과 걸음 수를 나란히 놓아 √p로 줄어드는 것을 확인할 수 있습니다.
3ˣ ≡ 13 (mod 17)
x = 4
검산: 3^4 mod 17 = 13입니다. 목표값과 같으므로 맞는 해로 추정됩니다.
베이비스텝 — g^j를 표에 담는다 (j = 0 … 3)
| j | g^j mod p | 맞은 자리 |
|---|---|---|
| 0 | 1 | ← j |
| 1 | 3 | |
| 2 | 9 | |
| 3 | 10 |
자이언트스텝 — h·(g^(−m))^i를 옮겨 가며 표에서 찾는다
| i | h·(g^(−m))^i | 표에 있나 |
|---|---|---|
| 0 | 13 | 없음 |
| 1 | 1 | 찾았다 |
i = 1, j = 0에서 만났습니다. x = i·m + j = 1×4 + 0 = 4이고, 위수 16으로 접으면 x = 4입니다.
계산 방법
- 1소수인 법 p를 넣습니다. 10억 이하까지 다룹니다.
- 2밑 g와 목표 h를 넣습니다. 둘 다 p의 배수가 아니어야 합니다.
- 3베이비스텝 표(g^j)와 자이언트스텝(h·(g^(−m))^i)이 어디서 만나는지 확인합니다.
- 4BSGS 걸음 수와 전수 탐색 걸음 수를 비교해 √로 줄어드는 정도를 봅니다.
자주 묻는 질문
gˣ ≡ h (mod p)를 만족하는 지수 x입니다. 보통의 로그가 실수에서 「몇 제곱해야 이 값이 되는가」를 묻는 것과 같은 물음을, 나머지 연산 위에서 묻는 것입니다. 답이 정수 하나로 정해지지만 구하기는 훨씬 어렵습니다.
x를 x = i·m + j로 두 자리로 쪼개기 때문입니다(m = ⌈√n⌉, n은 g의 위수). gˣ ≡ h를 옮기면 g^j ≡ h·(g^(−m))^i가 되는데, 왼쪽은 i와 무관하고 오른쪽은 j와 무관합니다. 왼쪽 m개를 표에 담아 두고 오른쪽을 옮겨 가며 찾으면 n번 탐색이 약 2√n 걸음으로 줄어듭니다.
있습니다. g가 만드는 부분군 ⟨g⟩ 밖에 h가 있으면 답이 없습니다. 예를 들어 p = 7, g = 2는 {1, 2, 4}만 만들기 때문에 h = 3에는 아무리 곱해도 도달하지 못합니다. g가 원시근(위수가 p−1)이면 모든 h에 해가 있습니다.
그렇습니다. g의 위수가 n이면 gⁿ ≡ 1이므로 x, x+n, x+2n … 이 모두 답입니다. 이 계산기는 가장 작은 음이 아닌 x를 내고, 「모든 해」 줄에 주기를 함께 보입니다.
거듭제곱은 쉬운데 그 역이 어렵다는 비대칭이 디피–헬만 키 교환과 DSA 서명의 근거이기 때문입니다. gˣ mod p는 제곱을 반복해 금방 구하지만, 그 결과에서 x를 되찾는 것은 알려진 방법으로도 대략 √p 이상 걸립니다. 실제 암호가 쓰는 2048비트 p에서는 √p조차 감당할 수 없는 크기입니다.
이 계산기가 g의 위수를 p−1의 약수로 찾아 표 크기를 정하기 때문입니다. 합성수 법에서는 곱셈군의 구조가 달라지고 g가 역원을 갖지 않을 수도 있어, 여기서는 소수만 받습니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 검증은 0부터 하나씩 곱해 보는 전수 탐색을 정답지로 삼아 했습니다. 71 이하의 모든 소수에서 가능한 (g, h) 조합을 빠짐없이 훑어 최소해까지 일치하는 것을 확인했습니다.
- 찾은 x를 실제로 거듭제곱해 h가 나오는지도 매번 검산해 화면에 함께 보입니다.
- 해가 없는 경우를 따로 고정했습니다. p = 7, g = 2는 {1, 2, 4}만 만들어 h = 3에 해가 없습니다. 이런 입력에서 답을 지어내지 않는지가 이 계산기의 중요한 성질입니다.
- g의 위수는 p−1을 소인수분해해 라그랑주 정리(위수는 p−1의 약수다)를 써서 찾습니다. 표 크기 m을 p가 아니라 위수로 잡아야 ⟨g⟩가 작을 때 표도 작아집니다.
- 법 p는 10억까지만 받습니다. 베이비스텝 표가 √p ≈ 3만 개까지 커지는데, 그보다 크면 브라우저 메모리로 감당하기 어렵습니다.
- 학습용입니다. 실제 암호 구현에는 쓰지 마세요. 여기서 다루는 크기의 p는 암호로서 안전하지 않습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.