OTP 인증 방식과 일회용 비밀번호 시스템 설계
OTP의 시간·이벤트·챌린지 기반 인증 방식과 표준, 시드 관리, 동기화 대응, 보안 한계를 정리한다.
2026-08-14 · 최초 발행 2025-06-15
정적 비밀번호 뒤에 놓이는 일회성 검증
OTP(One Time Password)는 인증 시점에 한 번만 쓸 수 있는 임시 비밀번호를 만드는 기술이다. 정적 비밀번호가 반복 사용되면서 생기는 재사용 공격, 도청, 피싱 위험을 보완하는 2차 인증 수단으로 활용된다.
사용한 값은 즉시 만료돼 다시 쓸 수 없고, 보통 30초~1분으로 제한된 유효 시간 안에서만 입력할 수 있다. 예측하기 어려운 난수 생성 알고리즘을 사용하며, 중간자 공격(Man-in-the-Middle)에 대한 방어력도 높인다.
시간·이벤트·챌린지로 달라지는 OTP 생성 방식
시간값을 함께 쓰는 TOTP
TOTP(Time-based OTP)는 서버와 클라이언트가 공유하는 시간값과 비밀키로 OTP를 생성한다. 일정 시간, 보통 30초가 지나면 새 값이 만들어진다. RFC 6238을 기반으로 구현한다.
카운터를 별도로 관리할 필요는 없지만, 서버와 클라이언트의 시간 차이가 커지면 인증이 실패할 수 있다.
카운터를 기준으로 하는 HOTP
HOTP(HMAC-based OTP)는 카운터 값으로 OTP를 만든다. 사용자가 OTP를 사용할 때마다 카운터가 증가하므로, 서버와 클라이언트가 그 값을 맞춰 두어야 한다. RFC 4226의 HMAC-SHA-1 기반 알고리즘을 사용한다.
시간 동기화나 시간 제약이 필요 없다는 장점이 있는 반면, 카운터가 어긋나면 인증 실패로 이어질 수 있다.
세션별 난수에 응답하는 방식
챌린지-응답 방식은 서버가 준 챌린지(난수)를 입력으로 OTP를 생성한다. 세션마다 다른 챌린지 값을 사용하므로 재생 공격 방지에 효과적이며, 중간자 공격 방어도 강화할 수 있다. 다만 구현이 복잡해지고 사용자 경험이 저하될 가능성이 있다.
토큰을 전달하는 방법
하드웨어 토큰은 전용 OTP 생성 장치를 사용하는 형태다. 화면에 OTP를 표시하는 디스플레이형, USB·블루투스 등으로 컴퓨터에 연결하는 커넥티드형, 카드에 디스플레이를 내장한 카드형이 있다. 물리적으로 분리되어 해킹 위험을 낮출 수 있지만, 별도 장치를 휴대해야 하고 분실 위험과 비용이 따른다.
소프트웨어 토큰은 스마트폰 앱 등에서 OTP를 생성한다. Google Authenticator와 Microsoft Authenticator가 대표적인 구현이다. 별도 장치가 필요 없어 편리하고 비용 효율적이지만, 기기 해킹 시 보안 위험이 생길 수 있다.
SMS나 이메일로 OTP를 보내는 방식도 있다. 별도 앱이나 장치 없이 사용할 수 있다는 장점이 있으나, 통신 채널 해킹, SMS 지연이나 분실, 전송 비용을 고려해야 한다.
시드와 동기화는 인증 경로의 운영 문제다
OTP 생성의 기반이 되는 시드값은 안전하게 보관해야 한다. 초기 시드를 만들 때 충분한 엔트로피(무작위성)를 확보하고, 서버에서는 암호화 저장과 접근 제한을 적용한다. 클라이언트에서는 TPM, TEE 등의 안전한 저장소를 활용할 수 있다.
TOTP에는 타임 스큐(Time Skew) 허용 범위를, HOTP에는 서버가 일정 범위의 카운터를 허용하는 카운터 윈도우를 설정해야 한다. 두 방식 모두 재동기화 메커니즘이 필요하다.
디바이스 분실이나 고장에 대비한 인증 경로도 준비한다. 백업 코드를 제공하고, 이메일·전화번호 같은 다중 인증 수단을 등록하며, 관리자 지원 절차를 수립한다.
인증 서버에서 OTP를 검증하는 흐름
RFC 표준이 규정하는 알고리즘
HOTP(RFC 4226)는 HMAC 기반 일회용 패스워드 알고리즘이다.
- 핵심 공식: HOTP(K,C) = Truncate(HMAC-SHA-1(K,C))
- K: 공유 비밀키
- C: 카운터 값
- Truncate: 해시값을 사용자 친화적 숫자로 변환
TOTP(RFC 6238)는 시간 기반 일회용 패스워드 알고리즘으로 HOTP를 시간값에 적용한다.
- 핵심 공식: TOTP = HOTP(K, T)
- T = (현재 Unix time - T0) / X
- T0: 기준 시간(보통 0)
- X: 시간 간격(보통 30초)
OCRA(RFC 6287)는 챌린지-응답 알고리즘이다. 시간, 카운터, 챌린지 등 여러 입력 요소를 조합할 수 있어 고급 보안 요구사항에 적합하다.
OTP가 연결되는 인증 지점
금융권에서는 인터넷 뱅킹 로그인과 거래 승인, 국내 금융권 공인인증서 대체 인증, 전자 금융 거래 승인용 추가 인증에 OTP를 사용한다.
기업 내부에서는 VPN 접속 인증, 클라우드 서비스 접근 제어, 특권 계정 관리(PAM) 시스템 연동에 적용할 수 있다. 일반 웹 서비스에서는 소셜 미디어와 이메일의 2단계 인증(2FA), 민감 정보 접근 시 추가 인증, 계정 복구 프로세스 보안 강화에 활용된다.
OTP만으로 남는 위험과 보완 방향
실시간 피싱에서는 OTP도 탈취될 수 있다. FIDO2/WebAuthn 같은 피싱 방지 기술을 결합하는 대응이 필요하다.
SMS OTP는 통신 프로토콜 취약점을 이용한 SMS 탈취 가능성이 있다. 이 경우 SMS 대신 앱 기반 OTP 사용을 권장할 수 있다.
시간 또는 카운터 동기화에 실패하면 인증이 불가능해진다. 넓은 동기화 윈도우를 허용하고 NTP 서버를 활용하는 방식으로 대응한다.
생체 인증과 OTP를 결합하거나, 사용자 행동과 위치 같은 컨텍스트 요소를 인증에 포함하는 방향도 가능하다. 사용자 경험을 개선하는 무자각 인증(Frictionless Authentication), 분산 원장 기술을 활용한 블록체인 기반 OTP도 발전 방향으로 제시된다.