주식회사 누리아이티

정보자산의 보안강화를 위한 다계층 인증SW (BaroPAM) 전문기업.

▶ BaroSolution/기술문서

인증서버 방식의 TOTP에 대한 Secret 값의 유출 가능성에 대한 방안

누리아이티 2025. 12. 23. 09:38

TOTP는 'Time-based One-Time Password'로 일회용 비밀번호의 한 종류로, 시간에 기반한 동적 인증을 제공하는 방식이다.

TOTP는 고유하고 시간에 민감한 코드를 생성하는 특정 유형의 OTP 이다. 

인증 서버와 사용자 장치(일반적으로 인증 앱) 간의 공유 비밀 키와 현재 시 간을 기반으로 한다.

TOTP는 시간 기반 특성과 인증 앱의 편리함으로 인해 향상된 보안 을 제공하는 보다 구체적이고 점점 더 대중적인 유형의 OTP로, 누군가가 "OTP 앱" 또는 인증 앱에서 생성된 시간 제한 코드를 언급할 때, 그것은 매우 높은 확률로 TOTP를 의미한다.

한편, 인터넷 보안표준인 IETF RFC 6238는 국제 인터넷 표준화 기구(IETF) 표준으로, 현재 많은 웹사이트에서 사용하고 있는 TOTP 방식이다. 

RFC 6238은 HMAC-SHA 기반 알고리즘으로, HOTP(HMAC 기반 OTP, RFC 4226)의 확장으로 본다. 

RFC 4226은 Counter 값이 있어 횟수를 기반으로 하는 알고리즘이지만, RFC 6238은 시간을 고유한 값으로 사용한다는 차이점이다.

TOTP의 기반이 되는 알고리즘으로서 HMAC-SHA 값을 TOTP 값으 로 변환하는 Truncate() 함수와 Secret 값인 K, 시간 값인 T(국제표준시간, UTC), 해쉬함수  값인  C(HMAC-SHA1,  HMAC-SHA256,  HMAC-SHA384, HMAC-SHA512)로 구성된 TOTP는 다음과 같이 정의된다.

TOTP = Truncate(K, T, C)

그러나 TOTP를 구현하기 위해서는 몇 가지 조건이 필요한데, 위 식의 T값 2을 구하기 위해 증명자(OTP를 입력하는 사람)와 검증자(OTP를 검증하는 사람) 모 두가 시간을 알고 있어야 한다. 

또한 동일한 K값인 Secret 값을 서로 가지고 있어야 한다.

현재 사용하고 있는 TOTP는 K값인 Secret 값의 유출 가능성으로, TOTP 생성의 매개변수가 되는 Secret 값이 유출되면 제3자가 OTP를 알아내 2단계 인증 이 무력화될 수 있다. 

현재 사용하고 있는 구글OTP를 포함한 인증서버 방식의 TOTP를 인증기에 등록할 때 QR코드를 스캔하거나 Secret 문자열을 입력하는데, 이것이 안전한 방법으로 전달되는 것이 아니라 보통은 웹 페이지에 그대로 출력하는 방식이기 때문에 유출의 위험이 있다고 볼 수 있다. 

더군다나 이 값을 토대로 OTP를 생성하기 때문에 Secret 값을 암호화하여 제공하는 것은 불가능하다.

따라서 해당 Secret 문자열 내지는 QR코드를 가지고 있는 한 인증기에 무한 정 등록할 수 있다는 것이다.

물론 RFC 6238 표준에서는 하나의 Secret은 하나의 기기에만 등록해야 한다고 하고 있지만, 그것을 강제할 방법이 없다는 것이 문제다.

다계층 인증 체계(Multi-layer authentication system)를 지원하는 BaroPAM은 악의의 제3자가 고정된 Secret 값을 부정하게 사용할 수 없도록 원천 차단하기 위하여 Secret 값 자체를 OTP를 생성하기 전과 검증하기 전에 동적으로 Secret 값을 생성하여 사용하고 있다.