시크릿 키 생성기
openssl rand 없이, 브라우저에서 바로 만드는 랜덤 키·시크릿
값은 이 브라우저 안에서만 만들어집니다.
브라우저의 crypto.getRandomValues() 로 생성하며, 서버로 전송하지 않고 저장·기록하지도 않습니다. 주소창(URL)이나 브라우저 저장소에도 남기지 않으므로, 이 페이지를 닫으면 값은 사라집니다. 복사해 둔 값의 보관은 사용자 책임입니다.
키의 세기를 정하는 것은 글자 수가 아니라 바이트 수입니다. 48바이트는 384비트의 난수이고, 이것을 Base64로 적으면 64글자가 됩니다. 64글자짜리 문자열을 보고 "64바이트 키"라고 부르면 실제보다 강해 보이게 되므로, 이 도구는 두 숫자를 항상 함께 보여 줍니다.
같은 48바이트를 형식별로 적으면
| 형식 | 48바이트일 때 글자 수 | 쓰이는 문자 |
|---|---|---|
| Base64 | 64자 | A-Z a-z 0-9 + / |
| Hex | 96자 | 0-9 a-f |
| Base64URL | 64자 | A-Z a-z 0-9 - _ |
Base64는 3바이트를 4글자로 적습니다. 그래서 바이트 수가 3의 배수일 때만 패딩(=) 없이 딱 떨어집니다. 48은 3의 배수라 64글자가 정확히 나오고, 32바이트처럼 3의 배수가 아니면 끝에 = 가 붙습니다.
| 용도 | 권장 길이 | 권장 형식 |
|---|---|---|
| 세션 시크릿 · 쿠키 서명 키 | 32바이트 | Base64 |
| JWT 서명 키 (HS256) | 32바이트 | Base64URL |
| API 키 · 웹훅 검증 토큰 | 32바이트 | Base64URL |
| AES-256 키 | 32바이트 | Hex |
| 여유 있게 잡고 싶을 때 (기본값) | 48바이트 | Base64 |
32바이트(256비트)를 넘기면 무차별 대입으로 맞히는 것은 현실적으로 불가능해집니다. 그보다 길게 잡는 것은 대체로 여유일 뿐 실질적인 강도 차이는 없으니, 길이를 늘리는 대신 키를 어디에 어떻게 보관할지에 시간을 쓰는 편이 낫습니다.
서버가 키를 만들어 내려보내면, 그 값이 서버의 액세스 로그나 중간 프록시, 오류 추적 도구에 남을 수 있습니다. 한 번이라도 남으면 그 키는 더 이상 비밀이 아닙니다. 이 도구는 브라우저에서 만들어 네트워크에 아예 흘리지 않는 쪽을 택했습니다.
난수는 crypto.getRandomValues() 로 얻습니다. 운영체제가 제공하는 암호학적으로 안전한 난수원이라, 다음 값을 예측할 수 없습니다. Math.random() 은 예측이 가능해 키 생성에 쓰면 안 되며, 이 도구는 사용하지 않습니다.
직접 확인하고 싶다면 개발자 도구의 네트워크 탭을 열어 둔 채 새로 만들기를 눌러 보세요. 아무 요청도 발생하지 않습니다. 이 페이지를 내려받아 인터넷 연결 없이 열어도 똑같이 동작합니다.
