비밀번호 생성기 - 강력한 랜덤 비밀번호 및 패스프레이즈 온라인
강력하고 안전한 랜덤 비밀번호와 기억하기 쉬운 패스프레이즈 생성. 길이, 문자, 복잡도 커스텀 — 100% 클라이언트, 저장 없음.
비밀번호 강도
다량 생성
자주 묻는 질문
비밀번호 생성기란 무엇인가요?
비밀번호 생성기는 암호학적으로 안전한 난수 생성을 사용하여 랜덤하고 예측 불가능한 비밀번호를 만드는 도구입니다. 사람이 만드는 비밀번호(패턴을 따르는 경향이 있어 예측 가능)와 달리, 생성된 비밀번호는 사용 가능한 문자 집합에서 최대한의 무작위성을 사용하여 무차별 대입 공격, 사전 공격, 사회 공학에 극도로 강합니다.
이 비밀번호 생성기를 어떻게 사용하나요?
모드를 선택하세요: 비밀번호(랜덤 문자) 또는 패스프레이즈(랜덤 단어). 길이 슬라이더로 원하는 비밀번호 길이를 설정하세요(16자 이상 권장). 문자 유형을 켜거나 끄세요: 대문자, 소문자, 숫자, 특수문자. 설정을 변경하면 비밀번호가 자동으로 생성됩니다. 강도 미터를 확인하여 보안 요구사항을 충족하는지 확인하세요. 복사 버튼을 클릭하여 클립보드에 복사하세요.
비밀번호 데이터가 안전한가요? 서버로 전송되나요?
비밀번호는 100% 안전하며 브라우저를 떠나지 않습니다. 이 도구는 Web Crypto API(crypto.getRandomValues())를 사용하여 기기에서 완전히 비밀번호를 생성합니다. 비밀번호 데이터는 어떤 서버로도 전송되지 않으며, 어떤 데이터베이스에도 저장되지 않고, 어디에도 기록되지 않습니다. 인터넷 연결을 끊어도 도구가 완전히 작동하는 것을 확인할 수 있습니다.
비밀번호 엔트로피란 무엇이며 왜 중요한가요?
엔트로피는 비밀번호의 무작위성과 예측 불가능성을 비트 단위로 측정합니다. 엔트로피가 높을수록 무차별 대입 공격으로 해독하기 어렵습니다. E = L × log₂(C)로 계산되며, L은 비밀번호 길이, C는 문자 풀 크기입니다. 예를 들어, 모든 90개 문자 유형을 사용하는 16자 비밀번호는 약 103.8비트의 엔트로피를 가집니다. 보안 전문가들은 일반 계정에 최소 60비트, 고보안 애플리케이션에 120비트 이상을 권장합니다.
비밀번호와 패스프레이즈의 차이점은 무엇인가요?
비밀번호는 랜덤 문자열(예: K9$mPq2#vL7n)이고, 패스프레이즈는 랜덤 단어의 연속(예: correct-horse-battery-staple)입니다. 패스프레이즈는 일반적으로 높은 엔트로피를 유지하면서도 기억하기 쉽습니다. 1,296개 단어 목록에서 5단어 패스프레이즈는 약 51.7비트의 엔트로피를 제공하며, 이는 모든 문자 유형을 사용하는 8자 랜덤 비밀번호에 비견됩니다.
비밀번호는 얼마나 길어야 하나요?
NIST는 최소 8자의 비밀번호를 권장하지만, 보안 전문가들은 일반적으로 일반 계정에 12-16자 이상, 민감한 계정(은행, 이메일, 비밀번호 관리자)에 20자 이상을 권장합니다. 더 긴 비밀번호는 무차별 대입으로 해독하는 데 필요한 시간을 기하급수적으로 증가시킵니다. 이 도구는 기본 16자로, 모든 문자 유형이 활성화되면 약 103.8비트의 엔트로피를 제공합니다.
Math.random() 대신 crypto.getRandomValues()를 사용해야 하는 이유는?
Math.random()은 결정론적 알고리즘을 사용하는 의사 난수 생성기(PRNG)입니다. 시드를 알면 출력을 예측할 수 있습니다. crypto.getRandomValues()는 운영 체제의 엔트로피 소스를 기반으로 하는 암호학적으로 안전한 PRNG(CSPRNG)로, 비밀번호 생성과 같은 보안에 민감한 애플리케이션에 적합합니다. 이 도구는 최대 보안을 보장하기 위해 crypto.getRandomValues()만 사용합니다.
코드 예제
// Secure password generator using Web Crypto API
function generatePassword(length = 16, options = {}) {
const { uppercase = true, lowercase = true, numbers = true, symbols = true } = options;
let charset = '';
if (uppercase) charset += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (lowercase) charset += 'abcdefghijklmnopqrstuvwxyz';
if (numbers) charset += '0123456789';
if (symbols) charset += '!@#$%^&*()_+-=[]{}|;:,.<>?';
const array = new Uint32Array(length);
crypto.getRandomValues(array);
let password = '';
for (let i = 0; i < length; i++) {
password += charset[array[i] % charset.length];
}
return password;
}
const pwd = generatePassword(20);
console.log(pwd);
console.log('Entropy:', (20 * Math.log2(90)).toFixed(1), 'bits');