패스프레이즈는 무엇이고 왜 쓰나요?
"Xk7#mQ2!" 같은 무작위 문자 조합은 안전하지만 외우기 어렵습니다. 반대로 사람이 고른 "password1!" 같은 문자열은 외우기 쉽지만 공격자의 사전에 이미 들어 있습니다. 패스프레이즈는 무작위로 뽑은 여러 단어를 이어 붙인 것으로, 안전성은 "단어를 몇 개, 몇 개짜리 목록에서, 진짜 무작위로 뽑았는가"로 결정됩니다. 사람이 마음에 드는 단어를 골라 조합하면 무작위가 아니므로 이 효과가 사라집니다. 기억하기 쉬운 비밀번호가 꼭 필요한 곳(비밀번호 관리자의 마스터 비밀번호, 디스크 암호화, PC 로그인)에 특히 알맞습니다.
엔트로피 계산 원리
엔트로피(비트)는 "공격자가 방법을 알고 있어도 평균적으로 몇 번 추측해야 하는가"를 2의 거듭제곱으로 나타낸 값입니다. 목록에서 단어 하나를 균등하게 뽑으면 단어당 log₂(목록 크기) 비트이고, 단어를 n개 뽑으면 n배입니다. 이 생성기가 쓰는 목록은 100개의 영어 단어이므로 단어당 log₂(100) ≈ 6.64비트입니다. 전통적인 Diceware 목록(주사위 다섯 번으로 고르는 7,776개)은 단어당 약 12.92비트이므로, 같은 단어 수라면 이 생성기의 결과가 약 절반의 강도입니다. 그래서 이 도구는 단어 수를 넉넉히(최대 12개) 고를 수 있게 하고, 화면에 보이는 엔트로피도 실제 목록 크기로 계산해 표시합니다. 숫자 1자리를 덧붙이면 log₂(10) ≈ 3.32비트가 더해질 뿐이므로, 짧은 구절에 숫자를 붙인다고 크게 안전해지지는 않습니다.
단어 수별 강도표 (빌드 시 계산)
| 단어 수 | 가능한 조합 수 | 엔트로피(비트) | 평균 추측 시간 (초당 100억 번) | 평균 추측 시간 (초당 1만 번) | 참고: 7,776개 목록일 때 비트 |
|---|---|---|---|---|---|
| 3 | 1.00×10^6 | 19.9 | 1초 미만 | 50.0초 | 38.8 |
| 4 | 1.00×10^8 | 26.6 | 1초 미만 | 1.4시간 | 51.7 |
| 5 | 1.00×10^10 | 33.2 | 1초 미만 | 5.8일 | 64.6 |
| 6 | 1.00×10^12 | 39.9 | 50.0초 | 1.6년 | 77.5 |
| 8 | 1.00×10^16 | 53.2 | 5.8일 | 15,855년 | 103.4 |
| 10 | 1.00×10^20 | 66.4 | 159년 | 1.6×10^8년 | 129.2 |
| 12 | 1.00×10^24 | 79.7 | 1.6×10^6년 | 1.6×10^12년 | 155.1 |
시간은 "조합 수의 절반을 시도하면 평균적으로 맞힌다"는 가정으로 계산한 단순 추정이며, 초당 추측 횟수는 가정값입니다. 초당 100억 번은 빠른 해시로 저장된 비밀번호를 하드웨어로 오프라인 공격하는 상황을, 초당 1만 번은 시도 횟수를 제한하는 서비스에 가까운 상황을 가정한 숫자입니다. 실제 공격 속도는 저장 방식(해시 종류), 공격 장비, 서비스의 잠금 정책에 따라 크게 달라집니다.
직접 해 보기: 계산 예시 2가지
예시 1. 4단어 구절. 100개 목록에서 4단어는 100⁴ = 1억 가지로 약 26.6비트입니다. 평균 5천만 번만 추측하면 맞히므로 초당 100억 번 속도의 오프라인 공격에는 1초도 걸리지 않습니다. 예전에 "4단어면 충분하다"는 조언이 7,776개 목록(약 51.7비트)을 기준으로 한 것이었다는 점을 기억해야 합니다. 작은 목록에서는 같은 규칙이 성립하지 않습니다.
예시 2. 8단어 구절. 100⁸ = 10¹⁶ 가지, 약 53.2비트입니다. 위 표에서 보듯 초당 100억 번 가정에서도 평균 수일 단위, 초당 1만 번 가정에서는 약 1만 6천 년이 필요합니다. 오프라인 공격까지 대비하는 마스터 비밀번호라면 10~12단어(66~80비트)를 권합니다.
목표 강도에서 거꾸로 단어 수 정하기 (빌드 시 계산)
"몇 비트가 필요한가"를 먼저 정하면 필요한 단어 수는 올림(목표 비트 ÷ 6.64)으로 나옵니다. 글자 수는 단어 평균 길이 6.2자에 구분 기호를 더한 근삿값입니다. 마지막 열은 같은 목표를 7,776개 목록으로 달성할 때의 단어 수로, 목록이 작을수록 단어를 얼마나 더 외워야 하는지 보여 줍니다.
| 목표(비트) | 필요한 단어 수 | 실제 엔트로피(비트) | 대략의 글자 수 | 7,776개 목록이라면 |
|---|---|---|---|---|
| 40 | 7 | 46.5 | 약 49자 | 4단어 |
| 56 | 9 | 59.8 | 약 64자 | 5단어 |
| 64 | 10 | 66.4 | 약 71자 | 5단어 |
| 80 | 13 | 86.4 | 약 93자 | 7단어 |
| 100 | 16 | 106.3 | 약 114자 | 8단어 |
| 128 | 20 | 132.9 | 약 143자 | 10단어 |
비교하면, 영문 대소문자·숫자·기호 94종에서 무작위로 고른 문자열은 문자당 약 6.55비트이므로 80비트를 채우려면 13자가 필요합니다. 같은 80비트를 이 생성기로 얻으려면 13단어(약 93자)가 필요해 글자 수는 훨씬 길지만, 무의미한 기호 열보다 소리 내어 읽고 머릿속에 그림을 그리며 외우기 쉽다는 것이 패스프레이즈를 쓰는 이유입니다. 글자 수가 길면 입력 오류도 늘고 사이트의 길이 제한에 걸릴 수 있으니 단어 수와 사용처를 함께 따져야 합니다.
사용 시나리오
시나리오 1. 비밀번호 관리자 마스터 비밀번호
마스터 비밀번호는 한 번 뚫리면 저장한 모든 계정이 노출되고 오프라인 공격 대상이 되기 쉬우므로 가장 높은 강도가 필요합니다. 10단어(약 66.4비트)를 뽑으면 위 가정(초당 100억 번)에서도 평균 약 158년이 걸리지만, 장기 보관을 생각해 12단어(약 79.7비트)로 올리는 선택도 현실적입니다. 처음 며칠은 종이에 적어 두고 하루 여러 번 직접 입력해 손에 익힌 뒤 종이를 폐기하세요.
시나리오 2. 노트북 로그인과 디스크 암호화
로그인 화면은 입력 횟수가 제한되거나 보안 칩이 추측 속도를 늦추는 경우가 많아 온라인 공격에 가깝지만, 디스크 암호화 해제 암호는 장치를 분리해 오프라인으로 공격당할 수 있습니다. 로그인용은 6~8단어(약 39.9~53.2비트), 암호화 해제용은 10단어 이상이 안전한 쪽입니다. 단어 사이를 공백으로 하면 입력은 쉽지만 일부 입력창이 공백을 거부하므로, 쓰려는 화면에서 먼저 시험 입력해 보세요.
시나리오 3. 가족과 공유하는 와이파이 암호
손님에게 불러 주는 암호라면 8단어(약 53.2비트)에 하이픈을 쓰면 한 번에 받아 적기 쉽습니다. 다만 공유기 암호 길이 제한(대개 63자 이하라고 알려져 있으나 장비마다 다르니 설정 화면에서 확인)과 입력 가능한 문자를 확인하고, 손님 전용 네트워크를 따로 두었다면 주 네트워크와 다른 구절을 쓰세요. 한 구절을 여러 서비스에 재사용하면 강도 표의 의미가 사라집니다.
입력값 경계와 특이 케이스
- 3단어 선택: 약 19.9비트로 평균 약 50만 번 안에 맞힙니다. 초당 1만 번 가정에서도 1분 안팎이므로 예시나 연습용 외에는 쓰지 마세요.
- 숫자 추가: 끝에 0~9 중 하나가 붙어 약 3.32비트가 더해지고 화면 엔트로피에도 반영됩니다. 사이트가 숫자를 요구할 때 규칙을 맞추는 용도로 쓰되, 강도는 단어 수로 올리세요.
- 중복 단어: 같은 단어가 두 번 나올 수 있고, 이는 오류가 아니라 표의 계산(복원 추출)에 맞는 정상 동작입니다. 중복이 보기 싫다고 다시 뽑으면 무작위성이 줄어듭니다.
- 구분 기호: 하이픈·언더스코어·마침표·공백 중 하나를 고르는 것은 화면 설정이며 구절 안에서 무작위로 정해지지 않으므로 엔트로피에 더하지 않습니다.
- 대소문자: 단어는 모두 소문자로 나옵니다. 대문자를 직접 섞으면 외우기가 어려워지는 데 비해 강도 상승은 작습니다.
- 새로 생성: 버튼을 누를 때마다 이전 구절은 화면에서 교체되며 복구할 수 없습니다. 쓸 구절은 바로 복사하거나 적어 두세요.
이 도구가 난수를 만드는 방식과 개인정보
단어는 브라우저의 crypto.getRandomValues(암호학적으로 안전한 난수)로 뽑습니다. 일반 Math.random()은 예측 가능할 수 있어 비밀번호용으로 부적합하므로 쓰지 않습니다. 또 32비트 난수를 100으로 나눈 나머지를 그대로 쓰면 앞쪽 단어가 아주 조금 더 자주 뽑히는 편향이 생기므로, 치우친 구간(상위 일부)의 난수는 버리고 다시 뽑는 방식(거절 샘플링)으로 모든 단어가 같은 확률이 되게 합니다. 생성은 전적으로 브라우저 안에서 이루어지며 서버로 전송하거나 저장하는 코드는 없습니다. 같은 단어가 두 번 이상 나올 수 있는데, 중복을 허용해야 위 표의 계산이 정확히 맞습니다. 다만 화면에 보이는 비밀번호는 어깨너머로 보이거나 화면 공유에 노출될 수 있고, 복사한 값은 클립보드에 남으므로 사용 후 다른 내용을 복사해 덮어쓰는 습관을 권합니다. 브라우저가 암호학적 난수 기능을 지원하지 않는 아주 오래된 환경에서는 안전하지 않은 대체 난수를 쓰지 않고 생성을 중단하고 안내합니다.
흔한 실수와 한계
마음에 안 든다고 다시 뽑아 고르기. "외우기 쉬운 것이 나올 때까지" 여러 번 생성해 하나를 고르면 무작위성이 조금 줄어듭니다. 한 번 나온 것을 쓰거나, 쓰지 않을 거라면 아예 단어 수를 늘리는 쪽이 낫습니다.단어 일부를 바꾸기. 외우기 어려워서 단어를 직접 바꾸면 그 자리의 엔트로피가 사라질 수 있습니다.여러 곳에 재사용. 한 사이트가 유출되면 같은 구절을 쓰는 다른 계정도 뚫립니다. 계정마다 다른 구절을 쓰거나 비밀번호 관리자를 사용하세요.영어 단어 전용. 목록은 영어 단어 100개라서 한국어 구절은 만들지 않으며, 한글 키보드 상태에서 입력하기 번거로운 사이트에서는 입력 방식 전환이 필요합니다. 길이 제한이 짧거나 공백·특수문자를 거부하는 사이트에서는 구분 기호를 바꾸거나 일반 무작위 비밀번호가 나을 수 있습니다.
결과를 활용하는 방법
생성한 구절은 처음 쓸 때 종이에 적어 두었다가 며칠 입력해 외운 뒤 폐기하는 방식이 안전하고 현실적입니다. 두 번 이상 막히면 구분 기호를 하이픈으로 통일하세요. 강도를 다시 점검하려면 비밀번호 강도 체크를, 문자·숫자 위주의 일반 비밀번호가 필요하면 비밀번호 생성기를 이용하세요. 비교용으로 길이 8자(영문 대소문자·숫자·기호 약 94종)의 완전 무작위 비밀번호는 약 52.4비트, 12자는 약 78.7비트입니다.
자주 묻는 질문
단어 개수는 몇 개가 적당한가요?
이 생성기의 목록은 100개 단어라서 단어당 약 6.64비트입니다. 온라인 서비스 로그인 정도라면 6~8단어, 오프라인 공격까지 대비하는 마스터 비밀번호나 디스크 암호화에는 10~12단어를 권합니다. 위 표를 보고 용도에 맞게 고르세요.
왜 기본값이 4단어가 아니라 8단어인가요?
작은 단어 목록에서는 4단어가 약 26.6비트에 그쳐 사실상 즉시 뚫릴 수 있기 때문입니다. 4단어는 7,776개 목록을 가정한 조언입니다.
생성된 패스프레이즈가 서버에 저장되나요?
아니요. 생성 코드는 브라우저 안에서 실행되고 결과를 서버로 보내거나 저장하지 않습니다. 새로 고치면 사라집니다.
숫자나 대문자를 섞으면 더 안전한가요?
무작위로 붙인 숫자 1자리는 약 3.3비트를 더할 뿐입니다. 규칙 없이 첫 글자를 대문자로 바꾸는 것은 거의 효과가 없습니다. 안전성을 키우는 가장 확실한 방법은 단어를 더 뽑는 것입니다.
단어 목록이 공개되어 있는데 안전한가요?
네. 안전성은 목록을 숨기는 데서 나오지 않고 무작위로 뽑는 횟수와 목록 크기에서 나옵니다. 공격자가 100개 목록을 안다고 가정하고 계산한 것이 위 표입니다. 이 목록은 페이지에 포함된 데이터라 누구나 볼 수 있다고 보아야 합니다.
같은 구절이 다른 사람에게도 나올 수 있나요?
이론상 가능하지만 8단어라면 조합이 100⁸ = 10¹⁶가지입니다. 사용자 수가 수만 명이어도 서로 겹칠 확률은 매우 낮고, 구절 자체는 서버로 전송되지 않아 우연히 겹쳐도 알 방법이 없습니다. 3~4단어처럼 조합 수가 작을수록 겹침과 추측 위험이 커집니다.
패스프레이즈를 여러 사이트에서 같은 걸로 써도 되나요?
권하지 않습니다. 강한 구절이라도 한 사이트가 평문으로 유출하거나 피싱을 당하면 같은 구절을 쓴 모든 곳이 위험해집니다. 구절은 마스터 비밀번호·암호화 해제처럼 기억해야 하는 몇 곳에만 쓰고, 나머지는 비밀번호 관리자가 만든 서로 다른 값을 쓰세요.
표의 추측 시간을 그대로 믿어도 되나요?
아니요. 초당 추측 수는 가정이고 기술이 발전하면 빨라집니다. 조합 수의 절반을 시도하면 평균적으로 맞힌다는 계산이며, 비밀번호가 어떻게 저장되는지, 사람이 단어를 골랐는지에 따라 현실은 달라집니다. 표는 단어 수를 늘릴 때 시간이 얼마나 급격히 늘어나는지 감을 잡는 용도로 보세요.
Diceware와 같은 방식인가요?
무작위로 단어를 이어 붙이는 원리는 같지만, 이 도구는 7,776개 목록이 아니라 100개 목록을 쓰고 주사위 대신 브라우저 난수를 사용합니다. 그래서 단어당 강도가 낮고, 이를 단어 수로 보완하도록 설계했습니다.
관련 도구
- 비밀번호 강도 체크 - 이미 쓰는 비밀번호 점검
- 비밀번호 생성기 - 문자·숫자·기호 무작위 조합
- 해시 생성기 - 비밀번호가 해시로 저장되는 원리 확인
- UUID 생성기 - 무작위 식별자 만들기