도구
가이드

TOTP / HOTP 2단계 인증 생성기

암호

Base32 비밀키 또는 otpauth:// URI에서 시간 기반(TOTP) 또는 카운터 기반(HOTP) 일회용 비밀번호를 생성합니다. 실시간 카운트다운과 스캔 가능한 QR 코드 — 모두 브라우저에서 로컬로 처리합니다.

100% 클라이언트 백엔드 없음

원격 URL은 가져오지 않습니다. JSON을 직접 붙여넣으세요.

모드
Base32 비밀키(또는 otpauth:// URI)를 입력하여 코드를 생성하세요.
TOTP
------
--
otpauth URI

Google 인증기, Authy, 1Password 등 모든 TOTP 앱으로 스캔하세요.

코드는 로컬에서 생성됩니다 — 비밀키는 브라우저를 떠나지 않습니다.
이 페이지에서

TOTP란?#

시간 기반 일회용 비밀번호(TOTP)는 인증기 앱이 각 계정 옆에 보여 주는, 돌아가는 6자리 코드입니다. 밑바탕에는 HMAC이 있습니다. 공유 비밀키와 현재 시간 창을 함께 해싱하고, 결과를 짧은 숫자 코드로 자릅니다. 코드가 시계에 의존하므로 30초마다 스스로 갱신됩니다. 이것이 “가지고 있는 무언가”(비밀키)를 전화와 서비스 사이의 어떤 네트워크 왕복 없이도 두 번째 인수로 쓸 수 있게 만드는 점입니다.

이 페이지는 완전히 동작하는 TOTP와 HOTP 생성기입니다. TOTP 는 현재 시간에서 코드를 도출하고 주기가 지나면 스스로 갱신합니다. HOTP 는 사용할 때마다 앞으로 나아가는 카운터에서 도출합니다. Base32 비밀키를 직접 타이핑하거나, otpauth:// URI(서비스가 2단계 인증을 켤 때 보여 주는 QR 코드에 인코딩된 문자열)를 붙여넣어 모든 필드를 자동으로 채울 수 있습니다. 페이지는 또한 정준 otpauth:// URI를 내보내고 스캔 가능한 QR 코드를 그려 주어, 여기서 바로 전화 앱으로 새 계정을 프로비저닝할 수 있습니다.

모든 것은 로컬에서 실행됩니다. 비밀키는 결코 페이지를 떠나지 않으며, 어떤 인증 서비스로의 온라인 호출도 없습니다.

사용 방법#

  1. 모드 를 고르세요. TOTP(시간 기반, 스스로 갱신) 또는 HOTP(카운터 기반, 수동으로 앞으로).
  2. 비밀키를 제공하세요. 비밀키 필드에 비밀키(Base32) 를 붙여넣거나, otpauth:// URI 필드에 otpauth:// URI 를 붙여넣어 모든 매개변수를 한꺼번에 자동 채움하세요.
  3. 발급자 와 계정 라벨을 설정하세요(이들은 인증기 앱에서 항목이 어떻게 이름 붙여지는지에만 영향을 주고, 코드 자체에는 영향을 주지 않습니다).
  4. 알고리즘 (SHA-1 / SHA-256 / SHA-512 — SHA-1이 보편적 기본값), 자릿수 (6 / 7 / 8 — 6이 표준), 그리고 TOTP의 경우 초 단위 주기 (기본 30)를 고르세요. HOTP의 경우 카운터 를 설정하고 사용할 때마다 다음 코드 를 눌러 앞으로 진행하세요.
  5. 생성 을 누르세요. 코드가 현재 주기의 남은 초를 보여 주는 카운트다운 링과 함께 크게 나타납니다. 그 아래에 otpauth:// URI와 스캔 가능한 QR 코드가 나옵니다.

주요 기능#

  • TOTP와 HOTP를 한 곳에. 비밀키를 다시 입력하지 않고 시간 기반과 카운터 기반 변형 사이를 전환합니다.
  • 관대한 Base32 처리. 공백, 하이픈, 소문자, 섞인 문자를 자동으로 정리하여 어색한 형식에서 복사한 비밀키도 동작합니다.
  • URI 가져오기와 내보내기. otpauth:// URI를 붙여넣어 모든 필드를 채우거나, 생성된 URI를 복사하여 다른 곳에 새 계정을 프로비저닝하세요.
  • 실시간 QR 코드. URI에서 페이지 안에 그려지며, 어떤 인증기 앱으로든 스캔할 준비가 됩니다.
  • 카운트다운 링. 다음 갱신까지의 시각적 카운트다운이 있어, 타이핑하려는 코드에 충분한 시간이 남았는지 알 수 있습니다.
  • 업로드 없음. 생성, 파싱, QR 렌더링이 모두 로컬이며, 비밀키는 결코 전송되지 않습니다.

실전 예시#

RFC 6238 참조 시드는 ASCII 문자열 12345678901234567890 이고, 이를 Base32로 하면 GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ 입니다. 이 비밀키를 타이핑하고 자릿수 8, 주기 30 으로 설정하면 코드가 공개된 테스트 벡터와 정확히 일치합니다.

  • SHA-1, 에포크로부터 59초 시점 → 94287082
  • 같은 순간의 SHA-256 → 46119246
  • 같은 순간의 SHA-512 → 90693936

시간 = 1111111109(먼 미래의 날짜)에서 SHA-1은 07081804 를 만듭니다. 이것들이 이 도구 자체의 테스트 스위트가 검사하는 것과 같은 알려진 응답 값이므로, 생성기가 올바른지 확인하는 믿을 수 있는 방법입니다. 일상적 2단계 인증에서 서비스는 6자리, SHA-1, 30초 주기를 씁니다. 자릿수를 다시 6으로 돌리면 같은 비밀키가 인증기 앱이 보여 줄 돌아가는 코드를 만들어냅니다.

FAQ#

코드가 제 전화 앱과 맞지 않습니다. 무엇이 문제인가요?#

거의 항상 비밀키나 시계입니다. 먼저 Base32 비밀키가 동일한지 확인하세요. 서비스의 설정 페이지에서 다시 복사하세요. 글자 하나만 틀려도 전부 바뀝니다. 그다음 매개변수를 확인하세요. 대부분의 서비스는 SHA-1, 6자리, 30초 주기를 씁니다. 서비스가 SHA-256이나 8자리를 쓰는데 SHA-1 / 6을 선택했다면 코드가 달라집니다. 마지막으로 기기의 시계가 정확한지 확인하세요. TOTP는 약간의 어긋남은 허용하지만 약 30초 이상 벌어지면 깨집니다.

TOTP와 HOTP의 차이는 무엇인가요?#

TOTP는 이동 인수로 현재 시간을 쓰므로 매 주기마다 자동으로 앞으로 갑니다. HOTP는 코드가 소비될 때마다 증가하는 단순 카운터를 쓰므로, 양쪽 모두 몇 개의 코드가 사용되었는지 동기화 상태를 유지해야 합니다. TOTP가 오늘날 거의 모든 소비자 2단계 인증 흐름이 쓰는 것이며, 시계 외에 동기화가 필요 없기 때문입니다.

웹 페이지에 비밀키를 넣어도 안전한가요?#

비밀키는 결코 이 페이지를 떠나지 않습니다. 생성, 파싱, QR 렌더링이 모두 브라우저에서 로컬로 실행되며, 네트워크 호출이 없습니다. 그렇지만, 여러분이 통제하는 프로덕션 2단계 인증 비밀키라면 가장 안전한 관행은 어떤 웹 페이지가 아닌 온전히 신뢰하는 환경에서 생성하고 저장하는 것이며, 서비스가 준 복구 코드를 보관하는 것입니다.

otpauth:// URI를 붙여넣으면 왜 전부 채워지나요?#

그 URI가 인증기 앱이 교환하는 표준 형식입니다. 유형, 발급자, 계정, 비밀키, 알고리즘, 자릿수, 주기(또는 카운터)를 한 문자열에 인코딩합니다. 파서가 그 필드들을 읽어 폼을 채웁니다. 이것은 전화로 QR 코드를 스캔할 때 일어나는 일과 정확히 같습니다. QR은 그저 URI를 이미지로 그린 것입니다.