TOTP 생성기
비밀 키를 입력하면 브라우저에서 TOTP 2단계 인증 코드를 생성합니다 — Google Authenticator 등 인증 앱과 호환됩니다.
TOTP 코드는 30초마다 바뀌는 6자리 2단계 인증 코드입니다. 인증 앱과 서버가 공유 비밀 키와 현재 시각으로부터 각자 독립적으로 계산합니다(RFC 6238). 2FA 설정 화면의 Base32 비밀 키나 otpauth:// 링크 전체를 붙여 넣으면 현재 코드, 다음 코드, 카운트다운 링이 표시되며, 모든 계산은 브라우저에서 이루어집니다. 비밀 키가 전송·저장·기록되는 일은 없습니다. 가이드 TOTP 코드의 원리에서 계산 방식과 시계 문제를 설명합니다. 비밀번호 및 토큰 생성기, SSH Key Suite와 함께 사용하세요.
마지막 업데이트:
🔒 모든 계산은 브라우저에서 로컬로 수행됩니다. 비밀 키가 서버로 전송되는 일은 없으며, 저장되지도 않습니다.
서버 시각과 내 시계를 비교하는 중…
내 코드
아직 계정이 없습니다. 위에 비밀키를 추가하면 코드가 여기에 나타나고 주기마다 새로고침됩니다. 아무것도 저장되지 않으며, 페이지를 새로고침하면 이 목록은 비워집니다.
솔직한 한계
이 페이지는 이미 당신이 소유한 코드를 위한 편의입니다. 다른 방에서 충전 중인 휴대폰, 또는 인증 앱 사이에서 옮기는 중인 비밀키를 위해서입니다. 비밀키의 장기 보관소로서는 안전하지 않습니다. 붙여 넣은 내용은 이 탭을 닫을 때까지 그 메모리에 남고, 같은 컴퓨터의 다른 소프트웨어도 메모리를 읽을 수 있습니다.
코드 생성기의 신뢰도는 그것이 실행되는 기기와 브라우저의 신뢰도 그 자체입니다. 중요한 계정이라면 비밀키를 전용 인증 앱이나 당신이 통제하는 하드웨어 키에 보관하고, 이 페이지는 신뢰하는 기기에서만 사용하며, 공유 또는 공용 컴퓨터에서는 절대 사용하지 마세요.
TOTP는 로그인 순간에 비밀키를 보유하고 있음을 증명합니다. 이미 유출된 비밀키는 지켜주지 못합니다. 비밀키가 채팅, 티켓, 서버 측 생성기에 붙여 넣어진 적이 있다면 타버린 것으로 취급하세요. 서비스에서 2FA를 껐다가 다시 켜서 새 비밀키를 발급받으세요.
브라우저 TOTP 생성기가 맞는 도구가 되는 경우
전형적인 경우는 설정과 이전입니다. 2단계 인증을 켜면 서비스는 QR 코드를 보여주고, "스캔할 수 없나요?" 링크 뒤에 원시 Base32 비밀키를 제공합니다. 여기에 비밀키를 입력하고 생성된 코드를 인증 앱의 코드와 비교하면 두 기기가 같은 비밀키를 가졌음을 증명할 수 있습니다. 로그아웃한 뒤에야 불일치를 발견하는 최악의 상황을 겪기 전에 말입니다. 계정을 새 휴대폰으로 옮길 때도 같은 확인이 통합니다. 각 비밀키를 다시 읽어 여기에 추가하고, 옛 앱과 코드가 윈도우마다 일치하는지 확인하세요.
휴대폰이 손에 없지만 비밀키가 비밀번호 관리자에 제대로 보관되어 있을 때도 실용적인 답입니다. 비밀키를 꺼내 여기서 코드를 생성하고 로그인하세요. 2FA를 꺼서 계정을 약하게 만들 필요 없이 말입니다. Google과 GitHub부터 AWS와 도메인 등록 기관까지 모든 서비스가 같은 RFC 6238 방식을 쓰므로, 비밀키를 가진 모든 계정을 생성기 하나로 커버할 수 있습니다.
QR 코드 안에 실제로 들어 있는 것
모든 인증 QR 코드는 한 줄의 텍스트입니다. 비밀키, 발급자, 계정 이름, 코드 매개변수(알고리즘, 자릿수, 주기)를 담은 otpauth:// URI입니다. 그래서 이 페이지는 링크 전체를 받습니다. 붙여 넣으면 모든 필드가 스스로 채워집니다. 그리고 그래서 설정 QR 코드의 스크린샷은 비밀번호 자체만큼 민감합니다. 스캔한 사람은 당신의 두 번째 요소의 영구 사본을 손에 넣습니다. 설정 스크린샷은 절대 공유하지 말고, 동기화되는 사진 라이브러리에서도 삭제하세요.
코드가 받아들여지는지는 두 가지 세부 사항으로 결정됩니다. 첫째는 시계입니다. 생성기와 서버는 현재 30초 윈도우에 동의해야 하고, 대부분의 서버는 앞뒤 한 윈도우까지만 용서하므로, 1분 틀린 시계는 매번 실패합니다. 둘째는 매개변수입니다. 대부분의 서비스는 SHA-1, 6자리, 30초를 쓰지만, 8자리나 60초 주기를 쓰는 곳도 있습니다. 여기서 만든 코드가 서비스와 끝내 맞지 않으면, 설정 화면에 적혀 있던 내용과 고급 설정을 대조하세요.
TOTP 용어, 정확히 짚기
TOTP. 시간 기반 일회용 비밀번호(RFC 6238). 시간 단계 카운터의 HMAC을 동적으로 잘라 짧은 십진 코드로 만든 것입니다.
HOTP. 카운터 기반 부모 알고리즘(RFC 4226). TOTP는 카운터를 유닉스 에포크 이후의 주기 수로 바꾼 HOTP입니다.
Base32. 대부분의 2FA 비밀키가 쓰이는 알파벳(A–Z와 2–7). 32자 비밀키는 20바이트, 즉 160비트의 키 재료를 담습니다.
otpauth://. 모든 설정 QR 코드 안에 있는 URI 형식. 유형, 라벨, 비밀키, 발급자, 알고리즘, 자릿수, 주기가 한 줄에 담깁니다.
시간 단계. 보통 30초. 생성기와 서버는 같은 단계에 떨어져야 하고, 대부분의 서버는 앞뒤 단계도 받아들입니다.
동적 절단. 20바이트가 넘는 HMAC을 짧은 코드로 바꾸는 단계. 다이제스트 마지막 반바이트가 주는 오프셋에서 4바이트를 잘라냅니다.
SHA-1. 지금도 TOTP의 기본 HMAC 해시입니다. HMAC의 보안은 충돌 저항성에 기대지 않으므로 이 구성은 여기서 여전히 건전합니다.
백업 코드. 서비스가 설정 때 발급하는 일회용 복구 코드. TOTP를 완전히 우회하므로 비밀번호처럼 보관하고, 비밀키와는 절대 함께 두지 마세요.
시계 오차. 기기 시계와 실제 시각의 간격. 오차가 한 주기를 넘으면 비밀키가 아무리 정확해도 생성되는 코드가 전부 틀립니다.
자주 묻는 질문
브라우저에서 2FA 코드를 생성해도 안전한가요?
이 페이지에서는 비밀키가 브라우저를 떠나지 않습니다. 코드는 WebCrypto를 이용해 페이지 메모리 안에서 계산되고, 아무것도 업로드·저장·기록되지 않으며, 새로고침하면 비밀키가 지워집니다. 위험한 패턴은 서버 측 생성기로, 비밀키가 네트워크를 건너 타인의 로그와 데이터베이스에 남습니다. 로컬이라도 신뢰하는 기기만 쓰세요. 비밀키의 안전은 그것을 입력하는 컴퓨터의 안전과 같습니다.
왜 내 코드가 거부되나요?
대개는 시계 때문입니다. 코드를 생성하는 기기와 서버가 현재 30초 윈도우에 대해 의견이 다르면 모든 코드가 틀립니다. 이 페이지의 시계 카드를 확인하고 날짜·시간 자동 설정을 켜세요. 다음 용의자는 매개변수(8자리나 60초 주기를 쓰는 서비스)와 낡은 비밀키입니다. 2FA를 다시 켰다면 옛 비밀키는 그 순간 죽었습니다.
TOTP와 HOTP의 차이는 뭔가요?
카운터입니다. HOTP(RFC 4226)는 쓸 때마다 카운터를 올리고, TOTP(RFC 6238)는 카운터를 시계에서 도출하므로 코드가 저절로 만료됩니다. 인증 앱과 이 페이지는 TOTP를 말합니다. 카운터 기반 HOTP 링크도 존재하지만, 이 페이지는 코드를 지어내지 않고 솔직히 거절합니다.
인증 앱을 대체할 수 있나요?
페이지가 열려 있는 동안은 동일한 코드를 만듭니다. 수학은 같습니다. 영구적인 집으로서는 안 됩니다. 설계상 여기에는 아무것도 남지 않고, 브라우저 탭은 오래 사는 비밀키가 있을 곳이 아닙니다. 비밀키는 인증 앱이나 비밀번호 관리자에 보관하고, 이 페이지는 설정 확인, 이전, 비상시에 쓰세요.
비밀키를 채팅에 붙여 넣은 적이 있습니다. 어쩌죠?
유출된 것으로 취급하세요. 채팅은 기록되고, 동기화되고, 검색됩니다. 비밀키를 가진 사람은 당신의 코드를 영원히 만들 수 있습니다. 서비스로 가서 2단계 인증을 껐다가 다시 켜 새 비밀키를 발급받고, 인증 앱을 다시 등록하고, 계정의 최근 활동을 확인하세요. 그런 다음 비밀번호 자체를 비밀번호 유출 확인에서 점검하세요.