회원가입을 할 때마다 "영문 대소문자, 숫자, 특수문자를 포함해 8자리 이상"이라는 조건을 마주합니다. 많은 사람들이 기억하기 어려워 P@ssw0rd1!처럼 익숙한 단어에 특수문자 하나를 끼워 넣는 방식으로 타협하곤 합니다.
하지만 현대 암호학과 보안 표준에서는 이러한 '짧고 복잡한 비밀번호'가 오히려 해킹에 매우 취약하다고 경고합니다. 비밀번호의 안전성을 결정하는 진짜 요소는 '문자의 기괴함'이 아니라 **'길이에서 오는 엔트로피(Entropy)'**입니다.
1. 비밀번호 강도의 핵심: 정보 엔트로피(Entropy)
컴퓨터가 비밀번호를 무차별 대입(Brute-force)으로 풀어낼 때 필요한 시도 횟수는 **비밀번호 엔트로피(비트 수)**로 측정됩니다. 공식은 다음과 같습니다.
- : 사용할 수 있는 문자 집합의 크기 (숫자 10개, 영문 대소문자 52개, 특수문자 32개 = 총 94개)
- : 비밀번호의 길이
문자 종류()를 늘리는 것보다 길이()를 늘리는 것이 지수함수적으로 훨씬 거대한 조합의 수를 만듭니다.
| 비밀번호 유형 | 예시 | 문자 집합 () | 길이 () | 총 조합 수 | 최신 GPU 무차별 대입 예상 시간 |
|---|---|---|---|---|---|
| 복잡한 8자리 | Tr0u&bL3 |
94종 (대소/숫/특) | 8자리 | 약 () | 약 수 시간 ~ 며칠 이내 (초당 수백억 회 해시 대입) |
| 단순한 12자리 | applebanana |
26종 (소문자만) | 12자리 | 약 () | 약 수개월 ~ 수년 |
| 단어 조합 16자리 | correct-horse |
26종 (소문자/하이픈) | 16자리 | 약 () | 수천만 년 이상 |
| 랜덤 생성 16자리 | kP9#mX2$vL8@qR4! |
94종 (전체 풀) | 16자리 | 약 () | 우주 나이보다 김 (해독 불가) |
최신 그래픽카드(GPU) 클러스터는 일반적인 해시 알고리즘(MD5, NTLM 등)을 초당 수백억 회에서 수조 회까지 연산합니다. 8자리는 특수문자를 제아무리 복잡하게 섞어도 전체 경우의 수가 약 6조 개에 불과해, 최신 하드웨어 앞에서는 순식간에 뚫릴 수 있습니다.
반면 소문자만으로 길게 늘린 16자리나, 4가지 문자 클래스를 고루 섞은 16자리 난수는 공격자 입장에서 계산 자체가 불가능한 장벽이 됩니다.
2. NIST(미국 국립표준기술원)의 최신 비밀번호 권고
세계 보안 표준을 주도하는 미국 국립표준기술원(NIST)은 디지털 신원 지침(SP 800-63B)에서 전통적인 비밀번호 규칙을 전면 수정했습니다.
- 복잡성 규칙 강제 지양: 대문자·소문자·숫자·특수문자를 무조건 1개씩 넣도록 강제하지 말 것을 권고합니다. 사용자가 기억하기 위해 규칙만 겨우 맞춘 뻔한 변형(
P@ssword1!)을 쓰게 만들기 때문입니다. - 최소 길이 중심 규제: 복잡성보다 **길이(최소 8자 이상, 가능하면 15~16자 이상)**를 최우선으로 요구하도록 규정합니다.
- 주기적 변경 강제 폐지: 3개월, 6개월마다 비밀번호를 의무적으로 바꾸게 하면 사람들은 기존 암호 끝자리 숫자만
1에서2로 바꿉니다. 유출 사고가 발생했을 때만 변경하는 것이 훨씬 안전합니다. - 통과암호(Passphrase) 적극 권장:
blue-coffee-pencil-cloud처럼 기억하기 쉬운 무작위 단어 3~4개를 조합한 긴 문장 형태의 암호를 추천합니다.
3. 웹사이트에서 Math.random()을 쓰면 안 되는 이유
비밀번호 생성기를 만들거나 이용할 때 반드시 짚고 넘어가야 할 기술적 사실이 있습니다. 자바스크립트의 표준 Math.random() 함수는 암호학적으로 안전하지 않은 **의사 난수(PRNG)**를 생성합니다. 알고리즘(v8의 xoroshiro128+ 등)의 내부 시드 상태가 몇 개의 출력값만으로 역추적될 수 있기 때문입니다.
안전한 비밀번호 생성기는 반드시 브라우저 웹 표준인 **Web Cryptography API(crypto.getRandomValues)**를 사용해야 합니다. 이는 운영체제의 엔트로피 풀(하드웨어 잡음, 인터럽트 등)에서 진정한 암호학적 난수(CSPRNG)를 추출하므로 예측이 불가능합니다.
JAY Project 비밀번호 생성기로 안전한 암호 만들기
JAY Project 비밀번호 생성기는 다음과 같은 보안 원칙에 기반해 설계되었습니다.
- 온디바이스 100% 클라이언트 생성: 생성된 비밀번호는 네트워크를 통해 서버로 단 1바이트도 전송되지 않으며, 브라우저 메모리 안에서만 만들어집니다.
crypto.getRandomValues기반: 앞서 설명한 웹 표준 암호학적 난수 API를 직접 호출해 수학적으로 예측 불가능한 난수를 보장합니다.- 길이 조절(최대 64자) & 혼동 문자 제외: 16자 이상의 강력한 암호를 원클릭으로 생성할 수 있으며, 손글씨나 화면 식별 시 헷갈리기 쉬운
O와0,l과1을 빼는 옵션을 제공합니다. - zxcvbn 강도 검증: 업계 표준 zxcvbn 알고리즘으로 사전 공격 및 연속 패턴 여부를 실시간 측정해 줍니다.
오늘 이용 중인 중요한 계정들의 비밀번호 길이를 점검해 보세요. 외우기 힘든 8자리 특수문자보다, 비밀번호 관리자나 신뢰할 수 있는 도구로 만든 16자리 이상의 무작위 난수를 등록하는 것이 계정을 지키는 가장 확실한 방법입니다.