이산 로그를 360도 회전으로 풀다
본 논문은 정수 모듈러 p의 순환군에서 이산 로그 문제를 “360도 원호에 투사”한다는 아이디어를 도입하고, 중첩된 세 개의 반복문을 이용해 최악의 시간 복잡도를 O(n³)라고 주장한다. 그러나 제시된 알고리즘은 본질적으로 전통적인 브루트포스 방식과 동일하며, 정확도와 복잡도 분석에 심각한 결함이 있다.
저자: ** *논문에 저자 정보가 명시되어 있지 않음.* **
본 논문은 2009년에 발표된 “Computing a Discrete Logarithm in O(n³)”라는 제목의 연구로, 정수 모듈러 p의 순환군 Zₚ에서 이산 로그 문제를 해결하기 위한 새로운 알고리즘을 제시한다. 저자는 이산 로그를 “두 개의 주기함수의 동시 영점 찾기” 문제로 환원하고, 이를 360° 원호에 투사함으로써 실수 영역에서 연산을 수행한다는 아이디어를 제시한다. 구체적으로, p를 360으로 나눈 비율 360/p를 각도 단위로 정의하고, 군 원소 x와 y를 각각 x·(360/p), y·(360/p)라는 실수 각도로 변환한다. 이후 x의 거듭제곱을 반복적으로 더하는 방식으로 k를 찾으며, 각 단계마다 360°를 초과하면 360을 빼는 모듈러 연산을 수행한다.
논문은 이 과정을 세 개의 중첩 루프(외부 for, 내부 for, while)로 구현하고, 최악의 경우 시간 복잡도가 O(n³)라고 주장한다. 여기서 n은 군의 원소 수, 즉 p와 동일하다고 가정한다. 저자는 이 알고리즘이 덧셈·뺄셈만을 사용하므로 기존의 곱셈 기반 알고리즘보다 효율적이라고 주장하고, 실수 기반 구현에서는 부동소수점 오차를 작은 허용값으로 조정하면 정확한 결과를 얻을 수 있다고 설명한다.
하지만 논문의 핵심 아이디어와 구현에는 여러 문제점이 존재한다. 첫째, 360° 원호에의 매핑은 군 동형사상이 아니며, 곱셈 연산을 각도 덧셈으로 바꾸는 과정에서 군 구조가 보존되지 않는다. 이는 이산 로그의 정의와 직접적인 연관성을 상실하게 만든다. 둘째, 제시된 알고리즘은 사실상 x를 k번 더하는 방식으로, 각 반복마다 O(k) 연산을 수행한다. 외부 루프가 p번, 내부 루프가 x번, while 루프가 추가로 p번 정도 실행되므로 전체 복잡도는 O(p²) 혹은 O(p³) 수준이며, 논문이 주장하는 O(n³)와는 차이가 있다. 특히 기존의 폴라드-홀러, 베이비‑스텝‑거인‑스텝 등은 O(√p) 혹은 O(p^{1/4})와 같은 서브지수적 복잡도를 제공하는데 비해, 이 논문의 방법은 전통적인 완전 탐색과 동등하거나 더 비효율적이다.
실수 기반 구현에서는 부동소수점 오차가 누적될 위험이 크다. 논문은 허용 오차를 1e‑10으로 설정했지만, p가 커질수록 각도 변환값이 작아지고 오차 비율이 급증한다. 따라서 정확한 k 값을 보장하기 어렵다. 정수 기반 구현 역시 동일한 논리를 따르지만, 여전히 x를 반복적으로 더하는 방식이므로 효율성이 떨어진다.
복잡도 분석에서도 저자는 n을 p와 동일하게 두고 O(n²)·O(n³)이라고 서술하지만, 실제 입력 크기는 비트 길이(log₂p)이며, 이와 같은 다항식 복잡도는 현재 알려진 이산 로그의 난이도와 모순된다. 또한 논문은 기존 알고리즘에 대한 문헌 검토가 거의 없으며, 참고문헌은 일반적인 위키피디아 페이지와 교과서 수준에 머물러 있다.
결론적으로, 이 논문은 새로운 시각을 제시하려 했지만, 수학적 엄밀성, 알고리즘 설계, 복잡도 증명 모두에서 근본적인 오류가 있다. 제안된 방법은 실용적인 이산 로그 해결책이 아니며, 현재 암호학에서 요구되는 다항식 시간 알고리즘을 제공하지 못한다.
원본 논문
고화질 논문을 불러오는 중입니다...
댓글 및 학술 토론
Loading comments...
의견 남기기