비밀번호 생성기
사용자 정의 길이와 문자 유형으로 강력한 비밀번호 생성
0O, 1lI와 같은 혼동 문자 제외
비밀번호 생성기란?
비밀번호 생성기는 무작위 강력한 비밀번호를 자동으로 생성하는 도구입니다. 암호학적으로 안전한 난수 생성기를 사용하여 사용자 정의 길이와 문자 유형(대문자, 소문자, 숫자, 특수 기호)에 따라 높은 보안의 비밀번호를 생성합니다. 강력한 비밀번호는 계정 보안의 첫 번째 방어선이며 무차별 대입 공격과 사전 공격을 효과적으로 방지합니다. 안전한 비밀번호는 길이뿐 아니라 서비스별 고유성도 중요합니다. 생성한 값은 신뢰할 수 있는 비밀번호 관리자에 저장하고, 재사용이나 평문 공유를 피해야 합니다.
사용 방법
생성 단계
- 비밀번호 길이 선택 (최소 12자 권장)
- 문자 유형 선택: 대문자, 소문자, 숫자, 기호
- 선택적으로 0O, 1lI 같은 혼동하기 쉬운 문자 제외
- 생성 버튼을 클릭하고 만족할 때까지 반복하세요
비밀번호 강도
- 약함: 8자 미만 또는 단일 문자 유형
- 보통: 문자와 숫자가 혼합된 8~11자
- 양호: 여러 문자 유형이 포함된 12~15자
- 강함: 모든 문자 유형이 포함된 16자 이상
보안 팁
- 모든 비밀번호는 로컬에서 생성되며 서버에 업로드되지 않습니다
- 웹사이트마다 다른 비밀번호를 사용하세요
- 비밀번호 관리자를 사용하여 비밀번호를 안전하게 보관하세요
- 중요 계정의 비밀번호를 정기적으로 변경하세요
- 비밀번호에 개인정보를 사용하지 마세요
활용 사례
기술 원리
비밀번호 생성기는 crypto.getRandomValues(new Uint32Array(n))에서 난수를 추출합니다. 이 함수는 운영체제의 엔트로피 풀(Linux의 getrandom, Windows의 BCryptGenRandom, macOS/iOS의 SecRandomCopyBytes)에서 암호학적으로 안전한 의사 난수 값으로 타입 배열을 채웁니다. 이는 W3C Web Cryptography API에서 정의한 CSPRNG(암호학적 안전 의사 난수 생성기)로, V8에서 xorshift128+ 알고리즘을 사용하며 출력의 작은 샘플로부터 예측 가능하다고 명시적으로 문서화된 Math.random()과는 다릅니다. 문자 풀은 사용자가 선택한 문자 클래스로 구성됩니다: 대문자(26자 A-Z), 소문자(26자 a-z), 숫자(10자 0-9), 기호(!@#$%^&*()_+-=[]{}|;:,.<>?의 32자)로 최대 94자의 풀이 생성됩니다. 사용자 정의 문자 집합이나 제외 목록(모호한 문자 필터를 포함하여 i, I, l, L, 1, o, O, 0을 제거)으로 풀을 추가로 정교화합니다. 각 비밀번호 문자는 array[i] % pool.length로 선택되며, CSPRNG 출력이 32비트에서 균일 분포이고 모듈로 바이어스(|pool|이 2^32를 균등하게 나누지 않음)가 256자 미만의 풀에 대해 무시할 수 있기 때문에 균일 분포됩니다—바이어스는 0.00000006% 미만으로 실무적 우려 수준을 훨씬 밑돕니다. 비밀번호 강도는 탐색 공간의 크기로 측정됩니다: 크기 C의 풀과 길이 L의 비밀번호의 경우 가능한 비밀번호 수는 C^L입니다. 비트 단위의 엔트로피는 log2(C^L) = L × log2(C)입니다. 네 가지 문자 클래스가 모두 활성화된(C=94) 16자 비밀번호의 경우, 이는 94^16 ≈ 4.4 × 10^31개의 조합, 즉 약 105비트의 엔트로피를 생성합니다. 초당 10^12회의 추정 공격 속도(대규모 GPU 클러스터가 NTLM과 같은 빠른 해시에 대해 발휘하는 처리량)에서 무차별 탐색은 약 4.4 × 10^19초가 소요되며, 이는 우주의 나이보다 훨씬 깁니다. 이 모델은 공격자가 모든 조합을 테스트해야 한다고 가정하고(사전이나 패턴 기반의 단축 경로 없이) 비밀번호가 평문이 아닌 bcrypt나 Argon2id와 같은 느리고 솔팅된 알고리즘으로 해시되었다고 가정합니다. NIST SP 800-63B는 사용자가 선택한 비밀번호의 최소 8자, 기계 생성 자격 증명의 최소 6자의 무작위 생성 문자를 권장하며 문자 집합을 문서화해야 합니다. 생성기의 4~64자 범위는 PIN 코드부터 고엔트로피 기계 자격 증명까지 모든 것을 다룹니다. 문자로 시작 옵션은 첫 번째 문자를 [A-Za-z]에서 추출하여 비밀번호가 문자로 시작해야 하는 레거시 시스템의 요구 사항을 충족합니다.
- CSPRNG 소스: crypto.getRandomValues()는 OS 커널의 CSPRNG(getrandom/BCryptGenRandom/SecRandomCopyBytes)에서 엔트로피를 가져옵니다. Math.random()(xorshift128+)과 달리 예측 불가능하고, 페이지에서 시드할 수 없으며, 자격 증명 생성에 적합합니다.
- 문자 공간 수학: 네 가지 클래스가 모두 활성화되면 풀 크기는 94이고, 문자당 엔트로피는 log2(94) ≈ 6.55비트입니다. 16자 비밀번호는 약 105비트의 엔트로피를 가지며, 길이를 32자로 두 배로 늘리면 약 210비트로 증가합니다.
- 모듈로 선택: array[i] % pool.length는 32비트 CSPRNG 출력을 문자 인덱스로 매핑합니다. 256자 미만의 풀에 대해 바이어스는 6 × 10^-8% 미만으로 암호학적으로 무의미합니다.
- 무차별 대입 저항 모델: 초당 10^12회 추정(GPU 클러스터 규모)에서 94기호 16자 비밀번호를 탐색하려면 약 10^19초가 소요됩니다. 단, 이는 빠른 해시를 가정한 것이며, cost factor 12의 bcrypt는 공격자를 초당 약 10^4회로 제한하여 8자 비밀번호도 탄력적으로 만듭니다.
- 모호한 문자 제외: 필터는 {i, I, l, L, 1, o, O, 0}(8자)을 제거하여 풀을 94에서 86으로 줄이며, 문자당 약 0.6비트의 엔트로피를 소비합니다. 이는 수동 전사 시나리오에서의 사용성 향상을 위해 허용 가능한 수준입니다.
- NIST SP 800-63B 부합: 표준은 기계 생성 비밀의 최소 6자 무작위 선택 문자를 요구하고 문자 공간 문서화를 권장합니다. 생성기의 프리셋(간단 8자, 강력 20자)은 서로 다른 보증 수준에 매핑됩니다.
- localStorage 기록: 최근 생성된 비밀번호 10개가 window.localStorage에 저장됩니다. 이는 오리진과 브라우저 프로필에 스코프되며, 기록을 삭제하면 저장소에서 제거되지만 디스크 수준 포렌식 도구로 복구할 수 있습니다. localStorage가 브라우저 프로필 디렉토리에 평문 SQLite 데이터베이스로 저장되기 때문입니다.
예시
강력한 비밀번호 (혼합 문자 종류)
Kx9#mP2$vL7@nQ4! - 16자, 네 가지 종류 모두 포함 (대문자/소문자/숫자/기호)
강도: 매우 높음. 초당 100억 회를 시도해도 무차별 대입에 수 세기가 걸린다PIN 코드 (4자리)
8527 - 4자리 숫자
강도: 10,000개 조합; 속도 제한과 잠금이 적용된 기기 잠금 해제용으로만 적합하며 온라인 계정에는 부적합합니다비밀번호 강도 비교
8자, 소문자만 : 26^8 ≈ 2.08e11 조합
8자, 혼합 문자 종류 : 94^8 ≈ 6.10e15 조합
16자, 혼합 문자 종류 : 94^16 ≈ 3.7e31 조합
참고: 글자 하나가 추가될 때마다 키스페이스가 8배가 아니라 94배 증가합니다 - 길이가 문자 종류 수보다 더 중요합니다자주 묻는 질문
비밀번호가 브라우저에서 생성되나요?
네. 이 페이지는 Web Crypto API의 crypto.getRandomValues를 사용하여 암호학적으로 안전한 무작위 바이트를 생성합니다. 비밀번호는 기기를 떠나지 않으며, 기록되지 않고, 결정론적 시드에서 파생되지도 않습니다. 더 확실히 하려면 페이지를 새로고침하여 새로운 엔트로피 시퀀스를 시작하세요.
어떤 길이와 문자 조합을 골라야 하나요?
온라인 계정에는 대문자, 소문자, 숫자, 기호를 포함한 16자 이상이 현대의 최소 기준입니다. 마스터 비밀번호(비밀번호 관리자, 암호화 키)에는 20자 이상 또는 6~7개 단어로 된 패스프레이즈가 더 안전합니다. 일정 수준 이상부터는 문자 집합의 복잡도보다 길이가 더 중요합니다.
방금 생성한 비밀번호를 일부 사이트가 거부하는 이유는 무엇인가요?
어떤 사이트는 여전히 의외의 제한을 둡니다. 최대 길이(보통 12~20자), 기호 금지, 특정 기호만 허용, 공백 금지 같은 규칙이 있죠. 페이지에는 문자 토글이 있어 규칙에 맞출 수 있습니다. 그런 정책은 오히려 보안을 약화시키니 해당 사이트에 신고하시는 것이 좋습니다.
일부러 제외되는 문자가 있나요?
‘비슷한 문자 제외’ 옵션을 켜면 0/O, 1/l/I처럼 종이나 메모지에서 잘못 읽기 쉬운 문자 쌍을 제외합니다. 디지털로만 사용할 비밀번호는 이 옵션을 끄고 최대한의 엔트로피를 확보하세요.
긴 무작위 비밀번호가 패스프레이즈보다 안전한가요?
엔트로피가 같다면 둘 다 무차별 대입으로 깨기 어려운 정도가 같습니다. 16자 혼합 비밀번호는 2000개 단어 사전에서 무작위로 뽑은 6단어 패스프레이즈와 거의 같은 수준입니다. 패스프레이즈는 입력하고 외우기가 쉽고, 무작위 문자열은 관리자에서 붙여넣기가 쉽습니다. 용도에 맞춰 선택하세요.
비밀번호 관리자의 마스터 키로 신뢰해도 되나요?
네 — 무작위성의 출처는 브라우저가 HTTPS 키에 사용하는 것과 같은 Web Crypto API입니다. 다만 마스터 키나 복구 코드처럼 매우 중요한 비밀에는 신뢰 사슬에서 브라우저 자체를 제거하기 위해 주사위(diceware)를 굴리거나 오프라인 도구를 선호하는 사람들이 많습니다.
여기서 생성한 비밀번호를 그대로 저장해도 되나요?
아니요. 페이지는 비밀번호를 저장하지 않습니다. 즉시 비밀번호 관리자(1Password, Bitwarden, KeePass, 브라우저 내장 관리자)에 복사해 두세요. 페이지를 닫거나 새로고침하면 영구적으로 사라집니다.