안전한 비밀번호 생성기
길이와 문자 종류만 고르면 암호학적으로 안전한 난수로 비밀번호를 만들어 드립니다. 생성된 비밀번호는 서버로 전송되지 않습니다.
비밀번호의 강도는 '복잡함'이 아니라 '길이'가 결정합니다
많은 사람이 P@ssw0rd! 처럼 기호와 숫자를 섞으면 안전하다고 믿습니다. 하지만 이런 치환은 공격자가 가장 먼저 시도하는 규칙입니다. a를 @로, o를 0으로, i를 1로 바꾸는 변형은 이미 모든 크래킹 도구에 사전 규칙으로 내장되어 있어서, 원래 단어가 사전에 있다면 치환을 아무리 해도 추가되는 안전성은 거의 없습니다.
실제로 강도를 결정하는 것은 엔트로피입니다. 사용 가능한 문자가 N종이고 길이가 L일 때 엔트로피는 L × log₂N 비트로 계산됩니다. 소문자·대문자·숫자·기호를 모두 쓰면 문자 후보는 약 86종이고, log₂86 ≈ 6.43이므로 한 글자가 약 6.4비트를 기여합니다. 즉 한 글자 늘리는 것이 문자 종류를 늘리는 것보다 훨씬 효율적입니다.
| 길이 | 문자 종류 | 엔트로피 | 초당 1,000억 회 대입 시 평균 해독 시간 |
|---|---|---|---|
| 8자 | 소문자만 | 약 38비트 | 약 1초 |
| 8자 | 대소문자+숫자+기호 | 약 51비트 | 약 3시간 |
| 12자 | 대소문자+숫자+기호 | 약 77비트 | 약 24,000년 |
| 16자 | 대소문자+숫자+기호 | 약 103비트 | 사실상 무한 |
| 20자 | 소문자만 | 약 94비트 | 약 3천억 년 |
표를 보면 흥미로운 사실이 보입니다. 소문자만 쓴 20자가 모든 문자를 섞은 12자보다 오히려 안전합니다. 외우기 어려운 기호를 억지로 끼워 넣는 대신 길이를 늘리는 편이 기억하기도 쉽고 안전하기도 합니다.
정말 위험한 것은 약한 비밀번호가 아니라 '같은 비밀번호'입니다
현실에서 계정이 털리는 가장 흔한 경로는 무차별 대입이 아닙니다. 크리덴셜 스터핑, 즉 어딘가에서 유출된 아이디·비밀번호 조합을 다른 사이트에 그대로 넣어 보는 공격입니다. 작은 쇼핑몰 한 곳이 뚫려서 내 이메일과 비밀번호가 유출되면, 공격자는 그 조합을 포털·은행·SNS에 순서대로 넣어 봅니다.
이때 아무리 20자짜리 강력한 비밀번호를 썼더라도, 그것을 여러 사이트에 재사용했다면 방어력은 0입니다. 유출된 비밀번호는 뚫는 것이 아니라 그냥 입력하면 되기 때문입니다. 그래서 원칙은 하나입니다.
- 사이트마다 전부 다른 비밀번호를 씁니다. 예외를 두지 않습니다.
- 다르게 만들되 규칙으로 만들지 않습니다.
abc1!naver,abc1!google같은 방식은 하나만 유출되면 나머지가 즉시 추론됩니다. - 외울 수 없는 만큼 비밀번호 관리자에 맡깁니다. 브라우저 내장 관리자도 아무것도 안 쓰는 것보다 훨씬 낫습니다.
- 관리자의 마스터 비밀번호 하나만 아주 길게 외웁니다. 여기에 20자 이상을 투자하세요.
- 가능한 곳은 반드시 2단계 인증을 켭니다. 비밀번호가 유출돼도 한 겹이 더 남습니다.
특히 이메일 계정은 다른 모든 서비스의 비밀번호 재설정 링크가 도착하는 곳이므로 사실상 마스터키입니다. 이메일 계정만큼은 다른 어디에서도 쓰지 않는 고유하고 긴 비밀번호와 2단계 인증을 반드시 적용하세요.
이 생성기가 동작하는 방식
이 도구는 브라우저의 crypto.getRandomValues()를 사용합니다. 자바스크립트의 흔한 Math.random()은 통계적으로 고르게 보이지만 예측 가능한 의사난수라서 보안 용도로는 부적합합니다. 반면 crypto.getRandomValues()는 운영체제의 암호학적 난수원에서 값을 받아 오기 때문에 이전 출력으로 다음 출력을 추측할 수 없습니다.
난수를 문자 범위로 줄일 때 단순히 나머지 연산만 쓰면 앞쪽 문자가 미세하게 더 자주 뽑히는 모듈로 편향이 생깁니다. 이 도구는 범위를 벗어난 값을 버리고 다시 뽑는 방식으로 편향을 제거합니다. 또한 선택한 문자 종류가 결과에 최소 한 글자씩은 반드시 포함되도록 배치한 뒤 전체를 다시 섞습니다.
- 생성은 전적으로 당신의 기기 안에서 이루어집니다. 서버로 전송되는 값이 없습니다.
- 생성된 비밀번호는 어디에도 저장되지 않습니다. 새로고침하면 사라집니다.
- ‘헷갈리는 문자 제외’를 켜면 0·O·1·l·I를 뺍니다. 손으로 옮겨 적거나 읽어 줘야 할 때 유용하지만 문자 후보가 줄어 엔트로피는 조금 낮아집니다.
- 길이는 4~128자 범위에서 조정됩니다. 사이트가 길이를 제한한다면 허용하는 최대치를 쓰세요.
표시되는 ‘예상 해독 시간’은 공격자가 초당 1,000억 회 대입할 수 있다고 가정한 값입니다. 이는 고성능 GPU 여러 대로 취약한 해시를 공격하는 상황을 상정한 보수적인 수치이며, 실제 서비스가 제대로 된 해시 함수를 쓴다면 훨씬 오래 걸립니다.
만든 비밀번호를 안전하게 다루는 법
좋은 비밀번호를 만들어도 보관을 잘못하면 소용이 없습니다. 실무에서 가장 흔한 실수는 메모장 파일, 메신저 ‘나에게 보내기’, 이메일 임시보관함, 스프레드시트에 평문으로 적어 두는 것입니다. 이 위치들은 기기 하나만 잠금 해제되면 통째로 노출됩니다.
- 권장 — 비밀번호 관리자에 저장하고 마스터 비밀번호는 머리로만 기억합니다.
- 차선 — 브라우저 내장 저장소를 쓰되 기기 잠금과 동기화 암호를 반드시 설정합니다.
- 가능 — 종이에 적어 금고나 서랍에 둡니다. 원격 공격에는 오히려 안전합니다.
- 피하세요 — 평문 메모 앱, 메신저 대화방, 이메일, 클라우드 문서, 휴대폰 사진첩 캡처.
비밀번호를 주기적으로 강제 변경하는 관행은 최근 여러 보안 기관 지침에서 권장 목록에서 빠졌습니다. 자주 바꾸라고 하면 사람들이 pw2025-01 → pw2025-02 처럼 예측 가능한 변형을 쓰기 때문입니다. 대신 유출 정황이 있을 때 즉시 변경하는 편이 훨씬 효과적입니다.