비밀번호 생성
브라우저 안에서만 처리됩니다. 입력한 내용과 선택한 파일은 서버로 전송되지 않습니다.
여기서 만든 비밀번호는 이 브라우저 밖으로 나가지 않습니다. 서버로 보내지 않고, 어디에도 저장하지 않으며, 페이지를 닫으면 사라집니다. 난수는
운영체제가 주는 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만 배가 갈립니다.
사용법
- 만드는 방식을 고릅니다. "문자 조합"은 사이트에 저장해 두고 쓰는 비밀번호에, "단어 조합"은 직접 입력하거나 외워야 하는 비밀번호(노트북 잠금, 하드디스크 암호 등)에 알맞습니다.
- 길이와 문자 종류를 조절합니다. 사이트가 특정 기호를 받지 않으면 "직접 뺄 글자"에 적으면 됩니다.
- 한 번에 여러 개가 나오니 마음에 드는 것을 골라 복사 버튼을 누릅니다. 마음에 드는 게 없으면 "다시 만들기"를 누르세요.
- 아래 "강도"에서 몇 비트인지와, 그 비트가 실제로 어느 정도의 시간을 뜻하는지 확인합니다.
자주 묻는 질문
만든 비밀번호가 서버로 전송되나요?
아니요. 이 페이지의 자바스크립트가 여러분의 브라우저 안에서 직접 만듭니다. 서버로 보내는 코드가 없고, 어디에도 저장하지 않으며, 페이지를 새로 고치면 사라집니다. 비밀번호 생성기를 쓸 때 이것이 가장 중요한 부분입니다 — 만드는 과정이 서버를 거치면 그 서버가 여러분의 비밀번호를 알게 되기 때문입니다. 네트워크 탭을 열어 두고 "다시 만들기"를 눌러 보면 아무 요청도 나가지 않는 것을 직접 확인할 수 있습니다.
난수는 어떻게 뽑나요? 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비트) 그보다 훨씬 크게 만회됩니다. 종이에 적어 두거나 다른 기기에 손으로 옮겨 입력해야 한다면 빼는 편이 낫습니다.
같은 비밀번호를 여러 사이트에 쓰면 안 되나요?
안 됩니다. 아무리 강한 비밀번호라도 한 사이트가 유출되면 그 값이 그대로 공격자에게 넘어가고, 공격자는 같은 아이디·비밀번호로 다른 사이트에 로그인해 봅니다(크리덴셜 스터핑). 사이트마다 다른 비밀번호를 만들고 비밀번호 관리자에 넣어 두는 편이 안전합니다. 이 도구는 그 관리자에 넣을 값을 만들어 주는 역할입니다.