비밀번호 생성

브라우저 안에서만 처리됩니다. 입력한 내용과 선택한 파일은 서버로 전송되지 않습니다.

여기서 만든 비밀번호는 이 브라우저 밖으로 나가지 않습니다. 서버로 보내지 않고, 어디에도 저장하지 않으며, 페이지를 닫으면 사라집니다. 난수는 운영체제가 주는 crypto.getRandomValues 로 뽑습니다.

문자 종류

사이트가 받아 주지 않는 기호가 있으면 여기에 그대로 적으세요. 적은 글자는 결과에서 빠집니다.

만들어진 비밀번호

강도

125.9비트 매우 강함

어떤 저장 방식이든 무차별 대입으로는 풀리지 않는 영역입니다.

아래 시간은 이 설정으로 만들었다는 것까지 공격자가 안다고 보고, 가능한 조합을 전부 시도할 때 평균적으로 걸리는 시간입니다. 글자 모양을 보고 점수를 매긴 것이 아니라 경우의 수를 직접 센 값입니다.

로그인 화면에 직접 시도
약 1.2×10²⁷년 우주 나이(138억 년)보다 깁니다 초당 1,000회. 서버가 시도 횟수를 막지 않는다고 봤을 때의 값이고, 실제로는 대개 이보다 훨씬 느립니다.
유출된 해시를 GPU 로 (빠른 해시)
125경 년 우주 나이(138억 년)보다 깁니다 초당 1조회. 사이트가 비밀번호를 MD5·SHA-1·SHA-256 같은 빠른 해시로 저장했다가 유출된 경우입니다. 고성능 GPU 여러 장 기준의 어림값입니다.
유출된 해시를 GPU 로 (느린 해시)
약 1.2×10²⁵년 우주 나이(138억 년)보다 깁니다 초당 10만회. 사이트가 bcrypt·argon2 처럼 일부러 느린 방식으로 저장한 경우입니다. 같은 비밀번호라도 사이트가 어떻게 저장했느냐로 1,000만 배가 갈립니다.

사용법

  1. 만드는 방식을 고릅니다. "문자 조합"은 사이트에 저장해 두고 쓰는 비밀번호에, "단어 조합"은 직접 입력하거나 외워야 하는 비밀번호(노트북 잠금, 하드디스크 암호 등)에 알맞습니다.
  2. 길이와 문자 종류를 조절합니다. 사이트가 특정 기호를 받지 않으면 "직접 뺄 글자"에 적으면 됩니다.
  3. 한 번에 여러 개가 나오니 마음에 드는 것을 골라 복사 버튼을 누릅니다. 마음에 드는 게 없으면 "다시 만들기"를 누르세요.
  4. 아래 "강도"에서 몇 비트인지와, 그 비트가 실제로 어느 정도의 시간을 뜻하는지 확인합니다.

자주 묻는 질문

만든 비밀번호가 서버로 전송되나요?

아니요. 이 페이지의 자바스크립트가 여러분의 브라우저 안에서 직접 만듭니다. 서버로 보내는 코드가 없고, 어디에도 저장하지 않으며, 페이지를 새로 고치면 사라집니다. 비밀번호 생성기를 쓸 때 이것이 가장 중요한 부분입니다 — 만드는 과정이 서버를 거치면 그 서버가 여러분의 비밀번호를 알게 되기 때문입니다. 네트워크 탭을 열어 두고 "다시 만들기"를 눌러 보면 아무 요청도 나가지 않는 것을 직접 확인할 수 있습니다.

난수는 어떻게 뽑나요? Math.random 인가요?

아닙니다. 운영체제의 난수원을 쓰는 crypto.getRandomValues 로 뽑습니다. Math.random 은 속도를 위해 만들어진 함수라 몇 개의 출력만 보면 내부 상태를 되돌릴 수 있고, 그러면 그 전후로 만들어진 값이 전부 예측됩니다. 또 하나, 뽑은 바이트를 알파벳 크기로 나눈 나머지(예: byte % 62)로 글자를 고르면 앞쪽 글자가 더 자주 나오는 편향이 생기는데, 이 도구는 나누어떨어지지 않는 구간을 버리고 다시 뽑는 방식으로 그 편향을 없앴습니다.

비트가 무슨 뜻인가요?

만들 수 있는 비밀번호의 가짓수를 2의 거듭제곱으로 나타낸 값입니다. 60비트면 2의 60제곱(약 100경) 가지 중 하나라는 뜻입니다. 이 숫자는 글자 모양을 보고 매긴 점수가 아니라 설정에서 직접 센 경우의 수입니다. "종류를 최소 하나씩 넣기"를 켜면 조건을 만족하는 것만 남으므로 가짓수가 오히려 조금 줄어드는데, 그것까지 반영해 계산합니다. 기준을 잡자면 60비트 미만은 유출 시 위험하고, 80비트 이상이면 무차별 대입으로는 사실상 뚫리지 않습니다.

길이를 늘리는 것과 기호를 넣는 것 중 무엇이 더 낫나요?

길이입니다. 소문자만 26가지로 20자를 만들면 94비트, 네 종류를 다 써서 12자를 만들면 76비트입니다. 기호를 추가하면 글자당 정보량이 조금 늘지만, 길이는 그 정보량을 통째로 곱합니다. 게다가 기호는 사이트마다 받아 주는 종류가 달라 실패하기 쉽습니다. 저장해 두고 쓸 비밀번호라면 20자 이상을 권합니다.

단어 조합(패스프레이즈)이 정말 안전한가요?

안전합니다. 다만 "안전하다"의 근거가 단어의 뜻이 아니라 목록의 크기와 단어 수라는 점이 중요합니다. 이 도구의 영어 목록은 883개, 한글 목록은 519개이므로 단어 하나가 각각 약 9.8비트, 9.0비트입니다. 영어 6단어면 59비트, 8단어면 78비트입니다. 직접 고른 단어(생일, 가족 이름, 좋아하는 노래 제목)로 만든 문장은 이 계산이 통하지 않습니다 — 사람이 고르는 단어는 치우쳐 있어서 실제 가짓수가 훨씬 적습니다.

첫 글자를 대문자로 바꾸면 더 안전해지나요?

아니요, 그대로입니다. 규칙이 정해져 있으면(모든 단어의 첫 글자를 대문자로) 공격자도 그 규칙을 알고 시도하기 때문에 경우의 수가 늘지 않습니다. 사이트가 "대문자를 포함해야 합니다"라고 요구할 때 통과하기 위한 옵션이지 강도를 위한 것이 아니고, 화면의 비트 수도 이 옵션에 따라 변하지 않습니다.

헷갈리는 글자를 빼면 약해지나요?

조금 약해집니다. 0O1lI 다섯 글자를 빼면 알파벳이 84자에서 79자로 줄어 글자당 약 0.09비트를 잃습니다. 20자 기준으로 1.8비트 차이인데, 길이를 한 글자 늘리면(6.3비트) 그보다 훨씬 크게 만회됩니다. 종이에 적어 두거나 다른 기기에 손으로 옮겨 입력해야 한다면 빼는 편이 낫습니다.

같은 비밀번호를 여러 사이트에 쓰면 안 되나요?

안 됩니다. 아무리 강한 비밀번호라도 한 사이트가 유출되면 그 값이 그대로 공격자에게 넘어가고, 공격자는 같은 아이디·비밀번호로 다른 사이트에 로그인해 봅니다(크리덴셜 스터핑). 사이트마다 다른 비밀번호를 만들고 비밀번호 관리자에 넣어 두는 편이 안전합니다. 이 도구는 그 관리자에 넣을 값을 만들어 주는 역할입니다.