"대문자·숫자·특수문자를 섞으세요"라는 규칙은 익숙하지만, 실제로 크래킹 난이도를 결정하는 것은 규칙이 아니라 수학입니다. 이 글에서는 무엇이 비밀번호를 실제로 뚫기 어렵게 만드는지, 그리고 왜 길이가 복잡한 규칙보다 더 중요한지 설명합니다.
엔트로피 — 비밀번호 강도를 재는 실제 척도
비밀번호 크래킹은 결국 가능한 조합을 얼마나 많이 시도해야 하는가의 문제입니다. 이를 수치화한 것이 엔트로피(entropy)이며, 대략 log2(문자집합 크기^길이)로 계산합니다. 예를 들어 소문자만 쓰는 8자리 비밀번호는 문자집합이 26개이므로 log2(26^8) ≈ 37.6비트, 대소문자+숫자+특수문자(약 94개 문자)를 쓰는 8자리는 log2(94^8) ≈ 52.6비트입니다. 얼핏 후자가 훨씬 강해 보이지만, 같은 문자집합으로 길이를 12자로 늘리면 log2(94^12) ≈ 78.8비트로 훨씬 더 큰 폭으로 강해집니다. 즉 문자 종류를 한두 개 추가하는 것보다 길이를 몇 자 늘리는 쪽이 엔트로피를 훨씬 크게 끌어올립니다.
"P@ssw0rd1!"이 약한 이유
규칙 기반으로 문자를 치환한 비밀번호(예: a→@, o→0, i→1)는 자릿수 조건은 만족시키지만 실제 엔트로피는 그리 높지 않습니다. 이런 치환 패턴은 이미 널리 알려져 있어서, 크래킹 도구가 사전 단어에 이런 변형을 자동으로 대입해보는 규칙(rule-based attack)을 기본으로 포함하고 있습니다. 즉 P@ssw0rd1!은 겉보기엔 대문자·숫자·특수문자를 다 포함해 복잡해 보이지만, 사전 공격 입장에서는 password라는 흔한 단어에 몇 가지 뻔한 규칙을 적용한 것에 불과해 순수 무작위 12자 문자열보다 훨씬 빨리 뚫립니다.
실제로 권장되는 기준
다음 기준을 지키면 대부분의 개인·업무 계정에 충분한 강도를 확보할 수 있습니다.
- 길이 최소 12~16자 이상 — 가능하면 더 길게
- 대소문자·숫자·특수문자를 고르게 섞은 무작위 생성 문자열 사용 (사람이 기억하기 쉬운 패턴 피하기)
- 서비스별로 완전히 다른 비밀번호 사용 — 한 곳이 유출돼도 다른 계정은 안전하게 유지
- 가능한 곳에는 2단계 인증(2FA)을 추가로 적용
복잡한 규칙보다 중요한 것 — 재사용 금지와 비밀번호 관리자
실전에서 계정이 뚫리는 가장 흔한 경로는 무차별 대입이 아니라, 다른 사이트에서 유출된 이메일·비밀번호 조합을 그대로 대입해보는 "크리덴셜 스터핑(credential stuffing)"입니다. 아무리 복잡한 비밀번호를 하나 만들어 모든 사이트에 재사용한다면, 그중 한 곳만 유출돼도 나머지 모든 계정이 위험해집니다. 따라서 사이트마다 완전히 다른 무작위 비밀번호를 쓰는 것이 개별 비밀번호의 복잡도보다 훨씬 중요하며, 이를 사람이 직접 기억하며 지키기는 사실상 불가능하므로 비밀번호 관리자를 쓰는 것이 현실적인 해법입니다.
매번 규칙을 고민할 필요 없이 원하는 길이와 문자 종류를 지정하면 암호학적으로 안전한 무작위 비밀번호를 즉시 만들어주는 도구가 있습니다.
길이·문자 구성별 엔트로피 표
엔트로피(비트)는 비밀번호를 무작위로 맞히기까지 필요한 시도 횟수를 log₂로 나타낸 값입니다. 문자당 비트 = log₂(문자셋 크기), 전체 엔트로피 = 문자당 비트 × 길이입니다.
| 문자 구성 | 문자당 비트 | 8자 | 12자 | 16자 | 20자 |
|---|---|---|---|---|---|
| 숫자만 (0-9) | 3.32 | 27 | 40 | 53 | 66 |
| 소문자 (a-z) | 4.70 | 38 | 56 | 75 | 94 |
| 영문 대소문자 (a-z A-Z) | 5.70 | 46 | 68 | 91 | 114 |
| 영문+숫자 (a-z A-Z 0-9) | 5.95 | 48 | 71 | 95 | 119 |
| 영문+숫자+기호 (~94자) | 6.55 | 52 | 79 | 105 | 131 |
숫자는 무작위(random) 비밀번호 기준 엔트로피입니다. 사전 단어·이름·규칙적 패턴은 실제 엔트로피가 이보다 훨씬 낮습니다.
엔트로피별 예상 크랙 시간
| 엔트로피 | 예상 평균 크랙 시간 |
|---|---|
| 40비트 | 약 55초 |
| 50비트 | 약 15.6시간 |
| 60비트 | 약 1.8년 |
| 70비트 | 약 1,870년 |
| 80비트 | 약 192만 년 |
초당 100억(10¹⁰)회 오프라인 추측을 가정한 평균값입니다(약한 해시·GPU 기준). 실제 소요 시간은 저장 측 해시 알고리즘(bcrypt·Argon2 등은 훨씬 느림)에 따라 크게 달라집니다. 실무 권장선은 대략 70비트 이상입니다.
🔑 이 작업, 도구로 바로 해보세요
안전한 비밀번호 만드는 기준과 생성 방법 — 길이·문자 조합·엔트로피로 보는 비밀번호 강도