엔트로피 수치를 읽는 법
아래 구간은 비트 수를 보여 주기 위한 묶음이며, 오프라인 공격에 무너지는 비밀번호와 그렇지 않은 것을 가르도록 정했습니다. 옆에 적힌 결과는 임의로 붙인 것이 아니라 엔트로피에서 계산한 것입니다.
| 엔트로피 | 구간 | 실제로 뜻하는 것 |
|---|---|---|
| 40비트 미만 | 약함 | 오프라인 공격으로 거의 즉시 전부 훑을 수 있음 |
| 40 – 59비트 | 보통 | 가벼운 추측은 견디지만 작심한 오프라인 공격에는 무너짐 |
| 60 – 79비트 | 강함 | 잘 고른 해시를 쓰면 통상적인 오프라인 공격의 범위 밖 |
| 80비트 이상 | 매우 강함 | 약점은 전수 탐색이 아니라 재사용과 피싱 |
- 비밀번호는 플랫폼의 암호학적으로 안전한 난수원을 써서 브라우저 안에서 생성되며, 이 사이트의 모든 분석 기능과 AI 기능에서 의도적으로 제외되어 있습니다. 결코 전송되지 않습니다.
- NIST SP 800-63B는 검증자에게 문자 종류를 섞도록 요구하지 말고 주기적인 비밀번호 변경을 강제하지도 말되, 유출 정황이 있으면 변경을 강제하라고 권고합니다.
비밀번호 엔트로피가 재는 것
엔트로피는 생성기가 만들어 낼 수 있었던, 확률이 서로 같은 비밀번호의 개수를 비트로 나타낸 것입니다. N개 문자로 이뤄진 집합에서 각 문자를 독립적으로 뽑아 길이 L을 만드는 생성기의 엔트로피는 L x log2(N) 비트이며, 1비트가 늘 때마다 공격자가 시도해야 할 후보의 수가 두 배가 됩니다.
엔트로피는 생성기의 성질이지 그것이 만들어 낸 문자열의 성질이 아닙니다. 특정 비밀번호가 자기만의 엔트로피를 갖지는 않습니다. 문제는 오직 그것이 뽑혀 나온 공간이 얼마나 컸는가입니다. 그래서 스스로 지어낸 비밀번호에는 비트 수를 정직하게 매길 수 없고, 생성된 비밀번호에는 매길 수 있습니다.
길이가 복잡성을 이기는 이유도 여기에 있습니다. 76개 문자 집합에서 뽑은 20자 비밀번호에 한 글자를 더하면 약 6.2비트가 늘지만, 짧은 비밀번호에 문자 종류를 통째로 하나 더하는 것은 그보다 훨씬 적게 늘립니다. NIST의 지침이 이를 반영합니다. SP 800-63B는 검증자에게 문자 종류를 섞도록 요구하는 구성 규칙을 부과하지 말고 64자 이상의 비밀번호를 허용하라고 권합니다.
비밀번호 생성기 사용법
- 길이를 고릅니다. 길이를 늘리는 것이 할 수 있는 가장 효과적인 단일 조치입니다.
- 어떤 문자 종류를 넣을지 고릅니다. 종류를 넣을 때마다 집합이 커지고 문자당 엔트로피가 올라갑니다.
- 비밀번호를 소리 내어 읽거나 손으로 옮겨 적을 예정이라면 비슷해 보이는 문자를 뺍니다. 엔트로피를 조금 내주는 대신 옮겨 적을 때의 실수를 줄이는 거래입니다.
- 엔트로피 수치를 확인합니다. 이것이 강도의 정직한 척도이며, 전부 훑는 데 걸리는 연수는 같은 수치를 시간으로 바꿔 놓은 것입니다.
- 비밀번호를 재사용하지 말고 비밀번호 관리자에 저장하세요. 재사용은 엔트로피가 아무리 커도 무력화합니다.
엔트로피 수치의 계산식
각 문자를 집합에서 독립적이고 균등하게 뽑으므로 가능한 비밀번호의 수는 집합 크기의 길이 제곱입니다. 엔트로피는 그 수의 밑이 2인 로그입니다.
시간 수치는 보호가 부실한 빠른 해시를 상대로 초당 1조 번 추측하는 오프라인 공격을 가정하고, 공간의 절반을 탐색하는 데 걸리는 기대 시간을 보여 줍니다. 이는 예측이 아니라 규모의 예시입니다. 제대로 늘린 비밀번호 해시는 공격 속도가 몇 자릿수 느리고, 평문으로 유출된 비밀번호는 아예 시간이 걸리지 않습니다.
흔한 실수
- 길이 대신 문자 종류를 더하는 것. 길이가 엔트로피를 훨씬 빠르게 올립니다.
- 강한 비밀번호를 여러 사이트에 재사용하는 것. 한 서비스가 뚫리면 엔트로피와 무관하게 전부가 뚫립니다.
- 익숙한 낱말의 글자를 바꿔 쓰는 것. 'password'를 'P@ssw0rd'로 쓰는 식입니다. 크래킹 도구는 바로 그 치환을 적용합니다.
- 스스로 지어낸 비밀번호에 대한 강도 표시기의 판정을 엔트로피 측정으로 여기는 것. 엔트로피는 문자열이 아니라 생성기를 설명합니다.
- 규칙을 위한 규칙으로 정해진 주기마다 비밀번호를 바꾸는 것. NIST가 권하지 않는 방식이며, 유출 정황이 있을 때 바꾸는 편이 낫습니다.
자주 묻는 질문
비밀번호는 얼마나 길어야 하나요?
NIST SP 800-63B는 사용자가 고르는 비밀번호의 하한을 8자로 정하고, 검증자에게는 최소 64자까지 허용하도록 요구합니다. 생성된 비밀번호에서는 길이가 가장 중요한 지렛대입니다. 76개 문자 집합에서 한 글자를 더할 때마다 약 6.2비트가 늘어, 탐색 공간이 글자 하나마다 대략 두 배가 됩니다.
비트로 나타낸 비밀번호 엔트로피란 무엇인가요?
생성기가 만들어 낼 수 있었던 비밀번호 수의 밑이 2인 로그입니다. 길이 x log2(집합 크기)입니다. 76개 문자 집합에서 뽑은 20자 비밀번호는 20 x log2(76) = 125비트를 가집니다. 1비트가 늘 때마다 공격자가 시험해야 할 후보 수가 두 배가 됩니다.
문자 종류를 섞으면 비밀번호가 더 강해지나요?
집합이 커지므로 문자당 엔트로피는 올라갑니다. 다만 길이가 올리는 것보다 훨씬 적으며, NIST SP 800-63B는 그런 혼합을 요구하는 구성 규칙을 부과하지 말라고 검증자에게 명시적으로 권합니다. 한 종류로 이뤄진 긴 패스프레이즈가 네 종류로 이뤄진 짧은 비밀번호보다 낫습니다.
비밀번호가 어딘가로 전송되나요?
아닙니다. 운영체제의 암호학적으로 안전한 난수원을 써서 브라우저 안에서 생성되며, 이 계산기는 사이트의 다른 기능을 구동하는 결과 발행에서 특별히 제외되어 있습니다. 그래서 전송되거나 기록되는 일이 결코 없습니다.
비밀번호를 정기적으로 바꿔야 하나요?
NIST SP 800-63B는 임의의 주기적 변경을 권하지 않습니다. 사람들이 예측 가능한 변형으로 몰리게 만들기 때문입니다. 다만 자격 증명이 유출되었다는 정황이 있으면 변경을 요구합니다. 비밀번호 관리자에 보관한 사이트별 고유 비밀번호가 어떤 교체 일정보다 도움이 됩니다.
참고 자료
- Grassi PA, Garcia ME, Fenton JL. NIST Special Publication 800-63B: Digital Identity Guidelines — Authentication and Lifecycle Management. National Institute of Standards and Technology, 2017 (with subsequent errata). Section 5.1.1 on memorized secrets.
- Shannon CE. A Mathematical Theory of Communication. Bell System Technical Journal 1948; 27(3): 379-423 — entropy as a measure of uncertainty.
- World Wide Web Consortium. Web Cryptography API — Crypto.getRandomValues(), the cryptographically strong random source used here. w3.org.
- National Cyber Security Centre (UK). Password policy: updating your approach. ncsc.gov.uk.