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.