무작위 비밀번호 생성기 쉽게 이해하기 — 개념과 원리
이 도구는 브라우저에 내장된 암호학적으로 안전한 난수 생성기를 이용해 내 기기 안에서 무작위 비밀번호를 만들고, 그 엔트로피(비트)를 알려 줍니다. 사람이 지어낸 비밀번호와 달리 생성된 비밀번호는 강도를 정확히 계산할 수 있어, 비밀번호 관리자에 저장할 계정이나 와이파이 키, API 비밀값에 알맞습니다.
계산 방법
- 문자 집합: I·O를 뺀 대문자 24개, l을 뺀 소문자 25개, 숫자 2~9의 8개로 모두 57개입니다. 0과 O, 1과 l·I처럼 헷갈리는 문자를 뺐습니다. 기호를 포함하면 13개(! @ # $ % ^ & * - _ = + ?)가 더해져 70개가 됩니다.
- 생성 방식: 글자마다 crypto.getRandomValues로 32비트 난수를 뽑습니다. 2^32 아래에서 집합 크기의 가장 큰 배수 이상인 값은 버리고 다시 뽑으며(기각 표본추출), 나머지는 집합 크기로 나눈 나머지로 문자를 고릅니다. 대문자·소문자·숫자(선택 시 기호)가 하나라도 빠지면 다시 만듭니다. 길이는 최대 256자입니다.
- 엔트로피(비트) = 필요한 문자 종류가 모두 들어간 비밀번호 개수의 log₂이며, 포함–배제 원리로 셉니다. 길이 × log₂(문자 집합 크기)보다 조금 작습니다.
'다시 생성' 숫자를 바꾸면 새 비밀번호가 만들어집니다.
원리
엔트로피는 생성기가 만들 수 있는, 확률이 똑같은 비밀번호의 개수를 비트로 센 것입니다. 70개 문자로 20자리를 만들면 70^20가지입니다. 다만 모든 문자가 같은 확률일 때만 성립합니다. 2^32는 70의 배수가 아니어서 그냥 나머지를 취하면 일부 문자가 조금 더 자주 나오는데, 기각 표본추출이 이 치우침을 없애 글자마다 log₂ 70 ≈ 6.13비트를 온전히 갖게 합니다.
예제 풀이
- 입력값: 길이 20, 기호 포함
- 문자 집합: 57 + 13 = 70, 글자당 log₂ 70 = 6.129283비트
- 모든 문자열을 세면 20 × 6.129283 = 122.5856603비트지만, 그중 약 10.4%는 빠진 종류가 있어 만들어지지 않으므로 엔트로피는 122.4267914비트입니다.
- 예시 결과는 w%?tKmFrSfMhitxK4R?_이며, 실제 비밀번호는 생성할 때마다 달라집니다.
- 기호를 빼면 집합이 57개가 되어 같은 길이에서 약 116.6비트입니다.
결과 해석
무작위 비밀번호가 약 80비트를 넘으면 빠른 해시에 대한 오프라인 무차별 대입으로도 사실상 찾을 수 없고, 128비트는 현대 암호 키와 같은 수준입니다. 기호를 허용하지 않는 사이트라면 기호를 끄고 한두 글자를 더하시면 됩니다.
흔한 실수
- 외우기 쉽게 생성된 비밀번호를 고치는 경우. 실제 엔트로피가 낮아집니다.
- 모든 종류를 넣는 규칙 때문에 비밀번호가 약해진다고 걱정하는 경우. 여기서 줄어드는 양은 약 0.16비트뿐입니다.
- 비밀번호 관리자 대신 일반 메모에 저장하는 경우
자주 묻는 질문
비밀번호는 몇 자리가 적당한가요?
비밀번호 관리자에 저장한다면 16~20자리(약 95~120비트)로 대부분 충분합니다.
왜 일부 문자가 빠져 있나요?
O, 0, l, 1, I처럼 헷갈리기 쉬운 문자를 빼서 읽고 입력하기 쉽게 했습니다.
비밀번호가 어딘가에 저장되나요?
아닙니다. 기기 안에서 만들어지며 페이지를 떠나면 사라집니다.
출처: W3C Web Cryptography API, Crypto.getRandomValues() · NIST SP 800-90A Rev. 1, Recommendation for Random Number Generation Using Deterministic Random Bit Generators