랜덤 토큰 생성기
길이와 문자 집합(영문·숫자·기호)을 골라 안전한 랜덤 토큰을 생성합니다.
토큰은 브라우저 내장 암호학적 난수(crypto.getRandomValues)로 생성하며, 모듈로 편향이 없도록 균등 추출합니다. 생성된 값은 서버로 전송되지 않고 저장되지도 않습니다 — 저장되는 값은 프리셋·길이 같은 설정뿐입니다.
비밀 토큰은 한 번 발급하면 안전한 곳(비밀 관리 도구, 환경변수)에만 두세요. 소스코드나 채팅에 붙여넣는 순간 유출된 것으로 봐야 합니다.
랜덤 토큰 생성기란?
API 키, 세션 토큰, 암호화 키처럼 예측 불가능한 무작위 문자열이 필요할 때 사용하는 안전한 랜덤 토큰 생성기입니다. 개발 및 보안 작업에 필수적인 시크릿(secret)을 손쉽게 만들 수 있습니다. 단순히 랜덤 문자열을 나열하는 것을 넘어, 'API 키', '세션 토큰', '16진수' 등 용도에 맞는 프리셋을 제공하여 클릭 한 번으로 형식에 맞는 토큰을 생성합니다. 물론 길이(4~128자), 문자 집합(영문·숫자·기호), 혼동 문자 제외 여부까지 직접 세밀하게 설정할 수도 있습니다. 생성된 토큰의 엔트로피(비트)와 보안 등급을 바로 확인하여 안전성을 직관적으로 파악할 수 있으며, 한 번에 최대 100개까지 만들고 텍스트 파일로 저장하는 기능도 갖췄습니다. 모든 과정은 브라우저 안에서만 이뤄지며, 생성된 토큰이나 민감한 정보는 서버로 절대 전송되지 않아 안심하고 사용할 수 있습니다.
사용 방법
- 용도에 맞는 프리셋('🔑 API 키', '🍪 세션 토큰' 등)을 선택하거나, '⚙️ 직접 설정'을 눌러 원하는 문자 종류를 직접 고릅니다.
- 슬라이더를 움직여 토큰의 길이를 조절하고, 필요하다면 포함할 문자 종류(대문자, 소문자, 숫자, 기호)를 체크박스로 선택합니다.
- 사람이 직접 입력할 가능성이 있다면 '혼동 문자 제외'를 체크해 0/O, 1/l/I처럼 헷갈리는 문자를 뺍니다.
- 토큰 앞에 붙일 '접두어'(예: sk_live_)나 한 번에 생성할 '개수'를 입력할 수 있습니다.
- '새로 생성' 버튼을 누르면 즉시 토큰이 나타나고, 엔트로피와 보안 등급을 확인할 수 있습니다.
- 생성된 토큰 옆 '복사' 버튼을 누르거나, 여러 개를 생성했을 경우 '전체 복사' 또는 '저장' 버튼으로 모든 토큰을 가져올 수 있습니다.
랜덤 토큰 생성기 사용 가이드
실제 작업에서 이 도구를 어떻게 쓰는지, 무엇을 조심해야 하는지 정리했습니다.
Math.random 으로 토큰을 만들면 실제로 뚫립니다
이것은 이론적인 걱정이 아니라 실제로 계정이 털리는 취약점입니다. Math.random은 빠른 난수를 뽑는 함수일 뿐 암호학적 안전성을 목표로 설계되지 않았습니다. 자바스크립트 엔진들이 쓰는 알고리즘은 내부 상태를 가지고 값을 순서대로 만들어내는데, 연구자들은 출력된 값 몇 개만 관찰하면 내부 상태를 복원해 이후에 나올 값을 그대로 계산할 수 있음을 시연했습니다.
비밀번호 재설정 토큰을 Math.random으로 만들었다고 해봅시다. 공격자는 자기 계정으로 재설정을 여러 번 요청해 토큰 샘플을 모으고, 내부 상태를 복원한 뒤, 관리자 계정의 재설정을 요청해 나올 토큰을 미리 계산합니다. 메일을 가로챌 필요조차 없습니다. 이 도구가 crypto.getRandomValues 만 쓰는 이유가 이것입니다.
| Math.random() | crypto.getRandomValues() | |
|---|---|---|
| 용도 | 섞기, 애니메이션, 샘플링 | 토큰, 키, 세션 ID, OTP |
| 예측 가능성 | 출력 관찰로 상태 복원 가능 | 예측 불가 |
| 비밀 값에 사용 | 절대 금지 | 표준 |
몇 비트면 충분한가 — 프리셋별 실제 수치
토큰의 강도는 길이가 아니라 엔트로피(비트)로 따집니다. 문자 후보가 62종인 40자 토큰은 62의 40제곱 가지, 약 238비트입니다. 결과 아래 통계에 이 값이 표시되고 약함·보통·강함·매우 강함으로 등급이 매겨집니다.
기준을 잡자면 세션 ID는 최소 128비트가 통용됩니다. 그 이상은 늘려도 실질적인 안전도 차이가 없고 쿠키만 길어집니다. 반대로 40비트 미만은 요즘 하드웨어로 전수 대입이 현실적인 영역이라 비밀 값으로 쓰면 안 됩니다.
| 프리셋 | 구성 | 엔트로피 | 쓰는 곳 |
|---|---|---|---|
| API 키 | 영문 대소문자+숫자 40자 | 약 238비트 | 서버 간 인증 키 |
| 세션 토큰 | Base64URL 64자 | 약 384비트 | 쿠키·URL에 그대로 넣어도 안전 |
| 16진수 | 0-9 a-f 32자 | 128비트 | 흔히 보는 랜덤 hex 16바이트 |
| Base64URL | 패딩 없는 43자 | 약 258비트 | 리셋 링크·서명 키 |
| 숫자 OTP | 숫자 6자리 | 약 20비트 | 일회용 인증번호 |
숫자 OTP 6자리는 그 자체로 안전할 수 없습니다
6자리 숫자는 100만 가지뿐입니다. 자동화 도구로 초당 수백 번 시도하면 현실적인 시간 안에 다 넣어볼 수 있는 숫자입니다. 여기서 자릿수를 늘리는 것은 답이 아닙니다 — 사용자가 문자로 받은 번호를 손으로 옮겨 적어야 하니까요.
그래서 OTP의 안전성은 토큰 자체가 아니라 그것을 감싸는 규칙에서 나옵니다. 국내 서비스가 문자 인증번호를 3분 유효 · 5회 실패 시 잠금 · 재발송 횟수 제한으로 운영하는 것은 관행이 아니라 필수 조건입니다.
- 유효시간을 짧게 두세요. 3~5분이면 충분합니다.
- 시도 횟수를 제한하고 초과하면 코드를 폐기하세요. 새 코드를 받게 해야지 계속 맞춰보게 두면 안 됩니다.
- 전화번호·IP 단위로 발송 횟수를 제한하세요. 안 그러면 문자 요금 폭탄 자체가 공격 수단이 됩니다.
- 한 번 쓴 코드는 즉시 무효화하세요.
접두어를 붙이는 진짜 이유
접두어 칸에 sk_live_ 처럼 넣으면 모든 토큰 앞에 붙습니다. 보기 좋으라고 있는 기능이 아닙니다. 접두어는 유출 사고에서 두 가지 일을 합니다.
첫째, 어디 키인지 즉시 알 수 있습니다. 로그나 채팅에서 정체불명의 40자 문자열을 발견하면 추적에 반나절이 걸리지만, sk_live_ 로 시작하면 어느 서비스의 운영 키인지 한눈에 보입니다. 둘째, 자동 탐지가 가능해집니다. 깃허브의 시크릿 스캐닝이나 사내 커밋 훅은 이런 고정 패턴을 찾아 경고합니다. live와 test를 접두어로 구분해 두면 운영 키를 테스트 코드에 넣는 사고도 걸러집니다.
만든 다음이 더 중요합니다
이 도구는 생성된 토큰을 저장하지 않습니다. 서버로 보내지도 않고 브라우저에도 남기지 않습니다 — 남는 것은 프리셋·길이 같은 설정뿐입니다. 새로고침하면 토큰은 사라지므로, 필요한 값은 그 자리에서 안전한 곳으로 옮기세요.
- 소스코드에 상수로 박지 마세요. 환경변수나 비밀 관리 도구에 두고 읽어 쓰세요.
- .env 파일은 .gitignore 에 넣으세요. 이미 커밋했다면 히스토리에 영원히 남습니다 — 파일을 지우는 것으로 끝나지 않고 키를 폐기하고 새로 발급해야 합니다.
- 채팅·이슈·스크린샷에 붙여넣은 순간 유출로 간주하세요. 나중에 삭제해도 이미 백업과 알림 메일에 남았습니다.
- 서버에 저장할 때는 토큰 자체 대신 해시를 저장하는 방법을 검토하세요. DB가 털려도 원본 토큰은 나가지 않습니다.
- 개수를 여러 개로 두면 목록이 나오고 전체 복사·저장이 됩니다. 여러 환경에 뿌릴 키를 한 번에 만들 때 유용하지만, 저장한 txt 파일을 지우는 것까지가 작업입니다.
자주 묻는 질문
비밀번호 생성기와 무엇이 다른가요?
용도는 비슷하지만, 토큰 생성기는 API 키처럼 기계가 주로 사용하는 긴 무작위 문자열 생성에 초점을 맞춥니다. 이 때문에 URL에 사용해도 안전한 문자 집합(Base64URL)이나 16진수 같은 특정 형식을 바로 만들 수 있고, 보안 강도를 나타내는 엔트로피 정보를 제공하여 기술적인 용도에 더 적합합니다.
생성된 토큰은 정말로 안전한가요?
네, 안전합니다. 이 도구는 단순한 난수가 아닌, 암호학적으로 안전하다고 알려진 브라우저 내장 기능(crypto.getRandomValues)을 사용해 토큰을 생성합니다. 이는 예측이 거의 불가능하여 암호화 키나 중요 세션 ID 생성에 쓰이는 표준 방식입니다. 생성된 값은 외부 서버로 전송되지 않으므로 유출 걱정 없이 사용하셔도 됩니다.
엔트로피(비트)와 평가는 무엇을 의미하나요?
엔트로피는 무작위성의 척도로, 얼마나 추측하기 어려운지를 나타내는 값입니다. 단위는 비트(bit)이며, 값이 높을수록 경우의 수가 기하급수적으로 늘어나 해독이 더 어려워집니다. '평가'는 이 엔트로피 값을 바탕으로 '약함'부터 '매우 강함'까지 보안 등급을 알기 쉽게 보여주는 지표입니다. 보통 128비트 이상이면 매우 안전한 것으로 간주합니다.
'혼동 문자 제외'는 언제 사용하는 기능인가요?
생성된 토큰을 사람이 직접 읽고 입력해야 할 때 유용한 기능입니다. 예를 들어, 사용자에게 이메일로 복구 코드를 보내주거나, 초기 비밀번호를 인쇄물로 전달하는 경우입니다. 이 옵션을 켜면 숫자 0과 영문 O, 숫자 1과 영문 l, I처럼 모양이 비슷해 착각하기 쉬운 문자들을 제외하고 토큰을 생성하여 오타 가능성을 줄여줍니다.