토큰 & API 키 생성기

Web Crypto API를 사용하는 암호학적으로 안전한 토큰. UUID, Hex, Base64 베어러 토큰, 접두사가 붙은 API 키.

RFC 4122 v4 규격의 128비트 식별자로, 그중 122비트가 무작위야. 데이터베이스 기본 키, 요청 ID, 상관 관계 토큰에 기본으로 쓰여.

엔트로피 122비트 · 브라우저에서 생성되며 서버로 전송되지 않아

왜 Math.random()은 안 돼?

Math.random()은 의사 난수 생성기야 — 출력값이 예측 가능하기 때문에 보안 토큰에 적합하지 않아. 이 도구는 TLS 및 SSH 키 생성에 사용되는 동일한 API인 crypto.getRandomValues()를 사용해.

토큰 유형 설명

UUID v4는 데이터베이스 ID와 상관 관계 토큰의 표준이야. Hex 문자열은 세션 토큰과 nonce에 잘 맞아. Base64는 API 토큰에 적합하게 간결해. 접두사가 있는 API 키(예: sk_ 또는 vlt_)는 유출된 자격 증명을 쉽게 식별하고 교체할 수 있게 해줘.

토큰은 얼마나 길어야 할까?

접근을 보호하는 값이라면 엔트로피 128비트가 최소선이고, NIST SP 800-63B도 무작위로 생성된 비밀에 이 수준을 기대해. Hex로는 32자, Base64로는 22자, 또는 UUID v4 하나에 해당해. 256비트를 넘겨도 무차별 대입에 대해 얻는 건 없고 로그 용량과 헤더 크기만 늘어나. 문자 집합보다 길이가 중요해서, 32자 Hex 토큰과 22자 Base64 토큰은 추측 난이도가 같아.

베어러 토큰, 액세스 토큰, API 키

이 이름들은 자격 증명이 어떻게 쓰이는지를 설명할 뿐 어떻게 생성되는지를 구분하지 않아. 베어러 토큰은 제시하는 것만으로 접근이 허용되는 토큰이고, 그래서 HTTP Authorization 헤더가 그대로 실어 나르지. 액세스 토큰은 수명이 짧은 베어러 토큰으로 보통 OAuth 흐름에서 발급돼. API 키는 사람이 아니라 서비스에 발급되는 수명이 긴 베어러 토큰이야. 생성 시점에서 셋은 모두 같은 것, 즉 엔트로피가 높은 불투명한 무작위 문자열이야. 앞의 둘에는 Hex나 Base64를 쓰고, 스캐너가 알아볼 수 있는 접두사가 필요하면 API 키 모드를 써.

API 키에 접두사를 붙이는 이유

GitHub, Stripe, OpenAI, Slack이 키에 접두사(ghp_, sk_live_, xoxb_)를 붙이는 이유는 하나야. 시크릿 스캐너가 주변 문맥 없이 문자열만 보고도 유출된 키를 알아볼 수 있기 때문이지. 접두사가 붙은 키를 공개 저장소에 푸시하면 발급자가 몇 분 안에 폐기할 수 있어. 접두사 없는 32자 Hex 문자열은 커밋 해시처럼 보여서 아무것도 잡아내지 못해. 접두사는 환경도 한눈에 구분되게 해줘. 운영 키를 스테이징 설정에 붙여넣는 사고를 막는 가장 저렴한 방어책이야.

자주 묻는 질문

이 토큰들은 정말 무작위야?

응. 모든 토큰은 crypto.getRandomValues()에서 나와. 브라우저의 암호학적으로 안전한 난수 생성기이고, 운영체제의 엔트로피 풀로 시드를 받아. TLS 세션 키를 만드는 것과 동일한 원시 함수야. 많은 온라인 생성기가 아직도 쓰는 Math.random()은 예측 가능한 의사 난수 생성기라서 보안 토큰을 만드는 데 절대 쓰면 안 돼.

내 토큰이 너희 서버로 전송돼?

아니. 생성은 Web Crypto API를 사용해 전적으로 네 브라우저에서 이루어져. 네트워크 탭을 열고 토큰을 생성해 봐. 요청이 하나도 발생하지 않아. 기록도, 저장도, 전송도 없어. 이후 토큰을 공유하기로 하면 페이지를 떠나기 전에 브라우저에서 암호화돼.

API 키는 어느 정도 길이가 좋아?

엔트로피 128비트야. 이 도구의 API 키 모드가 만들어내는 게 정확히 그거고, 접두사에 16진수 32자가 붙어. 실질적으로 추측이 불가능하고 Stripe, GitHub, AWS가 발급하는 수준과 같아. 특정 규정 요건이 요구할 때만 그 이상으로 올리면 돼.

UUID v4와 무작위 Hex 토큰의 차이는?

UUID v4는 형태가 고정된 무작위 토큰이야. 36자, 하이픈 4개, 버전과 변형에 6비트가 예약되어 무작위는 122비트야. 데이터베이스의 uuid 컬럼처럼 다른 무언가가 그 형태를 기대할 때 써. 그냥 비밀 값이 필요하고 형식을 네가 정할 수 있다면 Hex나 Base64를 써 - 같은 강도에서 더 짧아.

토큰을 한 번에 여러 개 만들 수 있어?

응. 개수를 5, 10, 25로 설정하면 각 토큰이 독립적으로 생성돼. 전체 복사는 한 줄에 하나씩 복사하는데, 대부분의 시드 스크립트와 .env 파일, 비밀번호 관리자가 일괄 가져오기에서 받아들이는 형식이야.

동료에게 토큰을 안전하게 보내려면?

Slack, 이메일, 티켓은 안 돼 - 사본이 무기한 남아서, 나중에 그 채널에 접근할 수 있게 된 사람은 누구나 자격 증명에 접근할 수 있게 돼. 안전하게 공유를 사용해 암호화된 자동 삭제 링크 뒤에 토큰을 두자. 브라우저에서 암호화되고, 키는 URL 프래그먼트에 담겨 우리 서버로는 절대 전송되지 않으며, 비밀은 열람 즉시 또는 만료 시 파기돼.

토큰을 안전하게 공유해야 해?

토큰을 Slack이나 이메일에 붙여넣지 마. 수신자만 열 수 있는 암호화된 자동 삭제 링크로 전송해.