안전한 비밀번호는 몇 자리? 엔트로피로 계산해 본 길이별 안전도
"비밀번호는 8자 이상, 영문·숫자·특수문자 조합"이라는 규칙은 어디서나 볼 수 있어요. 그런데 이 규칙대로 만든 8자리 비밀번호가 실제로 얼마나 안전할까요? 비밀번호의 강도를 나타내는 엔트로피로 계산해 보면 길이가 종류보다 훨씬 중요하다는 걸 알 수 있어요.
엔트로피란
엔트로피는 비밀번호를 맞히기 위해 시도해야 하는 경우의 수를 2의 거듭제곱으로 나타낸 값이에요. 쓸 수 있는 문자가 N종류이고 길이가 L이면, 경우의 수는 N의 L제곱이고 엔트로피는 L × log₂N 비트예요. 1비트가 늘 때마다 경우의 수가 두 배가 돼요.
냅다 비밀번호 생성기는 헷갈리기 쉬운 문자(소문자 l, 대문자 I·O, 숫자 0·1)를 빼서 소문자 25개, 대문자 24개, 숫자 8개, 특수문자 13개를 써요. 이 기준으로 계산하면 다음과 같아요.
| 사용하는 문자 | 종류 수 | 한 글자당 | 8자리 | 12자리 | 16자리 |
|---|---|---|---|---|---|
| 숫자만 | 10 | 3.32비트 | 27비트 | 40비트 | 53비트 |
| 소문자만 | 25 | 4.64비트 | 37비트 | 56비트 | 74비트 |
| 대소문자 | 49 | 5.61비트 | 45비트 | 67비트 | 90비트 |
| 대소문자+숫자 | 57 | 5.83비트 | 47비트 | 70비트 | 93비트 |
| 전부 | 70 | 6.13비트 | 49비트 | 74비트 | 98비트 |
표를 보면 특수문자까지 넣은 8자리(49비트)가 소문자만 쓴 12자리(56비트)보다 약해요. 문자 종류를 늘리는 것보다 길이를 몇 자 늘리는 게 효과가 커요.
실제로 뚫리는 데 걸리는 시간
유출된 비밀번호 데이터를 고성능 그래픽카드로 대입하는 공격을 가정해, 초당 100억 번 시도한다고 해 볼게요. 평균적으로는 전체 경우의 절반을 시도하면 맞힌다고 보고 계산했어요.
- 전부 섞은 8자리: 70⁸ ÷ 2 ÷ 100억 ≈ 약 8시간
- 전부 섞은 12자리: 약 2만 2천 년
- 전부 섞은 16자리: 사실상 불가능한 수준
실제 속도는 사이트가 비밀번호를 어떤 방식으로 저장했는지에 따라 크게 달라서, 이 숫자는 비교용 어림값이에요. 그래도 8자리와 12자리의 차이가 몇 시간과 몇만 년만큼 벌어진다는 점은 분명해요.
무작위가 중요한 이유
위 계산은 비밀번호가 완전히 무작위일 때만 성립해요. "Password1!"이나 "love2024!"처럼 단어에 숫자와 기호를 붙인 비밀번호는 겉으로는 규칙을 다 지켰지만, 공격자는 자주 쓰는 단어와 패턴부터 시도하기 때문에 금방 뚫려요. 사람이 머리로 만든 비밀번호는 생각보다 예측 가능해요.
비밀번호 관리 요령
- 12자리 이상, 가능하면 16자리로 무작위 생성하기
- 사이트마다 다른 비밀번호 쓰기: 한 곳이 유출돼도 다른 계정은 안전해요
- 비밀번호 관리자(브라우저 기본 기능 포함)에 저장하기: 무작위 비밀번호를 외울 필요가 없어요
- 중요한 계정은 2단계 인증 켜기
냅다 비밀번호 생성기는 브라우저 안에서 암호용 난수로 만들고, 만든 비밀번호를 서버로 보내지 않아요. 길이를 16으로 맞추고 네 종류를 모두 켠 뒤 복사해서 쓰면 돼요.