OTP 인증 방식과 시간·이벤트 기반 일회용 비밀번호

OTP의 일회성 인증 원리와 Challenge-Response, 시간·이벤트 동기화 방식, TOTP·HOTP 표준 및 운영 시 고려사항을 정리한다.

2026-08-14 · 최초 발행 2025-05-23

재사용되는 비밀번호를 대체하는 OTP

정적 패스워드는 가장 기본적인 인증 수단이지만, 한 번 확보한 값이 재사용 공격에 쓰일 수 있다. OTP(One Time Password)는 인증할 때마다 새 비밀번호를 생성하고, 이미 사용되거나 탈취된 값이 다음 인증에 다시 쓰이지 않도록 하는 인증 메커니즘이다.

이 방식은 재사용 공격, 키로깅, 피싱 위험을 줄이고 무차별 대입 공격에 대한 방어력을 높인다. 생성된 비밀번호는 한 번의 인증 세션에만 유효하며, 암호학적으로 안전한 알고리즘을 사용해 다음 값을 예측하거나 이전 값에서 후속 값을 유추하기 어렵게 만든다. 대부분의 OTP에는 시간 제한도 적용되며, 보통 30초~1분 동안만 유효하다.

비밀키와 시간 또는 카운터로 만드는 값

OTP는 사용자별 비밀키에 시간값이나 카운터값을 결합한 뒤 해시 함수를 적용해 만든다. 생성된 해시값은 6~8자리 숫자로 변환되고, 사용자가 전송한 값은 인증 서버가 검증한다.

사용자 비밀키OTP 생성기시퀀스·카운터·시간값해시함수 적용OTP 생성인증 서버 검증

인증 기준에 따라 달라지는 방식

Challenge-Response

서버가 난수값인 챌린지를 전달하면, 사용자는 챌린지와 자신의 비밀키를 조합해 OTP를 생성한다. 서버도 같은 방식으로 계산한 뒤 전달받은 값과 비교한다.

ServerClientServerClient인증 요청챌린지(난수값) 전송비밀키와 챌린지로 OTP 생성OTP 값 전송동일 연산으로 OTP 검증인증 결과 전송

시간 동기화 방식

시간 동기화 방식은 서버와 클라이언트가 같은 시간을 기준으로 OTP를 계산한다. 현재 시간값과 비밀키를 결합하며, 현재 시간은 보통 UNIX 타임스탬프의 30초 단위를 사용한다. Google Authenticator와 Microsoft Authenticator가 대표적인 예다.

시간이 기준인 만큼 서버와 클라이언트 사이에 시간 불일치가 생길 수 있다. 이를 다루기 위해 일정 범위의 오차를 허용한다.

현재 시간값HMAC 알고리즘사용자 비밀키해시값 생성6-8자리 숫자 변환OTP 완성

이벤트 동기화 방식

이벤트 동기화 방식은 카운터값을 기준으로 OTP를 생성한다. 인증을 시도할 때마다 카운터는 +1 증가하며, 서버와 클라이언트는 이 값을 동기화해야 한다. 일부 하드웨어 토큰인 RSA SecurID 등에서 사용된다.

시간 동기화 문제는 없지만 카운터 동기화가 어긋나면 재설정이 필요하다.

ServerClientServerClient초기 카운터 값: N인증 성공 시 양쪽 모두 카운터++인증 요청 (카운터 값 N 기반 OTP)카운터 값 N~N+W 범위에서 검증인증 결과

시간과 이벤트를 함께 쓰는 방식

시간 동기화와 이벤트 동기화를 혼합해 시간값과 카운터값을 모두 활용할 수 있다. 구현 복잡성은 커지지만 높은 보안성을 제공하며, 금융권처럼 높은 보안이 요구되는 분야에서 활용된다.

OTP를 제공하는 매체

모바일 앱 OTP는 스마트폰 앱에서 값을 생성하는 형태다. Google Authenticator, Microsoft Authenticator, 금융기관 앱 등이 여기에 속하며, 별도 장치 없이 사용할 수 있어 편의성과 접근성이 높다.

USIM 기반 OTP는 통신사 USIM 카드에 OTP 생성 기능을 넣는 방식이다. SIM 카드의 하드웨어 보안을 활용해 모바일 앱보다 보안성을 높이고, 단말기를 바꿀 때 인증 정보를 옮기기 쉽다. 다만 통신사 의존성 때문에 서비스가 제한될 가능성이 있다.

하드웨어 토큰 OTP는 카드형이나 키 체인형 장치에서 값을 생성한다. 전자 기기 해킹에 강한 물리적 분리 보안을 제공하지만, 분실 위험과 추가 비용이 따른다.

생체인증과 OTP를 결합하면 지문·얼굴인식 같은 생체 정보와 OTP를 함께 사용해 다중 인증을 구현할 수 있다. 이는 “내가 가진 것(OTP)”과 “내가 되는 것(생체정보)”을 결합하는 방식이며, 모바일 뱅킹과 공공서비스에서 활용이 증가하고 있다.

TOTP와 HOTP 표준

TOTP(Time-based One-Time Password)는 RFC 6238에 정의된 시간 기반 OTP 표준이다. HMAC-SHA-1 알고리즘을 기반으로 하며 SHA-256, SHA-512도 지원한다. 대부분의 2FA 앱은 이 방식을 채택한다.

TOTP = HOTP(K, T)
K: 공유 비밀키
T: (현재 UNIX 시간 - T0) / X
T0: 시작 시간 (일반적으로 0)
X: 시간 간격 (일반적으로 30초)

HOTP(HMAC-based One-Time Password)는 RFC 4226에 정의된 카운터 기반 OTP 표준으로, 이벤트 동기화 방식의 기초가 된다. 카운터값을 증가시키며 OTP를 생성한다.

HOTP(K,C) = Truncate(HMAC-SHA-1(K,C))
K: 공유 비밀키
C: 8바이트 카운터 값
Truncate: 해시값을 6-8자리 숫자로 변환하는 함수

운영 시 남는 보안 과제

OTP를 설정하는 초기 단계에서는 공유 비밀키를 안전하게 전달해야 한다. 시간 차이 또는 카운터 차이로 인증이 실패할 수 있으므로 동기화 문제도 운영 대상이다. 기기를 분실했을 때를 위한 백업·복구 체계와 여러 기기에서 같은 OTP를 사용해야 하는 요구도 검토해야 한다.

OTP는 실시간 피싱을 통해 탈취될 가능성이 있다. 정적 패스워드의 한계를 보완하는 강력한 인증 수단이지만, 단독으로 완전한 보안을 보장하지는 않는다.

OTP 이후의 인증 흐름

OTP 입력 대신 모바일 앱의 푸시 알림으로 인증하는 방식이 활용되고 있다. 사용자 위치, 기기, 행동 패턴을 함께 고려하는 컨텍스트 기반 인증도 발전 방향 중 하나다. 비밀정보를 노출하지 않고 인증하는 제로 지식 증명 결합, 분산원장을 활용하는 블록체인 기반 인증체계 역시 연구되고 있다.

OTP는 금융, 기업 내부망 접근, 클라우드 서비스 등에서 중요한 인증 요소로 자리 잡았으며, 생체인증 및 컨텍스트 기반 인증과 결합하는 방향으로 발전할 전망이다.

OTP일회용 비밀번호사용자 인증다중인증TOTP