TOTP 생성기
Google OTP(Google Authenticator)나 Authy가 30초마다 바뀌는 여섯 자리 코드를 보여줄 때, 그것이 바로 TOTP입니다. 공유 비밀키와 현재 Unix 시간으로 계산한 HMAC이며, RFC 6238로 표준화되어 있습니다. 이 생성기는 어떤 Base32 비밀키로도 동일한 코드를 계산해 주므로, 새 2단계 인증(2FA) 연동을 디버깅하거나, 서비스가 코드를 거부하는 이유를 찾거나, 파라미터를 바꿨을 때 알고리즘이 어떻게 반응하는지 살펴볼 때 유용합니다. 테스트용 비밀키로만 사용하세요. 코드는 저희 서버에서 계산되므로, 계정을 보호하는 실제 비밀키는 웹 페이지가 아니라 인증 앱에 있어야 합니다.
이 TOTP 생성기의 작동 방식
-
1
Base32 비밀키 붙여넣기
A-Z 문자와 2-7 숫자로 이루어진, otpauth:// QR 코드 안에 쓰이는 형식입니다. 공백과 소문자는 괜찮지만, 그 외 문자는 잘못된 Base32로 표시됩니다.
-
2
해시 알고리즘 선택
거의 모든 서비스가 SHA-1을 사용합니다. 서비스가 명시적으로 요구할 때만 SHA-256이나 SHA-512로 바꾸세요.
-
3
자릿수와 주기 설정
6, 7, 8자리 중 하나와 30초 또는 60초 창을 고릅니다. 표준 조합은 30초마다 6자리입니다.
-
4
현재 코드 읽기
코드는 매초 새로 고쳐지고, 카운트다운이 현재 창에 남은 시간을 초 단위로 보여줍니다.
-
5
otpauth URI 비교
입력한 파라미터에 해당하는 otpauth:// URI를 보여주므로, 서비스 설정 QR이 담고 있는 값과 대조할 수 있습니다.
알고리즘을 쉬운 말로
TOTP는 HOTP(HMAC 기반 일회용 비밀번호, RFC 4226)에서 카운터를 현재 Unix 시간을 시간 간격(보통 30초)으로 나눈 값으로 바꾼 것입니다.
counter = floor(unix_time / 30)
hash = HMAC-SHA1(secret, counter_as_8_byte_big_endian)
offset = last byte of hash AND 0x0F
truncated = 4 bytes from offset, with the top bit zeroed
code = truncated mod 10^digits
기기와 서버가 같은 비밀키와 같은 시계로 같은 계산을 하기 때문에, 코드를 어디로도 전송하지 않고 둘 다 같은 코드에 도달합니다. 6자리 코드는 잘라낸 HMAC을 10^6으로 나눈 나머지일 뿐입니다. 마법은 없고, 그저 해싱입니다.
일반적인 파라미터
| 서비스 | 알고리즘 | 자릿수 | 주기 |
|---|---|---|---|
| 대부분의 웹사이트와 앱 | SHA-1 | 6 | 30초 |
| GitHub | SHA-1 | 6 | 30초 |
| Cloudflare | SHA-1 | 6 | 30초 |
| Microsoft 계정 | SHA-1 | 6 | 30초 |
| 일부 은행과 기업 VPN | SHA-256 또는 SHA-512 | 8 | 60초 |
서비스가 코드를 거부하면 자릿수와 주기를 먼저 확인하고, 그다음 알고리즘을 확인하세요. 일부 인증 앱은 비표준 파라미터를 조용히 무시한다는 점도 기억하세요(Google OTP는 과거에 모든 것을 SHA-1, 6자리, 30초로 처리했습니다). 따라서 항상 사용자가 실제로 쓸 바로 그 앱으로 테스트해야 합니다.
비밀키를 안전하게 보관하기
- 2FA 비밀키를 이메일이나 메시지로 절대 보내지 마세요. 받은편지함에 들어가는 순간 제공업체의 로그와 백업에 무기한 남습니다.
- QR 코드를 스캔해서 등록하세요. QR에는 비밀키, 알고리즘, 자릿수, 주기를 하나의 명확한 묶음으로 담은
otpauth://totp/...URI가 들어 있습니다. - 등록하는 순간에 백업하세요. 복구 코드나 비밀키 자체를 비밀번호 관리자에 보관하세요. 백업 없이 휴대폰을 잃어버리면 계정에서 잠겨 버립니다.
- 서비스마다 비밀키는 하나씩. 모든 서비스는 설정 시 자체 비밀키를 발급합니다. 어느 하나라도 유출되면 그 서비스에서 2FA를 다시 등록해 이전 비밀키를 무효화하세요.
시간 오차
TOTP는 양쪽 시계가 일치할 때만 동작합니다. 이 페이지는 서버 시계로 코드를 계산하므로, 여기 코드가 휴대폰 인증 앱과 다르다면 첫 번째 용의자는 기기의 시계입니다. 대부분의 검증 시스템은 앞뒤로 한 창(30~60초)의 오차를 허용합니다. 그 이상이라면 비밀키를 의심하기 전에 기기 시간을 NTP로 동기화하세요.
여기서는 테스트 비밀키만 사용하세요
이 도구는 코드를 저희 서버에서 계산합니다. 입력한 비밀키는 갱신될 때마다 HTTPS로 전송되고, 도구의 단계를 이동하면 페이지 URL에도 나타납니다. 일회용 테스트 비밀키로 개발, 시연, 디버깅을 하기에는 문제가 없습니다. 그러나 이메일이나 은행 계정을 보호하는 실제 비밀키를 넣을 곳은 아닙니다. 그런 키는 휴대폰의 전용 인증 앱에 있어야 합니다. 실제 비밀키를 이미 인증 앱 밖 어딘가에 붙여넣었다면, 해당 서비스에서 2FA를 다시 등록해 비밀키를 교체하세요.
자주 묻는 질문
이 페이지는 금고가 아니라 개발과 테스트용 도구로 여기세요. 코드는 서버에서 계산되므로 비밀키는 HTTPS로 저희 서버까지 이동하고, 단계 사이에는 페이지 URL에 나타날 수 있습니다. 데모나 개발용 비밀키는 자유롭게 쓰되, 소중한 계정의 실제 비밀키는 절대 붙여넣지 마세요. 이미 붙여넣었다면 해당 서비스에서 2FA를 다시 등록해 비밀키를 교체하세요.
먼저 파라미터를 확인하세요. 알고리즘, 자릿수, 주기가 서비스에서 발급한 값과 정확히 같아야 합니다. 다음은 시계입니다. 이 페이지는 서버 시계를 쓰므로, 어긋난다면 대개 상대 기기의 시계가 문제입니다. 마지막으로 일부 앱은 비표준 파라미터를 무시한다는 점을 기억하세요. 대표적인 예가 Google OTP입니다.
Base32만 가능합니다. A부터 Z까지의 문자와 2부터 7까지의 숫자이며, = 패딩은 선택입니다. 공백은 제거되고 소문자는 자동 변환됩니다. 16진수나 원시 바이트 비밀키는 먼저 Base32로 변환해야 하며, 그렇지 않으면 잘못된 Base32 비밀키라고 표시됩니다.
해당 계정의 2FA에서 잠기게 됩니다. 서비스의 복구 절차(복구 코드, 신원 확인, SMS 대체 수단)를 이용하세요. 설정할 때 복구 코드나 처음 QR 코드를 반드시 안전한 곳에 보관해 두세요.
네. 서버 측에서 최소 128비트(RFC 4226은 160비트 권장)의 무작위 비밀키를 생성하고, QR 코드로 한 번만 보여준 뒤, 같은 HMAC 계산으로 제출된 코드를 검증하세요. 보통 앞뒤 한 창씩 오차를 허용합니다. 어떤 스택에든 성숙한 라이브러리가 있습니다: pyotp(Python), otplib(JavaScript), rotp(Ruby).
관련 도구
숫자-문자 암호
퍼즐, 수수께끼, 방탈출 단서에 쓰이는 A=1, B=2 암호(A1Z26)로 숫자를 문자로, 문자를 숫자로 변환하세요.
파일 해시 계산기
붙여 넣은 텍스트나 파일 내용의 MD5, SHA-1, SHA-256, SHA-512 해시를 계산하여 다운로드와 파일 무결성을 확인하세요.
JWT 생성기
테스트용으로 사용할 수 있는 사용자 정의 헤더, 페이로드 클레임, HMAC 또는 RSA 서명 방식, 만료일 및 사용 대상 제한을 포함하는 인증된 JWT를 생성하세요.
MD5 해시 생성기
텍스트 및 파일의 무결성 검증을 위해 MD5 체크섬을 계산합니다. 이 결과는 `md5sum` 또는 `openssl dgst -md5` 명령어의 출력과 일치합니다.
랜덤 API 키 생성기
서버에서 8~128자의 16진수, base64url, 영숫자 API 키 또는 UUIDv4를 생성합니다.
패스프레이즈 생성기
무작위 일반 단어로 기억하기 쉬운 패스프레이즈를 생성합니다. 단어 수, 구분 문자, 대문자화, 뒤에 붙이는 숫자를 조절할 수 있습니다.
이 도구는 다른 언어로도 제공됩니다
- Generator TOTP [ID]
- Generator TOTP [PL]
- TOTP-generator [SV]
- ตัวสร้าง TOTP [TH]
- TOTP-Generator [DE]
- TOTPジェネレーター [JA]
- Generador TOTP [ES]
- Gerador TOTP [PT]
- Bộ tạo TOTP [VI]
- Générateur TOTP [FR]
- مولد TOTP [AR]
- TOTP-generator [NL]
- TOTP Generator [EN]
- Generatore TOTP [IT]
- Генератор TOTP [RU]
- TOTP Üretici [TR]
- TOTP 生成器 [ZH]