HOTP

HOTP (HMAC 기반 일회용 비밀번호, RFC 4226)는 TOTP의 카운터 기반 형제예요. TOTP가 시계로 진행되는 반면, HOTP는 토큰과 서버 양쪽이 매 코드 사용 시 증가시키는 공유 카운터로 진행해요. HOTP는 YubiKey OATH, 레거시 하드웨어 토큰, 서버가 시계 동기화에 의존할 수 없는 일부 뱅킹 흐름의 표준 모드예요.

공식 사양:RFC 4226, HOTP: An HMAC-Based One-Time Password Algorithm (2005).
URI scheme:Google Authenticator Key URI Format, 모든 인증 앱이 동의하는 otpauth:// 스킴.
관련 규격:TOTP (RFC 6238), HOTP 위에 구축된 시간 기반 변형.

개요

HOTP 등록 QR은 hotp를 유형으로 하는 otpauth:// 스킴의 URL이에요. 공유 HMAC 시크릿과 양쪽이 동기화 상태를 유지해야 하는 카운터 값을 담아요. 형식:

otpauth://hotp/LABEL?secret=SECRET&issuer=ISSUER&counter=N&digits=N&algorithm=ALG

HOTP vs TOTP, 어떤 것을 써야 하나요

속성HOTP (RFC 4226)TOTP (RFC 6238)
진행 기준카운터 (각 성공적인 사용 시)시계 (30초마다)
시계 동기화 필요아니오예, ~30초 이내 편차
편차 시 재동기서버가 다음 N개 카운터 값 수용서버가 ±1 윈도우 수용
일반적인 배포YubiKey, 레거시 하드웨어 토큰, 오프라인 뱅킹모든 소비자 2FA, Google, Microsoft, 1Password, Authy
카운터 재사용치명적, 시간이 지남에 따라 시크릿 노출해당 없음
시크릿 유출 시 취약점미래 모든 코드 예측 가능과거 및 미래 모든 코드 예측 가능

표준 테스트 벡터

RFC 4226 부록 D는 시크릿 12345678901234567890 (20바이트, Base32 GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ)에 대한 6자리 HOTP 참조값을 제공해요:

카운터HOTP (6자리)
0755224
1287082
2359152
3969429
4338314
5254676
6287922
7162583
8399871
9520489

카운터 0에서 등록을 위한 최소 QR 페이로드:

otpauth://hotp/Example:test?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example&counter=0

라이브 Base32 시크릿 검증기

TOTP 페이지와 동일한 검증기예요. HOTP 시크릿도 동일한 Base32 알파벳(RFC 4648 §6: A-Z, 2-7)을 사용해요. 브라우저에서 실행돼요.

시크릿을 입력해 확인하세요.

흔한 함정

인증 앱 호환성

앱 / 토큰HOTPSHA256/5128자리비고
YubiKey Authenticator (iOS/Android/데스크톱)HOTP는 YubiKey OATH의 표준 모드예요. 완전한 RFC 4226 지원.
Google Authenticator무시됨 (SHA1만)무시됨 (6만)사실상 기준. HOTP는 지원하지만 6자리 SHA1만.
1Password완전한 RFC 지원. 카운터가 항목과 함께 저장 및 내보내져요.
Bitwarden완전한 RFC 지원.
Microsoft Authenticator완전한 RFC 지원.
Authy아니오,,최근 버전에서 HOTP 제거됨. TOTP 전용.
Duo Mobile아니오,,자체 푸시 플로우 사용. TOTP 전용 폴백.
OATH 하드웨어 토큰 (Feitian, Token2 등)다양함다양함표준 하드웨어 HOTP. 데이터시트에 다른 내용이 없으면 항상 6자리 SHA1.

관련 항목

사양 참조 확인 2026-04-19. RFC 4226 (2005), Google Key URI Format.