TOTP(일회용 비밀번호) 생성기

Base32 형식의 TOTP 시크릿으로부터 Google Authenticator 등과 동일한 6자리 일회용 비밀번호(RFC 6238)를 브라우저 안에서만 생성합니다. 시크릿은 서버로 전송되지 않습니다.

이 도구는 시크릿을 서버로 전송하지 않습니다. Base32 디코딩과 HMAC 계산은 모두 브라우저 내부(Web Crypto API)에서 완결되므로 인증 정보를 안심하고 입력할 수 있습니다.

TOTP 알고리즘 소개

TOTP(Time-based One-Time Password)는 RFC 6238에 정의된 시간 기반 일회용 비밀번호 생성 알고리즘입니다. 공유 시크릿과 현재 시각을 일정 간격의 카운터로 변환한 뒤, HOTP(RFC 4226)와 동일한 동적 절단(dynamic truncation) 알고리즘으로 숫자 코드를 도출합니다.

HMAC 알고리즘 SHA-1(기본값), SHA-256, SHA-512 중 선택 가능
코드 자릿수 6자리(Google Authenticator 등 주요 2FA 앱과 동일한 표준 자릿수)
갱신 주기 30초마다 새로운 코드로 전환됩니다

TOTP(일회용 비밀번호)란

TOTP(Time-based One-Time Password)는 아이디와 비밀번호에 더해 한 단계의 확인을 더 요구하는 2단계 인증(2FA)에서 쓰이는, 30초마다 바뀌는 6자리 일회용 코드입니다. 미리 등록한 ‘시크릿’이라는 공통 키와 현재 시각을 조합해 계산하므로, 서버와 손안의 인증 앱이 통신하지 않아도 같은 코드를 동시에 이끌어 낼 수 있는 구조입니다. Google Authenticator·Microsoft Authenticator·Authy 등 주요 인증 앱은 모두 RFC 6238이라는 공통 규격을 따릅니다.

이 도구는 2FA 등록 시 QR 코드 아래 등에 표시되는 ‘설정 키’(Base32 형식의 시크릿)를 입력하기만 하면, 인증 앱과 같은 6자리 코드를 브라우저 안에서 재현합니다. 시크릿의 Base32 디코딩과 HMAC 계산은 모두 Web Crypto API로 끝나며, 서버로 전송되는 일은 전혀 없습니다. 인증 앱의 재설정이나 코드의 검산, 여러 기기에서의 동작 확인 등에 도움이 됩니다.

TOTP 코드 생성 방법

  1. 시크릿을 입력합니다 2FA 등록 시 발급된 Base32 형식의 설정 키(예: JBSWY3DPEHPK3PXP)를 ‘시크릿’란에 붙여 넣습니다.
  2. 해시 알고리즘을 확인합니다 많은 서비스가 SHA-1을 쓰지만, 일치하지 않는 경우에는 SHA-256·SHA-512로 바꾸어 시도해 보세요.
  3. 표시된 6자리 코드를 확인합니다 입력과 동시에 현재 시각에 대응하는 코드가 자동으로 계산되어, 남은 초를 나타내는 진행 표시줄과 함께 표시됩니다.
  4. 필요에 따라 복사합니다 ‘복사’ 버튼으로 코드를 클립보드에 복사하실 수 있습니다. 바뀌기 직전은 피해서 사용해 주세요.

더 잘 활용하기 위한 팁

  • 시크릿은 2단계 인증(2FA)을 처음 등록할 때 QR 코드 아래 등에 표시되는 "설정 키" 문자열입니다. 이미 스마트폰 인증 앱에 등록되어 있다면 동일한 시크릿을 이 도구에 입력해 같은 코드가 나오는지 확인할 수 있습니다.
  • 서비스에 따라 SHA-1이 아닌 다른 해시 알고리즘(SHA-256·SHA-512)을 사용하는 경우가 있습니다. 생성된 코드가 실제 앱과 일치하지 않으면 알고리즘을 바꿔서 시도해 보세요.
  • 코드는 30초마다 자동으로 갱신되며, 진행 막대(프로그레스 바)로 남은 시간을 한눈에 확인할 수 있습니다. 전환 직전에 코드를 복사하면 인증 대상에 도달하기 전에 무효화될 수 있으니 주의하세요.
  • 이 도구는 브라우저 탭을 닫으면 시크릿이 완전히 폐기되며 어디에도 저장되지 않습니다. 백업용으로 사용하려면 별도로 안전한 곳(비밀번호 관리자 등)에 시크릿 자체를 보관해 주세요.

TOTP 생성기가 도움이 되는 상황

2FA 앱의 동작 확인·이전

기기 변경으로 인증 앱을 옮기기 전에, 적어 두신 시크릿이 올바른지를 새 단말에 등록하기 전에 이 도구로 검산하실 수 있습니다.

개발·테스트 환경에서의 로그인 확인

자사 서비스에 2FA를 구현할 때, 테스트용 계정의 시크릿으로부터 코드를 그때그때 생성해 인증 로직의 동작 확인에 쓰실 수 있습니다.

백업용 시크릿의 검증

비밀번호 관리자 등에 보관한 시크릿이 제대로 작동하는지, 실제 기기의 인증 앱을 열지 않고 손쉽게 확인하실 수 있습니다.

