안전한 랜덤 비밀번호 생성 · crypto.getRandomValues · 브라우저에서 바로 처리(서버 전송 없음)
16
비밀번호 생성기가 하는 일
사람이 직접 지은 비밀번호는 대개 예측 가능한 자리에 대문자가 오고, 끝에 숫자와 느낌표가 붙습니다. 공격 도구는 바로 그 습관을 노립니다. 이 도구는 사람의 손을 거치지 않고 브라우저에 내장된 암호용 난수 발생기 crypto.getRandomValues로 한 글자씩 뽑아 비밀번호를 만듭니다. 흔히 쓰이는 Math.random 같은 일반 난수는 사용하지 않습니다.
난수를 문자 개수로 나눌 때 생기는 이른바 모듈로 편향도 제거했습니다. 32비트 난수를 뽑되 문자 개수의 배수를 넘어가는 값이 나오면 버리고 다시 뽑는 방식이라, 어떤 글자든 뽑힐 확률이 똑같습니다. 또 대문자·소문자·숫자·특수문자 중 켜 놓은 종류마다 최소 한 글자가 반드시 들어가도록 먼저 채운 다음, 전체 자리를 뒤섞어 특정 종류가 앞자리에 몰리지 않게 합니다.
길이는 4자에서 64자까지 슬라이더로 정하고, 한 번에 최대 50개까지 만들 수 있습니다. 특수문자는 !@#$%^&*()-_=+[]{};:,.<>? 를 쓰며, 헷갈리는 문자 제외를 켜면 숫자 0과 대문자 O, 숫자 1과 소문자 l·대문자 I, 그리고 세로줄과 백틱이 후보에서 빠집니다. 종이에 적어 전달하거나 전화로 불러 줘야 하는 비밀번호라면 이 옵션이 도움이 됩니다.
각 결과 아래의 막대는 강도 표시입니다. 선택한 문자 집합의 크기와 길이로 계산한 정보량을 기준 삼아 40비트 미만이면 약함, 64비트 미만이면 보통, 90비트 미만이면 강함, 그 이상이면 매우 강함으로 나눕니다. 문자 종류를 늘리는 것보다 길이를 늘리는 쪽이 이 값을 훨씬 빨리 끌어올립니다.
사용 방법
길이 슬라이더를 옮겨 자릿수를 정합니다. 중요한 계정이라면 16자 이상을 권합니다.
포함할 문자 종류를 체크합니다. 특수문자를 막는 사이트라면 해당 항목을 꺼 주세요.
필요하면 헷갈리는 문자 제외를 켭니다.
생성 개수를 정하고 생성을 누릅니다. 옵션을 바꾸면 자동으로 다시 만들어집니다.
마음에 드는 줄의 복사 아이콘을 누르거나, 전체 복사로 목록을 한꺼번에 가져갑니다.
궁금한 사항 있으신가요?
A넘어가지 않습니다. 난수 생성부터 화면 표시까지 전부 브라우저 안에서 끝나고, 만들어진 문자열을 서버로 보내는 코드 자체가 없습니다. 페이지를 새로고침하면 이전 결과는 사라집니다.
A브라우저가 제공하는 암호학적 난수 함수 crypto.getRandomValues를 씁니다. 여기에 더해 문자 개수로 나눌 때 특정 글자가 조금 더 자주 나오는 편향을 없애려고, 범위를 벗어난 난수는 버리고 다시 뽑습니다.
A대문자·소문자·숫자·특수문자를 모두 켠 상태라면 16자에서 이미 강함 구간에 들어가고, 20자를 넘으면 매우 강함이 됩니다. 반대로 8자는 모든 종류를 켜도 보통에 머무릅니다.
A선택한 문자 집합의 크기를 밑으로 삼아 길이만큼 곱한 경우의 수를 비트 단위 정보량으로 환산한 값입니다. 사전 단어 포함 여부 같은 것은 보지 않고 순수하게 조합 수만 따집니다.
A들어갑니다. 켜 둔 종류마다 먼저 한 글자씩 확보한 뒤 남은 자리를 전체 후보에서 채우고, 마지막에 섞습니다. 다만 길이가 종류 수보다 짧으면 앞쪽 종류부터만 반영됩니다.
A후보 글자 수가 줄어드니 같은 길이 기준으로는 아주 조금 약해집니다. 강도 막대에도 그 감소분이 반영되니, 신경 쓰인다면 길이를 한두 자 늘려 상쇄하면 됩니다.
A괜찮습니다. 최대 50개까지 뽑아서 눈에 잘 들어오는 것을 고르는 방식이라도, 어느 것을 고를지가 미리 정해져 있지 않으므로 무작위성이 훼손되지 않습니다.
A이 페이지에는 저장 기능이 없으니 브라우저나 전용 비밀번호 관리 프로그램에 바로 넣어 두세요. 메모장 파일이나 메신저 대화창에 남겨 두는 것은 피하는 편이 좋습니다.