도구스개발

HOTP 생성기

비밀키와 카운터를 입력하면 RFC 4226 방식의 카운터 기반 일회용 비밀번호(HOTP)를 계산합니다.

넣은 값은 서버로 보내지 않습니다. HMAC 계산까지 모두 브라우저 안에서 합니다. 비밀키는 새로고침하면 사라지고 저장되지 않습니다. 그래도 공용 PC에서는 실제 비밀키를 넣지 마세요 — 화면에 그대로 보입니다.

서비스가 QR 코드와 함께 보여주는 문자열입니다. 공백과 소문자는 알아서 처리합니다.

자리

otpauth URI로 만들면

otpauth://hotp/me%40example.com?secret=JBSWY3DPEHPK3PXP&counter=0
HOTP(RFC 4226)는 시간이 아니라 «몇 번째 사용인지» 나타내는 정수 카운터를 씁니다. 카운터를 8바이트로 만들어 비밀키로 HMAC을 구하고, TOTP와 같은 방식(동적 절단)으로 자릿수만큼 잘라냅니다. 서버와 기기가 카운터를 맞춰 증가시켜야 하며, 은행 OTP 하드웨어 토큰처럼 인터넷 연결 없이 버튼을 누를 때마다 다음 코드로 넘어가는 기기에 주로 쓰입니다.
이 계산기의 결과는 RFC 4226 부록 D의 공식 테스트 벡터와 정확히 일치합니다 (비밀키 «12345678901234567890», 카운터 0~9). TOTP는 시계가 어긋나도 앞뒤 주기를 봐주지만, HOTP는 카운터가 밀리면 서버가 미리 몇 스텝을 계산해 맞춰보는 방식(look-ahead window)으로 대응합니다.

사용 방법

  1. 1비밀키(Base32) 또는 otpauth://hotp/ URI를 입력합니다.
  2. 2카운터 값을 입력하거나 +1 버튼으로 늘립니다.
  3. 3그 카운터에서의 HOTP 코드를 확인합니다.

자주 묻는 질문

TOTP는 현재 시각을 기준으로 코드가 자동으로 바뀌지만(dev/totp), HOTP는 시간 대신 사용할 때마다 1씩 증가하는 카운터를 씁니다. 서버와 기기가 같은 카운터를 유지해야 합니다.

인터넷에 연결되지 않은 은행 OTP 하드웨어 토큰처럼, 버튼을 누를 때마다 다음 코드로 넘어가는 기기에 주로 쓰입니다.

인증에 계속 실패합니다. RFC 4226은 이런 어긋남에 대비해 서버가 앞으로 몇 스텝(look-ahead window)까지 미리 계산해 맞춰보도록 권고합니다.

RFC 4226 부록 D의 공식 테스트 벡터(비밀키 "12345678901234567890", 카운터 0~9)와 정확히 일치하는지 확인했습니다.

전송되지 않습니다. HMAC 계산까지 모두 브라우저 안에서 이뤄지고, 비밀키는 새로고침하면 사라지며 저장되지 않습니다.

알아두면 좋은 점

  • 공용 PC에서는 실제 서비스의 비밀키를 입력하지 마세요. 화면에 그대로 보이고 브라우저 기록에 남을 수 있습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 4일 · 결과는 참고용 추정치입니다.