> totp | authenticator | generator <

Base32 시크릿에서 시간 기반(TOTP) 및 카운터 기반(HOTP) 일회용 비밀번호를 생성합니다. 2FA 설정을 테스트하고, 인증 앱과의 코드 불일치를 진단하고, otpauth:// URI를 만드세요. 모두 브라우저에서 로컬로 처리됩니다.

------

------

시크릿은 브라우저 밖으로 나가지 않습니다. 그래도 공용 컴퓨터에는 실제 운영 시크릿을 붙여 넣지 마세요.

OTPAUTH URI

인증 앱용 QR 코드가 필요하신가요? URI를 다음 도구에 붙여 넣으세요: QR 코드 생성기

[01]

카운트다운이 있는 실시간 코드

Base32 시크릿을 붙여 넣으면 현재 코드와 다음 코드를 매 주기마다 갱신하여 보여 주고, 만료까지 남은 시간을 진행 막대로 표시합니다.

[02]

SHA-1, SHA-256, SHA-512

6·7·8자리와 원하는 주기를 선택할 수 있습니다. HMAC은 Web Crypto API로 계산하며 RFC 4226·RFC 6238 테스트 벡터와 일치합니다.

[03]

otpauth URI 생성기 및 가져오기

인증 앱용 otpauth:// URI를 만들거나 기존 URI를 가져와 모든 필드를 자동으로 채웁니다. 어떤 데이터도 업로드되지 않습니다.

>> 기술 정보

일회용 비밀번호의 작동 원리:

HOTP(RFC 4226)는 HMAC(시크릿, 카운터)를 계산해 결과를 6~8자리로 잘라 냅니다. TOTP(RFC 6238)는 카운터를 Unix 시간÷주기(보통 30초)로 사용하는 HOTP이므로, 주기마다 코드가 바뀌고 양쪽이 통신 없이도 같은 코드를 얻습니다. 공유 시크릿은 보통 Base32 텍스트 또는 otpauth:// URI가 담긴 QR 코드로 전달됩니다.

예시:

RFC 6238 test vector (SHA-1) secret = GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ time = 59 -> counter = 59 / 30 = 1 code (8 digits) = 94287082

TOTP 생성기를 사용하는 이유:

  • >로그인 기능을 개발하면서 2단계 인증을 테스트하고 디버깅
  • >인증 앱과 서버의 코드가 다른 원인 파악
  • >올바른 발급자, 알고리즘, 자릿수, 주기로 otpauth:// URI 생성
  • >Unix 시간 입력란으로 고정된 시각의 코드 검증

>> 자주 묻는 질문

Q: TOTP는 어떻게 작동하나요?

A: 앱과 서버가 시크릿을 공유합니다. 양쪽 모두 시크릿과 현재 시간 단계(Unix 시간÷주기, 기본 30초)로 HMAC을 계산해 6자리 코드로 잘라 냅니다. 두 시계가 맞으면 같은 코드가 나옵니다.

Q: 여기에 시크릿을 입력해도 안전한가요?

A: 계산은 Web Crypto API를 사용해 전적으로 브라우저에서 이루어지며 서버로 아무것도 전송되지 않습니다. 하지만 TOTP 시크릿은 계정의 열쇠입니다. 공용이거나 신뢰할 수 없는 컴퓨터에는 실제 운영 시크릿을 붙여 넣지 말고, 디버깅에는 테스트 계정을 사용하세요.

Q: 코드가 인증 앱과 다른 이유는 무엇인가요?

A: 가장 흔한 원인은 시계 오차(TOTP는 몇 초 이내의 정확한 시간이 필요), 알고리즘·자릿수·주기 불일치, 시크릿 오타입니다. 대부분의 서비스가 쓰는 SHA-1, 6자리, 30초가 선택되어 있는지 확인하세요.

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

A: HOTP는 코드를 사용할 때만 증가하는 카운터를 쓰므로 코드는 사용될 때까지 유효합니다. TOTP는 시계에서 카운터를 얻기 때문에 주기마다 자동으로 만료됩니다. 일반 사용자 2FA에서는 TOTP가 훨씬 널리 쓰입니다.

Q: otpauth:// URI란 무엇인가요?

A: 2FA를 켤 때 스캔하는 QR 코드 안의 텍스트로, 예를 들어 otpauth://totp/Example:user@example.com?secret=...&issuer=Example 형식입니다. 시크릿, 발급자, 계정과 선택적으로 알고리즘·자릿수·주기를 담고 있습니다. 가져오기 칸에 붙여 넣으면 시크릿을 추출합니다.

Q: 인증 앱은 어떤 설정을 지원하나요?

A: Google Authenticator를 비롯한 많은 앱은 알고리즘, 자릿수, 주기 매개변수를 무시하고 항상 SHA-1, 6자리, 30초를 사용합니다. 앱과 서버가 다른 설정을 지원한다는 것을 알지 못한다면 이 기본값을 사용하세요.

다른 언어