본문으로 바로가기

비밀번호 생성기

길이와 문자 종류를 골라 무작위 비밀번호를 만들거나 영어 단어를 이은 패스프레이즈를 만듭니다. 설정을 바꿀 때마다 추정 엔트로피(비트)와 강도 등급을 함께 보여 줍니다.

생성 방식
길이: 16
포함할 문자 종류
이 목록에 있는 기호만 비밀번호에 쓰입니다.

숫자 0과 대문자 O, 숫자 1과 소문자 l·대문자 I, 세로줄 | 처럼 화면에서 구분하기 어려운 문자를 뺍니다.
1 ~ 20개까지 한 번에 만들 수 있습니다.

생성 결과

옵션을 정하면 여기에 결과가 나옵니다.

입력한 내용은 이 브라우저 안에서만 처리되며 서버로 전송되지 않습니다. 어떻게 동작하나요?

방패와 자물쇠, 열쇠와 비밀번호를 나타내는 점으로 표현한 비밀번호 생성기

사용 방법

“생성 방식”에서 “무작위 문자”와 “패스프레이즈 (단어 조합)” 가운데 하나를 고릅니다. 페이지를 열면 이미 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 파일에는 비밀번호가 그대로 적혀 있으니 비밀번호 관리자에 옮긴 뒤에는 지우는 편이 안전합니다.

한 글자씩 뽑는 방식

무작위 문자는 세 단계로 만듭니다.

  1. 켜 둔 문자 종류마다 그 종류에서 한 글자씩 먼저 뽑습니다. 그래서 숫자를 켰다면 숫자가 적어도 하나는 들어갑니다.
  2. 남은 자리는 켜 둔 종류를 모두 합친 문자 집합에서 한 글자씩 뽑습니다.
  3. 전체 순서를 무작위로 섞습니다. 먼저 뽑은 글자가 늘 앞자리에 오는 일을 막기 위해서입니다.

패스프레이즈는 영어 단어 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자면 “매우 강함”이고, 외울 일이 없으니 읽기 어려워도 문제가 없습니다.

기기 잠금이나 비밀번호 관리자의 마스터 비밀번호처럼 직접 외워서 손으로 입력해야 하는 곳에는 패스프레이즈가 편합니다. 대신 위 표처럼 단어가 여러 개 필요합니다.

어느 쪽이든 사이트마다 다른 값을 쓰세요. 한 사이트에서 유출된 비밀번호를 다른 사이트 로그인에 그대로 넣어 보는 공격(크리덴셜 스터핑) 때문에, 같은 비밀번호를 여러 곳에 쓰면 한 곳의 유출이 나머지 계정으로 번집니다. “한 번에 생성할 개수”를 늘리면 계정 여러 개에 쓸 값을 한 번에 만들 수 있습니다.

참고 자료

자주 묻는 질문

계산한 비트 수가 소수로 나올 때 강도 등급은 어떤 값으로 정하나요?

화면에 보이는 반올림한 비트 수로 정합니다. 소문자·대문자·숫자로 10자를 만들면 계산값은 59.54비트이고, 화면에는 "약 60비트"로 나오며 등급도 60비트에 해당하는 "강함"입니다. 같은 방식으로 숫자를 붙이지 않은 10단어 패스프레이즈(79.74비트)는 "약 80비트"에 "매우 강함"으로 나옵니다. 그래서 화면의 비트 수를 등급 표에 그대로 대 보면 됩니다.

가입하려는 사이트가 일부 기호를 받아 주지 않으면 어떻게 하나요?

"기호"를 켠 뒤 "기호 목록 (직접 수정 가능)" 칸에서 그 사이트가 허용하는 기호만 남기세요. 목록에 있는 문자만 쓰이고, 같은 문자를 두 번 적어도 한 번으로 셉니다. 목록이 줄면 추정 엔트로피도 그만큼 다시 계산됩니다. 소문자·대문자·숫자에 기호를 !@# 세 개만 두면 문자 수가 65개가 되어 16자 기준 약 96비트입니다. 목록을 모두 지우면 "기호 목록이 비어 있습니다"라는 안내가 나오고 결과가 만들어지지 않습니다.

"헷갈리는 문자 제외"는 언제 켜는 것이 좋나요?

화면에 보이는 비밀번호를 눈으로 읽어 다른 기기에 옮겨 적거나 종이에 적어 둘 때 켜세요. 글꼴에 따라 숫자 0과 대문자 O, 숫자 1과 소문자 l·대문자 I, 세로줄 |이 거의 같아 보여 옮겨 적다가 틀리기 쉽습니다. 복사해서 붙여 넣기만 한다면 켤 필요가 없습니다. 켜면 쓸 수 있는 문자가 줄어 엔트로피가 조금 낮아집니다.

패스프레이즈를 영어가 아닌 다른 언어의 단어로 만들 수는 없나요?

없습니다. 어느 언어 페이지에서 열어도 같은 영어 단어 256개 목록에서 뽑습니다. 이 도구를 위해 고른 쉬운 영어 명사·형용사·동사이고, 단어 목록을 바꾸거나 직접 넣는 기능은 없습니다. 다른 언어의 자판 배열이 설정되어 있지 않은 기기나 로그인 화면에서도 그대로 입력할 수 있다는 점은 영어 단어 쪽의 장점입니다.

같은 글자나 같은 단어가 여러 번 나올 수 있나요?

무작위 문자에서는 자리마다 따로 뽑기 때문에 같은 글자가 여러 번 나올 수 있고, 그렇다고 약한 비밀번호가 되는 것은 아닙니다. 패스프레이즈는 한 개 안에서 같은 단어가 두 번 나오지 않게 뽑습니다. 한 번에 여러 개를 만들 때는 항목마다 따로 뽑으므로 서로 다른 항목에 같은 단어가 들어갈 수는 있습니다.

최종 수정일: