비밀번호 & 시크릿 생성기

비밀번호 & 시크릿 생성기
브라우저의 crypto.getRandomValues로 생성합니다. 어디로도 전송되지 않고 저장되지도 않습니다.


길이
20
6
32
64
96
128
소문자 (a-z)
대문자 (A-Z)
숫자 (0-9)
특수문자 (!@#$…)

헷갈리는 문자 제외 (0/O, 1/l/I)
문자 중복 없음
강도
Excellent
129 bits
86 symbols
crack: 10^21 years
빠른 해시를 대상으로 초당 100억 회 대입하는 오프라인 공격을 가정합니다.
생성 결과
Press Generate to create 5 secrets.

강력한 비밀번호, 외우기 쉬운 패스프레이즈, API 키, PIN을 만듭니다. 강도는 모호한 색상 막대가 아니라 실제 엔트로피 비트 수로 보여줍니다. 모든 값은 브라우저의 암호학적 난수 생성기에서 나옵니다.

비밀번호의 강도는 엔트로피 — 공격자가 훑어야 하는 경우의 수 — 로 재고, 엔트로피는 특수문자보다 길이에서 훨씬 많이 나옵니다. 소문자만 쓴 16자 무작위 문자열이 모든 문자 종류를 억지로 넣은 8자보다 엔트로피가 높고, 입력하기도 편합니다.

여기서 쓰는 난수는 Math.random()이 아니라 브라우저의 암호학적 난수원인 crypto.getRandomValues()입니다. Math.random()의 출력은 앞선 값으로부터 예측할 수 있어 비밀에 써서는 안 됩니다. 패스프레이즈 모드는 단어를 조합하는데, 사람이 직접 다시 입력해야 하는 상황이라면 이쪽이 낫습니다. 추정 엔트로피는 비트 단위 숫자로 표시하므로 색깔이 아니라 값으로 판단할 수 있습니다.

문자 구성 규칙은 다양성을 강제하려고 만들어졌지만 실제로는 예측 가능성을 만들어 냅니다. 대문자 하나, 숫자 하나, 기호 하나를 요구하면 사람들은 앞에 대문자, 뒤에 숫자, 그 뒤에 느낌표를 붙이는 쪽으로 몰립니다. 공격자가 그대로 모델링하는 패턴이라, 규칙이 탐색 공간에 더해 주는 것보다 없애는 것이 많습니다. NIST 지침도 여러 해 전부터 구성 규칙을 강제하지 말고 길이와 유출 목록 대조를 쓰라고 권고해 왔습니다. 그래도 요구하는 사이트라면, 규칙을 만족하는 문자열을 직접 지어내는 것보다 규칙에 맞는 무작위 문자열을 생성하는 편이 낫습니다.

중요한 변수는 길이이고, 산수를 보면 이유가 분명합니다. 문자가 하나 늘 때마다 탐색 공간이 알파벳 크기만큼 곱해집니다. 그래서 62자 알파벳에서 문자 하나를 더하는 것이, 짧은 비밀번호의 알파벳에 기호 서른 개를 더하는 것보다 큽니다. 16자 무작위 소문자 문자열의 엔트로피는 약 75비트이고, 출력 가능한 ASCII를 다 쓴 8자 문자열은 약 52비트입니다. 길고 단순한 쪽이 더 강하면서 휴대폰에서 입력하기도 쉽습니다.

사람이 직접 다시 입력해야 하는 경우라면 패스프레이즈를 고르는 편이 좋습니다. 기기 비밀번호, 디스크 암호화 키, 종이에 적어 두는 복구 문구 같은 것들입니다. 서로 관련 없는 단어 몇 개는 실제로 상당한 엔트로피를 갖지만, 조건이 있습니다. 단어를 사람이 고르는 것이 아니라 무작위로 뽑아야 합니다. 사람이 떠올린 구절은 사전이 시사하는 것보다 훨씬 좁은 분포에서 나오기 때문입니다. 여기 표시되는 엔트로피 값은 실제로 사용된 알파벳과 길이로 계산되므로, 패스프레이즈와 무작위 문자열의 비교가 인상이 아니라 숫자로 나옵니다.

비밀번호 & 시크릿 생성기 사용법

  1. 모드를 고릅니다. 일반 비밀번호는 랜덤, 외울 것은 패스프레이즈, 서비스 시크릿은 API 키, 숫자만 필요하면 PIN입니다.
  2. 길이나 단어 수를 정하고 어떤 문자 종류를 넣을지 선택합니다.
  3. 여러 개가 필요하면 생성 개수를 지정한 뒤 생성을 누릅니다.
  4. 행의 아이콘으로 하나만 복사하거나 전체 복사를 씁니다.

알아두면 좋은 점

  • 복잡도보다 길이가 중요합니다. 소문자만 쓴 20자가 특수문자를 섞은 10자보다 강하고 입력하기도 훨씬 쉽습니다.
  • 비밀번호를 소리 내어 읽거나 종이·스크린샷에서 옮겨 적어야 한다면 헷갈리는 문자 제외를 켜세요. 0/O와 1/l/I를 빼 줍니다.
  • 패스프레이즈는 엔트로피를 조금 내주고 기억하기 쉬움을 크게 얻는 방식입니다. 이 단어 목록에서 다섯 단어면 약 60비트로, 아무 도움 없이 외워야 하는 용도에는 충분합니다.
  • 해독 시간 추정은 빠른 해시를 대상으로 초당 100억 회 시도하는 오프라인 공격을 가정합니다. bcrypt나 Argon2처럼 느린 해시라면 실제 수치는 훨씬 큽니다.

자주 묻는 질문

비밀번호가 서버에서 만들어지나요?

아니요. 브라우저의 crypto.getRandomValues에서 나오며 전송되지 않고 저장되지도 않습니다. 새로고침하면 사라집니다.

엔트로피가 몇 비트면 충분한가요?

대략 이렇습니다. 속도 제한과 2단계 인증이 있는 계정이면 60비트로 충분하고, 중요한 것이라면 80비트 이상, 128비트면 무차별 대입을 논할 필요가 없어집니다. 설정에 따른 정확한 값은 강도 표시에 나옵니다.

문자 중복 없음을 켜면 왜 엔트로피가 떨어지나요?

중복을 금지하면 가능한 조합이 줄어들어 엔트로피가 조금 낮아지고, 길이도 문자 집합 크기를 넘을 수 없게 됩니다. 보안 옵션이 아니라 가독성 옵션입니다.