DIGIPASS GO3 OTP 보안 취약점 분석
초록
본 논문은 DIGIPASS GO3 토큰이 생성하는 6자리 일회용 비밀번호(OTP)의 패턴을 실험적으로 분석하고, 왼쪽 첫 자리의 동기화 메커니즘과 뒤쪽 5자리의 비균등 분포를 규명한다. 이를 바탕으로 첫 자리 예측이 거의 확정적이며, 나머지 5자리는 0‑5가 1/8, 6‑9가 1/16 확률로 나타나는 사실을 발견한다. 이러한 구조적 약점을 이용해 5자리만 임의 선택하고 첫 자리를 추정하면 성공 확률이 8⁻⁵(≈1/32768)인 위조 공격이 가능함을 제시한다. 은행·기업 수준에서 10⁴명의 사용자를 가정하면 연간 100건 이상의 계정이 탈취될 위험이 있음을 경고한다.
상세 분석
논문은 DIGIPASS GO3 토큰이 내부적으로 시간‑기반 동기화 카운터와 비밀키 기반 암호화 함수를 결합해 OTP를 생성한다는 가설을 세우고, 실제 토큰을 여러 차례 눌러 얻은 6자리 코드를 정밀히 기록하였다. 실험 결과, 첫 번째 자리(a)는 순수히 시간 간격에 따라 변동한다. 구체적으로 토큰은 64초를 하나의 “시간 단계”로 정의하고, 두 OTP 사이의 실제 경과 시간 t가 64·A ± 64 구간에 있을 때 a는 이전 값에 A 혹은 A ± 1을 더한 값(mod 10)으로 변한다. 즉, t≈64·A 초이면 a는 거의 확정적으로 A(mod 10)만큼 증가한다. 이 메커니즘은 f(tₗ,tₖ)라는 함수로 수식화되며, f는 각 구간에서 h − 1 또는 h(=⌊Δt/64⌋) 두 값을 가질 수 있다.
두 번째부터 여섯 번째 자리(b‑f)는 20비트 난수 스트림을 4비트씩 끊어 10진수로 변환한 결과이다. 4비트는 0‑15의 균등 분포를 가지므로, 이를 10으로 나눈 나머지는 0‑5가 1/8, 6‑9가 1/16의 확률을 갖는다. 실험 데이터(표 3)와 이론적 기대값이 일치함을 확인하였다. 따라서 뒤쪽 5자리는 완전한 무작위가 아니며, 실제로 절반에 가까운 확률로 0‑5 중 하나가 선택된다.
이러한 구조적 특성을 이용해 공격자는 다음과 같은 절차로 위조 OTP를 만든다. ① 현재 시간 t′(또는 추정된 시간)으로부터 첫 자리 a를 추정한다. ② 뒤쪽 5자리를 0‑5 범위에서 임의로 선택한다(각 자리 1/8 확률). ③ 완성된 6자리 OTP를 서버에 전송한다. 서버는 첫 자리와 암호화된 5자리 부분을 검증하는데, 첫 자리는 동기화용이므로 보안에 기여하지 않는다. 따라서 성공 확률은 (1/8)⁵ = 8⁻⁵ ≈ 3.05 × 10⁻⁵, 즉 10⁻⁶보다 약 30배 높다.
논문은 또한 서버 측 검증 프로토콜을 재구성한다. 서버는 토큰이 생성한 시각 t와 수신 시각 t′ 사이의 지연이 480초 이하일 경우, f(t,t₀)를 역산해 A값을 복원하고, 비밀키 K로 암호화된 5자리 X를 재계산한다. 이 과정에서 첫 자리 a는 단순히 A mod 10이므로, 공격자는 a를 정확히 맞출 필요가 없으며, 오히려 서버가 허용하는 시간 창 내에서만 t를 추정하면 된다.
마지막으로, 은행 규모(고객 2.3 백만 명)와 평균 로그인 빈도 등을 가정해 시뮬레이션을 수행했으며, 10⁴명의 고객을 가진 중소 규모 기업에서도 연간 100건 이상의 계정 탈취가 현실적으로 가능함을 제시한다. 이는 OTP 기반 2단계 인증이 “동기화용 첫 자리”와 “비균등 난수”라는 설계 결함으로 인해 기대보다 훨씬 낮은 보안 수준을 제공한다는 중요한 교훈을 남긴다.
댓글 및 학술 토론
Loading comments...
의견 남기기