사용 방법
“생성 방식”에서 “무작위 문자”와 “패스프레이즈 (단어 조합)” 가운데 하나를 고릅니다. 페이지를 열면 이미 5개가 만들어져 있고, 옵션을 하나라도 바꾸면 목록 전체가 새로 만들어집니다. 설정은 그대로 두고 다른 값을 받고 싶을 때만 “다시 생성”을 누릅니다.
- 무작위 문자: “길이”는 8 ~ 128자(처음 값 16자)입니다. “포함할 문자 종류”에서 “소문자 (a-z)”, “대문자 (A-Z)”, “숫자 (0-9)”, “기호”를 켜고 끕니다. 처음에는 기호만 꺼져 있습니다. “기호”를 켜면 “기호 목록 (직접 수정 가능)” 칸을 고칠 수 있습니다.
- 패스프레이즈 (단어 조합): “단어 개수”는 3 ~ 10개(처음 값 4개)입니다. “구분 기호”는 단어 사이에 넣을 문자로 4자까지 쓸 수 있고 처음 값은 붙임표(-)입니다. “단어 첫 글자를 대문자로”와 “끝에 숫자 추가 (0 ~ 99)“는 처음부터 켜져 있어서
Maroon-Cymbal-Tiger-Harbor-60같은 모양이 나옵니다. - “한 번에 생성할 개수”: 1 ~ 20개입니다.
“생성 결과” 위에는 “강도: 매우 강함 · 추정 엔트로피 약 95비트”처럼 지금 설정의 등급과 비트 수가 한 줄로 나옵니다. 목록의 값은 모두 같은 설정으로 만든 것이라 어느 것을 골라도 강도가 같습니다. 하나만 복사하거나 “전체 복사”로 한꺼번에 복사할 수 있고, “.txt로 다운로드”를 누르면 한 줄에 하나씩 적힌 passwords.txt(패스프레이즈는 passphrases.txt)가 저장됩니다.
만든 값은 어디에도 남겨 두지 않습니다. 페이지를 새로 고치면 다른 값으로 바뀌므로 쓸 값은 바로 복사해 두세요. 내려받은 .txt 파일에는 비밀번호가 그대로 적혀 있으니 비밀번호 관리자에 옮긴 뒤에는 지우는 편이 안전합니다.
한 글자씩 뽑는 방식
무작위 문자는 세 단계로 만듭니다.
- 켜 둔 문자 종류마다 그 종류에서 한 글자씩 먼저 뽑습니다. 그래서 숫자를 켰다면 숫자가 적어도 하나는 들어갑니다.
- 남은 자리는 켜 둔 종류를 모두 합친 문자 집합에서 한 글자씩 뽑습니다.
- 전체 순서를 무작위로 섞습니다. 먼저 뽑은 글자가 늘 앞자리에 오는 일을 막기 위해서입니다.
패스프레이즈는 영어 단어 256개 목록에서 서로 다른 단어를 “단어 개수”만큼 뽑아 “구분 기호”로 잇습니다.
두 방식 모두 난수는 브라우저의 crypto.getRandomValues에서 받습니다. 이전 값에서 다음 값을 짐작할 여지가 있는 Math.random()은 쓰지 않습니다. 받은 숫자를 문자 수로 나눈 나머지를 그대로 쓰면 앞쪽 문자가 아주 조금 더 자주 나오는데, 이 도구는 그런 치우침을 만드는 숫자를 버리고 다시 뽑아 모든 문자가 같은 확률로 나오게 합니다.
추정 엔트로피와 강도 읽는 법
엔트로피는 같은 설정으로 만들 수 있는 비밀번호가 몇 가지인지를 비트로 나타낸 값입니다. 1비트 늘 때마다 경우의 수가 두 배가 됩니다. 무작위 문자의 추정 엔트로피는 길이 × log2(쓸 수 있는 문자 수)로 계산합니다. 소문자·대문자·숫자를 켜면 문자가 62개, 기호까지 켜면 기본 기호 27개를 더해 89개입니다.
이 도구가 붙이는 등급은 다음과 같습니다. 도구가 정한 구분이며, 등급 이름이 어떤 공격에 안전하다는 보증은 아닙니다.
| 강도 | 추정 엔트로피 |
|---|---|
| 약함 | 40비트 미만 |
| 보통 | 40비트 이상 60비트 미만 |
| 강함 | 60비트 이상 80비트 미만 |
| 매우 강함 | 80비트 이상 |
길이에 따라 화면에 나오는 값은 이렇습니다.
| 길이 | 소문자·대문자·숫자 (62개) | 기호 포함 (89개) |
|---|---|---|
| 8자 | 약 48비트, 보통 | 약 52비트, 보통 |
| 12자 | 약 71비트, 강함 | 약 78비트, 강함 |
| 14자 | 약 83비트, 매우 강함 | 약 91비트, 매우 강함 |
| 16자 | 약 95비트, 매우 강함 | 약 104비트, 매우 강함 |
문자 종류를 늘리는 것보다 길이를 늘리는 쪽이 효과가 큽니다. 16자에 기호를 더하면 약 8비트가 늘지만, 기호 없이 두 글자만 늘려도 약 12비트가 늘어납니다. 숫자만 켜면 8자에 약 27비트(약함)이고 24자가 되어야 “매우 강함”에 들어갑니다. “헷갈리는 문자 제외 (0 O 1 l I |)“를 켜면 62개가 57개로 줄어 16자 기준 약 95비트가 약 93비트가 됩니다.
이 값은 추정입니다. 종류마다 한 글자를 먼저 넣는 규칙 때문에 실제로 나올 수 있는 조합은 계산보다 조금 적지만, 차이가 작아 계산에 넣지 않았습니다.
패스프레이즈의 단어 개수와 강도
단어 목록이 256개라서 단어 하나가 더하는 엔트로피는 8비트에 조금 못 미칩니다. 같은 단어를 두 번 뽑지 않으므로 둘째 단어는 255개, 셋째 단어는 254개 가운데 하나이기 때문입니다. “끝에 숫자 추가 (0 ~ 99)“는 약 6.6비트를 더합니다. “단어 첫 글자를 대문자로”와 “구분 기호”는 정해진 규칙이라 계산에 넣지 않습니다.
| 단어 개수 | 숫자 없음 | 숫자 추가 |
|---|---|---|
| 3개 | 약 24비트, 약함 | 약 31비트, 약함 |
| 4개 | 약 32비트, 약함 | 약 39비트, 약함 |
| 5개 | 약 40비트, 보통 | 약 47비트, 보통 |
| 6개 | 약 48비트, 보통 | 약 55비트, 보통 |
| 7개 | 약 56비트, 보통 | 약 63비트, 강함 |
| 8개 | 약 64비트, 강함 | 약 70비트, 강함 |
| 9개 | 약 72비트, 강함 | 약 78비트, 강함 |
| 10개 | 약 80비트, 매우 강함 | 약 86비트, 매우 강함 |
처음 설정(4단어에 숫자 추가)은 약 39비트로 “약함”입니다. 무작위 문자 12자와 비슷한 수준을 원하면 8 ~ 9단어가 필요합니다.
단어를 이어 비밀번호를 만드는 방식은 주사위로 단어를 고르는 다이스웨어(Diceware)와 원리가 같습니다. 다만 다이스웨어 목록은 7,776단어라 단어 하나가 12.9비트이고, 다이스웨어 안내 페이지는 그 목록으로도 용도에 따라 6단어 이상을 권합니다. 이 도구의 목록은 그보다 훨씬 작으므로 같은 단어 개수라면 엔트로피가 낮습니다. 단어 개수는 위 표의 비트 수를 보고 정하세요.
무작위 문자와 패스프레이즈 중 무엇을 쓸까
비밀번호 관리자에 저장해 두고 붙여 넣기만 하는 계정에는 무작위 문자가 낫습니다. 16자면 “매우 강함”이고, 외울 일이 없으니 읽기 어려워도 문제가 없습니다.
기기 잠금이나 비밀번호 관리자의 마스터 비밀번호처럼 직접 외워서 손으로 입력해야 하는 곳에는 패스프레이즈가 편합니다. 대신 위 표처럼 단어가 여러 개 필요합니다.
어느 쪽이든 사이트마다 다른 값을 쓰세요. 한 사이트에서 유출된 비밀번호를 다른 사이트 로그인에 그대로 넣어 보는 공격(크리덴셜 스터핑) 때문에, 같은 비밀번호를 여러 곳에 쓰면 한 곳의 유출이 나머지 계정으로 번집니다. “한 번에 생성할 개수”를 늘리면 계정 여러 개에 쓸 값을 한 번에 만들 수 있습니다.
