카페 와이파이를 손님에게 불러 주고, 공유기에 붙은 관리자 페이지를 공용 키보드로 열고, 테스트 계정용 비밀번호를 여러 개 뽑습니다. 세 일이 같은 문자열을 요구하지는 않습니다. 앞의 둘은 손으로 쳐야 하고, 셋째는 거의 항상 비밀번호 관리자에 들어갑니다. 그다음 많은 사람이 xkcd 936을 만납니다. Tr0ub4dor&3은 치기 어려운데 약 28비트이고, correct horse battery staple처럼 흔한 영어 네 단어는 약 44비트입니다. 「네 단어면 강하다」가 만화 밖으로 나와 정설처럼 남았습니다.
만화의 계산에는 빠뜨리기 쉬운 전제가 있습니다. 각 단어는 흔한 말 약 2,000개에서 균등하게 무작위로 뽑힌다는 점입니다. 만화가 단어당 11비트를 잡은 이유입니다. 단어표를 100개로 바꾸면 같은 네 단어는 약 27비트로 떨어집니다. 만화보다 약하고, 16자 랜덤 비밀번호보다 훨씬 약합니다. 이 글은 생성기 버튼을 안내하지 않습니다. 언제 랜덤 문자를 쓰고, 언제 읽기 쉬운 패스프레이즈를 쓰며, 네 단어로 충분한가만 답합니다. MyPassGen은 두 모드 모두 가입 없이 바로 씁니다. 랜덤은 기본 16자, 읽기 쉬운 모드는 내장 100개 단어표에서 3–10개를 뽑습니다. 아래 숫자는 계산기로 다시 맞출 수 있습니다.
결정을 한 번만 가른다
이 비밀을 나중에 자동 완성할 수 있습니까. 그렇다면 랜덤 문자를 기본 16자 이상으로 만듭니다. 손님이 와이파이를 치고, 공유 프린터에 붙고, 일 년에 두 번 여는 공유기를 만진다면 패스프레이즈로 바꾸고 단어 수를 8–10개로 올립니다. 발음이 쉽다고 네 개에서 멈추지 마세요.
관리자가 채워 줄 수 있는지부터
NIST SP 800-63B-4는 2025년 7월 31일에 확정됐습니다. 길이와 「사람이 어떻게 입력하는가」를 나눠 적습니다. 비밀번호가 유일한 요소일 때 검증 측은 최소 15자를 요구해야 합니다. 여러 요소 중 하나일 때도 바닥은 8자입니다. 검증 측은 비밀번호 관리자와 자동 완성을 허용해야 하고, 자동 완성 인터페이스가 없으면 붙여넣기를 허용해야 합니다. 문서는 관리자가 더 강한 비밀을 고를 확률을 올린다고 적습니다. 생성기를 같이 줄 때 특히 그렇습니다.
같은 개정은 한국 사이트에도 아직 많은 두 규칙을 내려놓습니다. 검증 측은 대소문자·숫자·기호를 섞으라는 조합 규칙을 강제해서는 안 됩니다. 이 비밀이 유출됐다는 증거가 없으면 정기 변경도 강제해서는 안 됩니다. 랜덤과 패스프레이즈를 고를 때는 갈라집니다. 붙여넣거나 자동 완성할 수 있으면, 발음을 쉽게 하려고 엔트로피를 버릴 이유가 없습니다. 손으로 쳐야 하면 오타를 줄이려고 단어를 쓰고, 빠진 엔트로피는 단어를 더해서 되돌립니다.
MyPassGen 랜덤 모드는 6–128자를 받고 기본은 16자입니다. 단일 요소 15자 바닥과 같은 길이대입니다. 8자 미만은 약한 비밀번호 경고를 띄웁니다. 이 범위는 생성기 한도이지, 6자가 「NIST를 충족한다」는 뜻이 아닙니다. 사이트가 8자로 자르면 8자를 다 쓰고 두 번째 요소를 켭니다. 8자 랜덤이 16자와 같다고 쓰지 마세요. KISA의 「털린 내 정보 찾기」는 개인정보 유출 조회이지, 방금 만든 비밀번호의 엔트로피 계산이 아닙니다.
두 가지 생성 모델
랜덤 비밀번호와 읽기 쉬운 패스프레이즈는 같은 비밀의 두 껍질이 아닙니다. 추측 공간을 세는 방식이 다릅니다. 랜덤 문자는 문자 풀에서 한 자리씩 뽑습니다. 대문자·소문자·숫자·기호를 켜면 풀 크기는 그 합입니다. 패스프레이즈는 고정 단어표에서 뽑아 구분자로 잇습니다. 공격자가 어떤 표를 썼고 몇 개를 가져갔는지 알면, 탐색 공간은 「표 크기의 단어 수 제곱」이지 「문장이 얼마나 길어 보이는가」가 아닙니다.
랜덤 문자는 자리마다 비트를 더한다
균등 추출이면 엔트로피는 대략 길이 × log2(풀 크기)입니다. MyPassGen 기본 네 집합은 대문자 26, 소문자 26, 숫자 10, 기호 !@#$%^&*()-_=+[]{} 18개로 합 80입니다. 그 풀에서 16자이면 약 101비트입니다. 영문과 숫자만(62) 16자면 약 95비트입니다. 길이를 8로 줄이고 80 풀을 유지하면 약 51비트입니다. 짧고 「복잡한」 비밀번호가 강해 보여도, 중간 패스프레이즈와 같은 자릿수에 남는 이유입니다.
패스프레이즈는 단어마다 비트를 더한다
균등 추출이면 엔트로피는 대략 단어 수 × log2(표 크기)입니다. Arnold Reinhold의 Diceware와 Electronic Frontier Foundation의 2016년 긴 단어표는 둘 다 7,776개입니다. 육면체 주사위 다섯 개, 65입니다. 단어당 약 12.9비트입니다. EFF가 흔히 권하는 여섯 단어는 약 77.5비트입니다. 만화의 흔한 네 단어는 단어당 11비트로 약 44비트입니다. 더 큰 「일상 영어」 표이지, 100개짜리 짧은 표가 아닙니다.
추출은 암호학적으로 안전한 난수여야 합니다. MDN은 Crypto.getRandomValues를 암호학적으로 강한 난수라고 정의합니다. 같은 문서는 Math.random()을 보안 용도에 쓰지 말라고 적고, Web Crypto를 쓰라고 합니다. Math.random()으로 만든 「랜덤 비밀번호」나 「랜덤 패스프레이즈」는 위 공식의 엔트로피를 다 가졌다고 말할 수 없습니다.
엔트로피는 단어표부터 센다
같은 문장 「네 단어」도 분모를 바꾸면 두 배까지 갈립니다. log2(100)은 약 6.64이므로 100개 표에서 네 단어는 약 27비트입니다. log2(7776)은 약 12.92이므로 Diceware 네 단어는 약 52비트입니다. 만화의 단어당 11비트는 약 44비트입니다. 단어 수만 적고 표 크기를 숨기는 일이, 읽기 쉬운 비밀번호를 실제보다 강하게 쓰는 가장 흔한 방법입니다.
숫자 하나나 기호 하나를 붙이면 선택지만 조금 늘어납니다. 숫자 열 개는 약 3.3비트, 짧은 기호 집합은 약 3비트입니다. MyPassGen 읽기 쉬운 모드에서 숫자나 기호 삽입을 켜면 화면 추정은 각각 약 6비트를 더합니다. 넉넉한 내부 자이지, 「느낌표 하나가 Diceware 여섯 단어에 가깝다」가 아닙니다. 각 단어 첫 글자 대문자는 단어당 약 0.5비트입니다. 눈금이 한 칸 움직이는 정도가 아닙니다. 100개 표의 패스프레이즈를 생성기의 「강함」대(이 글의 공통 자는 약 60비트, 화면 패스프레이즈 눈금은 55비트)로 올리려면 단어 8–10개가 필요하고, 네 단어 뒤에 1!를 붙이는 것으로는 부족합니다.
단어를 직접 고르면 더 나빠집니다. 가사, 영화 제목, 이번 스프린트 이름은 이미 공격자 구절 목록에 있습니다. 기억나는 문장에 「표 크기의 네 제곱」을 주지 않습니다. 패스프레이즈가 공식을 받는 조건은, 아는 표에서 균등하게 뽑힌 단어이지, 이미 마음에 든 한 줄이 아닙니다. 한국어 속담이나 아이돌 가사 네 마디도 같은 함정입니다. 영어 네 단어가 약하면, 예측 가능한 한국어 네 마디는 더 약합니다.
100어, 7,776어, 랜덤 문자열
표는 공식을 하나로 맞춥니다. 「100개 단어」는 MyPassGen 내장 읽기 쉬운 표입니다. 「7,776개」는 Diceware / EFF 긴 표입니다. 랜덤 문자열은 80 기호 풀입니다. 오른쪽 라벨은 두 형식을 한 페이지에 올리기 위한 자입니다. 약 40비트 미만은 약함, 60 미만은 보통, 80 미만은 강함, 그 위는 매우 강함입니다. 특정 그래픽카드를 약속하지 않습니다. 생성기 패스프레이즈 눈금은 40 / 55 / 70을 쓰므로, 100개 표 열 단어(약 66비트)는 강함, Diceware 여섯 단어(약 77.5비트)는 매우 강함으로 읽힙니다.
| 방법 | 대략 | 이 자에서 |
|---|---|---|
| 100개 표 × 4단어 | 약 27비트 | 약함 |
| 100개 표 × 6단어 | 약 40비트 | 보통(선을 막 넘김) |
| 100개 표 × 8단어 | 약 53비트 | 보통 |
| 100개 표 × 10단어 | 약 66비트 | 강함 |
| Diceware 7,776 × 4단어 | 약 52비트 | 보통 |
| Diceware 7,776 × 6단어 | 약 77.5비트 | 강함(EFF가 흔히 잡는 크기) |
| 랜덤 8자(80 기호 풀) | 약 51비트 | 보통 |
| 랜덤 16자(80 기호 풀) | 약 101비트 | 매우 강함 |
표에서 두 가지만 가져갑니다. 첫째, 기본 16자 랜덤이 가장 값싼 「매우 강함」입니다. 외우지 않고 관리자가 채웁니다. 둘째, 읽기 쉬운 모드를 네 단어에서 멈추면 짧은 랜덤이나 만화 속 고쳐 쓴 사전 단어와 같은 자릿수입니다. 말하기 쉽다고 승급하지 않습니다. 손으로 쳐야 하면 100개 표를 8–10개까지 쓰거나, Diceware 여섯 단어의 길이를 받아들입니다. 짧은 표의 네 단어를 16자 랜덤과 나란히 두지 마세요.
NIST 단일 요소 15자는 길이 하한이지 엔트로피 하한이 아닙니다. 80 풀에서 15자는 약 95비트로, 기본 16자와 같은 띠입니다. 흔한 영어 네 단어는 만화의 44비트로 잡아도, 그 길이가 가리키는 랜덤 문자열보다 아래에 있습니다. 손으로 치는 비밀은 칠 수 있어야 하고, 자릿수도 맞아야 합니다. 단어 수를 늘려서 가고, @를 붙여서 가지 않습니다.
흔한 오해
「네 단어면 xkcd 비밀번호」는 표와 난수원이 만화나 Diceware와 맞을 때만 성립합니다. 화면에 하이픈으로 이은 영어 단어가 보인다고 단어당 11비트나 12.9비트가 증명되지 않습니다.
「패스프레이즈는 항상 랜덤보다 약하다」도 틀립니다. Diceware 여섯 단어는 약 77.5비트로, 이 자에서 이미 강함입니다. 100개 표 열 단어는 약 66비트로 역시 강함입니다. 약한 것은 짧은 표에 너무 적은 단어이지, 비밀이 단어로 이뤄졌다는 사실이 아닙니다.
「123과 느낌표를 붙이면 고친다」는, 사람이 고른 짧은 비밀번호에는 거의 소용없습니다. 그런 접미사는 이미 사전에 있습니다. 균등 추출한 단어열에 숫자 하나는 몇 비트입니다. 단어 두 개를 대신하지 않습니다. 한국 사이트가 아직도 「영문+숫자+특수문자」를 요구하면 폼을 통과시키려고 삽입을 켤 수는 있습니다. 통과한 뒤에도 세는 것은 단어 수와 표 크기입니다.
「사이트가 패스프레이즈를 내놓으니 결과는 강하다」는 표에 달렸습니다. 7,776개를 쓰는 페이지가 있고, 주제 명사 몇백 개, 또는 그보다 적은 페이지가 있습니다. 결과를 믿기 전에 셋만 묻습니다. 공개된 표는 몇 개인가. 난수원은 getRandomValues인가. 결과가 업무 데이터로 탭을 떠났는가. 구호는 셋 중 어느 쪽의 답도 아닙니다.
「HTTPS면 비밀번호가 새지 않는다」는 선상의 도청만 가립니다. 생성기가 결과를 POST하거나, 비밀을 분석 이벤트에 쓰면 HTTPS는 그 호스트에 평문을 그대로 전달합니다. 확인은 브라우저에서 암호화할 때, 평문이 올라가지 않았는지 그 자리에서 확인하는 방법에 있습니다. 자물쇠 아이콘이 아니라 Network의 요청 줄과 본문을 봅니다.
방금 만든 비밀번호를 원문을 올리는 강도 사이트에 다시 붙이지 마세요
어떤 검사는 비밀번호를 POST합니다. 어떤 검사는 해시 접두사만 보냅니다. 로컬 검사는 공개된 약한 비밀번호 목록을 받고, 검사 중인 값은 입력칸에 남깁니다. 차이는 기기에서 유출 목록만 대조하는 것과 전체 유출 조회는 무엇이 다른가에 있습니다. 생성과 로컬 검사 모두 가입 없이 엽니다.
그 자리 확인
아래 단계는 브랜드 약속에 기대지 않습니다. 실제 계정에 쓰지 않을 문자열로 시험하면 됩니다.
- 생성기를 열고 읽기 쉬운 패스프레이즈를 고른 뒤 단어 수를 4로 두고 한 번 만듭니다. 화면의 강도 라벨과 엔트로피를 적습니다. 위 표에서 100개 × 4는 약함(약 27비트) 근처여야 합니다.
- 수를 8 또는 10으로 올리고 다시 만듭니다. 라벨이 올라가야 하고, 10개면 강함에 가까워야 합니다. 생각난 네 단어로 「개선」하지 마세요.
- 랜덤 문자로 바꾸고 길이는 기본 16, 네 종류를 모두 켠 채 만듭니다. 라벨은 매우 강함(약 101비트)이어야 합니다. 세 결과를 나란히 둡니다. 읽기 쉬운 네 단어가 16자 랜덤보다 위에 있으면 안 됩니다.
- 개발자 도구 Network를 열고 Preserve log를 켠 뒤 한 번 더 만듭니다. 문서 요청과 분석 이벤트에 화면에 남은 비밀번호가 있으면 안 됩니다. 난수원은 Web Crypto여야 하고, 페이지 스크립트의
Math.random()이면 안 됩니다. Sources에서 그 이름을 검색해 확인할 수 있습니다. - 공개된 약한 비밀번호 목록도 보려면, 버리려는 옛 비밀번호를 로컬 검사에 붙입니다. 새 주 비밀번호를 원문을 올리는 사이트에 보내지 마세요. 목록에 없어도 「한 번도 털리지 않았다」가 아닙니다. 이 목록에 없다는 뜻입니다.
MyPassGen 비밀번호 생성기는 그 경계로 동작합니다. 두 모드 모두 현재 탭에서 getRandomValues로 뽑습니다. 랜덤은 6–128자, 기본 16, 8자 미만은 약하다고 경고합니다. 읽기 쉬운 모드는 100개 표에서 3–10개이며, 구분자·숫자·기호·첫 글자 대문자를 더할 수 있습니다. 한 번에 최대 100개, 복사하거나 TXT로 내보냅니다. 계정과 비밀번호 보관함이 없습니다. 탭을 닫으면 그 문자열은 서버에 남지 않습니다. 확인할 것은 Network이지 제목이 아닙니다.
다음에 바꿀 비밀번호부터
오늘 바꿀 비밀은 관리자 질문부터 답합니다. 자동 완성이 처리할 것이면 16자 이상 랜덤을 사이트마다 따로 만들고 재사용하지 않습니다. 손으로 쳐야 하면 8–10개 단어 패스프레이즈를 만듭니다. 옆 사람에게는 한 번만 읽어 줍니다. 같은 문자열을 단체 대화방에 「백업」으로 붙이지 마세요. 상대가 원격이고 비밀이 한 번만 있어야 하면 일회용 링크를 쓰고, 키는 URL의 # 뒤에 둡니다. 평문 사본을 하나 더 만들지 않습니다.
공유기, 손님 와이파이, 복합기는 손으로 치는 전형적인 장면입니다. 손님은 휴대폰 자판을 쓰고, 대소문자와 기호가 섞이면 0/O와 1/l을 헷갈립니다. 긴 단어열이 8자 「복잡한」 랜덤보다 잘못 듣고 잘못 적기 어렵습니다. 관리 페이지를 드물게 열고 자기 기기에 관리자를 들고 있다면, 그 로그인은 여전히 16자 랜덤이 낫습니다. 와이파이 구절을 공유기 관리자 비밀번호로 다시 쓰지 마세요.
이 한 줄을 가르면 제목의 질문에 이미 답할 수 있습니다. 랜덤이냐 읽기 쉬운 패스프레이즈냐는 입력 방식의 질문입니다. 네 단어로 충분한가는 단어표의 질문입니다. 100개 표의 네 단어는 중요한 계정을 맡기면 안 됩니다. 기본 16자 랜덤은 맡길 수 있습니다. 화면 라벨은 이 표와 맞아야 합니다. 맞지 않으면 「문장처럼 보이니 더 안전하다」를 믿지 마세요.
자주 묻는 질문
네 단어 패스프레이즈를 마스터 비밀번호로 써도 되나?
100개 표에서는 안 됩니다. 약 27비트는 짧은 랜덤입니다. 마스터 비밀번호, 디스크 암호화 암호, 거의 바꾸지 않고 새면 큰일인 비밀은 관리자에 둔 16자 이상 랜덤이거나, 균등하게 뽑은 8–10개 단어여야 합니다. 지어낸 문장이 아닙니다.
사이트 복잡도 규칙을 통과하려면 대소문자와 기호를 더해야 하나?
사이트가 아직 문자 종류 혼합을 요구하면, 숫자·기호 삽입이나 첫 글자 대문자를 켜 폼이 받게 합니다. 낡은 철자 규칙을 맞출 뿐입니다. 엔트로피의 본줄기가 아닙니다. NIST는 이미 검증 측에 그런 규칙을 두지 말라고 적습니다. 폼이 받은 뒤에는 단어 수와 표 크기로 판단합니다.
랜덤이나 패스프레이즈를 만들려면 가입해야 하나? 결과는 올라가나?
가입은 필요 없습니다. 생성은 현재 탭에 남아야 합니다. 로그 위험은 원문을 올리는 사이트에 결과를 넘길 때 생깁니다. 만들기를 누른 뒤 Network를 엽니다. 요청 본문과 분석 이벤트에 그 비밀번호가 있으면 안 됩니다. 사본이 필요하면 이미 믿는 곳에 복사하거나 내보냅니다. 사이트 안 비밀번호 보관함은 없습니다.
손으로 치는 와이파이는 16자 랜덤이 나을까, 패스프레이즈가 나을까?
누가 치느냐에 달렸습니다. 본인만 관리자로 연결하면 16자 랜덤입니다. 손님이 휴대폰에 자주 치면 8–10개 단어를 쓰고, 0/O, 1/l, 기호 더미를 피합니다. 그 와이파이 구절을 공유기 관리 페이지에 다시 쓰지 마세요.