이 도구는 자바스크립트의 Crypto API(window.crypto.getRandomValues)로 난수를 생성합니다.
일반적인 Math.random()은 내부적으로 예측 가능한 알고리즘(PRNG)을 쓰기 때문에 보안 목적에는 부적합하지만,
Crypto API는 운영체제 수준의 암호학적으로 안전한 난수 생성기를 사용해 다음 값을 예측하는 것이 사실상 불가능합니다.
모든 과정은 브라우저 내부에서만 이루어지며, 생성된 비밀번호는 어디에도 저장되거나 전송되지 않습니다.
네. 먼저 비밀번호 안의 위치(자리)를 암호학적 난수로 무작위로 섞어 순서를 정하고, 앞쪽부터 체크한 문자 종류마다 서로 다른 자리를 하나씩 배정해 해당 종류의 문자를 채웁니다. 나머지 자리는 선택한 문자 종류를 모두 합친 전체 풀에서 무작위로 채웁니다. 이렇게 "자리 배정 → 종류별 확정 배치 → 나머지 채우기" 순서로 생성하기 때문에, 나중에 다른 종류를 채우다가 앞서 배치한 문자를 실수로 덮어쓰는 일 없이 체크한 문자 종류가 최소 1개씩 확실히 포함됩니다 (단, 길이가 선택한 문자 종류 수보다 짧으면 일부만 보장됩니다).
비밀번호의 이론적 강도는 엔트로피(bits)로 측정합니다. 계산식은 "길이 × log2(사용한 문자 종류 수)"이며, 예를 들어 대문자+소문자+숫자+특수문자(약 94종)를 모두 사용한 16자리 비밀번호는 약 105bit의 엔트로피를 가집니다. (문자 종류별 최소 1개 보장 로직 때문에 엄밀한 확률분포는 이 값과 아주 근소하게 다를 수 있지만, 실용적인 강도 비교 지표로는 이 근사치를 그대로 사용합니다.)
위 강도 표시는 이 엔트로피 값을 기준으로 하며, 크랙 시간은 공격자가 초당 100억 번(오프라인에서 GPU 클러스터로 해시를 대입하는 수준)을 시도한다고 가정했을 때 평균적으로 전체 경우의 수(2^bits)의 절반을 시도하면 정답을 찾는다는 통계적 기댓값을 보여줍니다(최악의 경우 전체를 다 시도해야 할 수도 있습니다). 실제 시간은 서비스가 사용하는 해시 알고리즘, salt 적용 여부, 공격 장비 성능, 로그인 시도 제한 정책에 따라 크게 달라질 수 있는 참고용 추정치입니다.