계정 전체의 보안 강화

TOTP와 함께 로그인 비밀번호 자체의 강도도 다시 살펴보고 싶으시다면 비밀번호 생성이나 기억하기 쉬운 패스프레이즈 생성도 이용해 주세요.

해시 값의 확인과 함께 사용

TOTP와 마찬가지로 HMAC이나 해시 함수의 구조에 관심이 있으시다면, SHA-256 해시 계산으로 기초가 되는 해시 계산을 시험해 보세요.

TOTP 관련 용어집

TOTP(Time-based One-Time Password)
현재 시각으로부터 산출한 카운터를 사용해 일회용 비밀번호를 생성하는 방식(RFC 6238)입니다. 일정 주기(보통 30초)마다 코드가 자동으로 바뀝니다.
HOTP(HMAC-based One-Time Password)
TOTP의 바탕이 된 규격(RFC 4226)입니다. 시각 대신 ‘쓸 때마다 하나씩 나아가는 카운터’를 써서 코드를 생성하는 방식입니다.
시크릿(공유 키)
서비스 측과 이용자의 인증 앱 양쪽이 보유하는 비밀 키입니다. Base32 형식의 문자열로 2FA 등록 시 발급되며, 이것과 시각으로부터 코드가 계산됩니다.
2단계 인증(2FA)
비밀번호(지식 요소)에 더해 스마트폰의 인증 앱 등(소지 요소)에 의한 확인을 조합하는 로그인 방식입니다. 한쪽이 유출되어도 부정 로그인을 막기 쉬워집니다.
타임스텝(갱신 주기)
TOTP의 코드가 새 값으로 바뀌는 간격입니다. RFC 6238의 기본값은 30초이며, 많은 서비스와 인증 앱이 이 값을 그대로 채택하고 있습니다.
Base32
바이트 열을 영문 대문자(A~Z)와 숫자(2~7)의 32종류 문자만으로 표현하는 부호화 방식입니다. TOTP의 시크릿은 가독성이 높은 이 형식으로 배포됩니다.
동적 절단(Dynamic Truncation)
HMAC 계산 결과(긴 바이트 열)에서 규칙에 따라 4바이트를 꺼내 6자리 수치로 변환하는 처리입니다. RFC 4226에서 정의된 HOTP·TOTP 공통 알고리즘입니다.

자주 묻는 질문

네. Base32 디코딩과 HMAC 계산은 모두 브라우저 내의 Web Crypto API에서 실행되며 서버로는 일절 전송되지 않습니다. 네트워크 통신을 살펴봐도 입력한 시크릿이 전송되지 않음을 확인할 수 있습니다.

해시 알고리즘 불일치(대부분 SHA-1이지만 일부 서비스는 SHA-256/SHA-512 사용)나 기기 시각이 어긋났을 가능성이 있습니다. 먼저 알고리즘을 바꿔서 시도해 보고, 그래도 일치하지 않으면 기기의 시각 설정(자동 시간 동기화)을 확인해 주세요.

일반적으로 TOTP가 더 안전하다고 여겨집니다. SMS는 전화번호 탈취(심 스와핑 사기)로 제3자에게 가로채일 위험이 있지만, TOTP는 기기 내에서 완결되므로 그런 유형의 공격을 받지 않습니다.

대부분의 서비스는 2FA 등록 시 "복구 코드"를 발급합니다. 시크릿 자체를 분실한 경우, 서비스 측의 계정 복구 절차(본인 확인)를 통해 2FA를 다시 설정해야 합니다.
툴군

여담이지만 ― 2단계 인증이 "6자리"로 정착한 이유

TOTP 사양(RFC 6238)을 제정한 OATH(Initiative for Open Authentication)는 HOTP(RFC 4226)의 동적 절단 알고리즘을 그대로 차용하고, 코드 자릿수는 구현 쪽에서 자유롭게 정할 수 있도록 설계했습니다. 그럼에도 6자리가 사실상 업계 표준이 된 것은 Google Authenticator가 2010년 초기 구현에서 이 자릿수를 채택했고, 이후 많은 서비스·라이브러리가 이를 따랐기 때문입니다.

6자리라는 길이는 절묘한 균형점이기도 합니다. 100만 가지(10의 6제곱) 조합이 짧은 30초의 유효 기간과 결합하면 무차별 대입 공격은 현실적으로 불가능해지는 한편, 사용자가 암기해서 직접 입력하기에는 이보다 길면 실용성이 떨어집니다. SMS 인증 코드 대부분도 마찬가지로 6자리를 채택하고 있는 것은 우연이 아니라, "짧은 시간에 쓰고 버리는 숫자 코드"라는 분야 전체가 수렴한 경험칙입니다.

TOTP의 전신인 HOTP(RFC 4226, 2005년)는 "카운터"를 사용하는 방식으로, 코드를 사용할 때마다 카운터를 하나씩 증가시켜야 했습니다. 그러나 사용자가 버튼 누르는 것을 잊거나 기기와 서버의 카운터가 어긋나는 등의 운영상 문제가 자주 발생했기 때문에, 2011년에 제정된 TOTP에서는 누구나 같은 값을 참조할 수 있는 "현재 시각"이라는 기준으로 대체되어 운영이 크게 단순화되었습니다.