본문으로 건너뛰기

랜덤 키 생성

Random Key Generator

원하는 길이의 암호학적 난수를 16진수·Base64·Base64URL로 만들어 앱 시크릿에 씁니다.

`SECRET_KEY`나 JWT 서명 키는 정해진 길이의 무작위 바이트를 정해진 인코딩으로 담은 것이어야 하는데, 흔한 임시방편들 — 자판 두들기기, UUID, 프로젝트 이름의 해시 — 은 보기보다 엔트로피가 부족합니다. 이 도구는 그 바이트를 만들고 인코딩합니다.

🔒 브라우저 안에서만 처리randomkeysecretgenerator

무작위 시크릿

RV_8yMiETZ3JS0fBnhnsXrUwRw10PUTy9oJ5dZ9peAo
JWK(oct) 형태로 보기
{
  "kty": "oct",
  "k": "RV_8yMiETZ3JS0fBnhnsXrUwRw10PUTy9oJ5dZ9peAo",
  "ext": true
}

WebCrypto 키

실제 CryptoKey를 JWK로 내보낸 것입니다. crypto.subtle에 그대로 쓸 수 있습니다.

모든 바이트는 crypto.getRandomValues에서 나오며 이 탭을 벗어나지 않습니다. 서버에서 만들지도, 서버로 보내지도 않습니다.

사용 방법

  1. 길이를 바이트로 정합니다

    32바이트(256비트)면 HMAC-SHA256·AES-256·세션 키 등 거의 전부를 감당합니다. 이런 용도에서는 더 길다고 강해지지 않고, 알고리즘이 쓸모 있는 크기를 정합니다.

  2. 설정이 요구하는 인코딩을 고릅니다

    16진수는 해석의 여지가 없고 길이가 두 배입니다. Base64URL은 `+`·`/`·`=`를 피하므로 URL·헤더나 다른 프로그램이 읽을 `.env` 파일에 적합합니다.

  3. 저장소가 아니라 비밀 관리소에 넣습니다

    한 번 커밋된 키는 아무리 빨리 되돌려도 폐기해야 하는 키입니다. 환경마다 다른 키를 만드십시오.

자주 묻는 질문

무작위성은 어디서 오나요?

운영체제가 시드를 공급하는 브라우저의 CSPRNG, `crypto.getRandomValues`입니다. 전송하지도 저장하지도 않습니다.

브라우저에서 만든 키가 `openssl rand`만큼 좋은가요?

무작위성의 품질은 같습니다. 둘 다 운영체제에서 가져옵니다. 차이는 키가 표시되는 자리입니다. 동기화되는 브라우저의 화면일 수 있고, DOM을 지켜보는 확장이 있을 수도 있습니다. 통제하지 못하는 기기에서는 명령줄을 쓰십시오.

UUID 용도로 써도 되나요?

UUID 생성기를 쓰십시오. UUIDv4는 버전과 변형에 6비트를 쓰는 고정된 형식이라, 그냥 무작위 문자열은 유효한 UUID가 아닙니다.

이 도구로 이어지는 것

다음 단계

이 도구의 결과를 그대로 받을 수 있는 도구들입니다.