"아무 웹사이트에서나 비밀번호를 생성해도 안전할까?"는 타당한 질문입니다 — 여러분은 제어할 수 없는 도구에게, 곧 계정에 맡기게 될 비밀을 만들어달라고 요청하는 것이니까요. 솔직한 답은: 이는 전적으로 그 도구가 실제로 어떻게 작동하는지에 달려 있으며, 사이트의 말을 그대로 믿을 필요는 없다는 것입니다. 이 글은 여러분이 직접 확인할 수 있는 방법을 설명합니다.
요약
- 진짜 위험은 비밀번호 자체가 아니라, 사이트가 생성한 내용을 서버로 전송해서 기록될 수 있는지 여부입니다.
- 직접 확인할 수 있습니다: 브라우저 개발자 도구를 열고, 네트워크 탭으로 이동해서, 비밀번호를 생성한 뒤 요청이 발생하는지 관찰하세요.
- 진짜 클라이언트 측 생성기는 비밀번호를 생성할 때 네트워크 활동을 전혀 발생시키지 않습니다 — JavaScript가 전적으로 브라우저 안에서 실행됩니다.
- 무작위성 소스를 전혀 공개하지 않는 도구보다는 Web Crypto API(
crypto.getRandomValues()) 사용을 명시적으로 밝히는 도구를 선호하세요.
짧은 답변
온라인 비밀번호 생성기는 비밀번호를 전적으로 브라우저 안에서 생성하고 어디로도 전송하지 않을 때만 안전하게 사용할 수 있습니다. PassGenerate는 이런 방식으로 작동합니다: 생성은 Web Crypto API를 통해 로컬에서 이루어지며, 웹사이트에 적힌 주장을 믿을 필요 없이 브라우저에 내장된 개발자 도구를 사용해 1분 이내에 직접 확인할 수 있습니다.
생성기를 직접 확인하는 방법
이 확인을 위해 개발자일 필요는 없습니다:
- 비밀번호 생성기 사이트를 엽니다.
- 브라우저의 개발자 도구를 엽니다(대부분의 브라우저에서 F12 또는 마우스 오른쪽 클릭 → 검사).
- 네트워크 탭을 클릭합니다.
- 페이지에서 비밀번호를 생성합니다.
- 네트워크 탭을 관찰합니다. 진짜 클라이언트 측 도구라면 비밀번호가 생성될 때 새로운 요청이 전혀 발생하지 않는 것을 볼 수 있습니다 — 어디로도 아무것도 전송되지 않습니다. 생성 버튼을 클릭하는 순간 서버로 요청이 나가는 것이 보인다면, 자세히 살펴볼 가치가 있습니다: 요청 본문에 어떤 데이터가 전송되는지 확인하세요.
이 방법이 통하는 이유는 브라우저에서 실행되는 JavaScript가 모든 작업을 로컬에서 처리(무작위 비밀번호를 계산해서 보여주는 것으로 끝)하거나, 데이터를 서버로 보내고 응답을 기다리거나 둘 중 하나만 할 수 있기 때문입니다. 네트워크 탭은 실제로 어느 쪽이 일어나고 있는지 보여줍니다 — 이는 여러분이 브라우저가 실제로 보내는 트래픽을 검사하는 것이므로, 사이트가 눈치채지 못하게 조작할 수 있는 것이 아닙니다.
"클라이언트 측 생성"이 기술적으로 의미하는 것
진짜 클라이언트 측 비밀번호 생성기는 브라우저 자체의 Web Crypto API, 구체적으로는 crypto.getRandomValues()를 사용해 암호학적으로 안전한 무작위 바이트를 생성한 다음, 그 바이트를 여러분의 기기에서 실행되는 JavaScript 안에서만 선택한 문자 집합에 매핑합니다. 이 과정 중 어느 것도 네트워크 요청을 필요로 하지 않으며, 네트워크 요청으로부터 이득을 얻지도 않습니다. 어떤 도구가 비밀번호를 "생성"하기 위해 브라우저가 서버와 통신해야 한다면, 이는 이 작업에 아키텍처적으로 불필요한 것이며, 그 자체로 의문을 가져볼 만한 부분입니다.
주의해야 할 위험 신호
- 무작위성 소스가 공개되지 않음. 사이트가 무작위성을 어떻게 생성하는지 밝히지 않는다면,
Math.random()같은 더 약한 방법을 사용하는지 확인할 수 없습니다. 이 방법은 일부 엔진에서 관찰된 출력값만으로 재구성할 수 있을 만큼 예측 가능하며, 보안이 중요한 용도에는 적합하지 않습니다. - 생성 중 네트워크 활동. 위의 개발자 도구 확인을 통해 검증됩니다. 사이트가 아무것도 기록하지 않는다고 주장하더라도, 요청이 존재한다면 의도적으로든 서버 측 버그로든 기록될 가능성이 있습니다.
- 도구를 사용하기 전에 계정이나 이메일을 요구함. 비밀번호 생성기가 무작위 문자열을 생성하기 위해 이메일 주소를 필요로 할 정당한 이유는 없습니다.
- 과도한 서드파티 스크립트. 비밀 정보를 다루는 페이지에 광고 기술이나 분석 도구가 대량으로 실려 있으면 공격 표면이 넓어집니다 — 페이지에서 실행되는 서드파티 코드가 많을수록, 생성기 자체가 클라이언트 측이더라도 손상된 스크립트가 페이지의 내용을 가로챌 기회가 늘어납니다. 이는 가상의 우려가 아닙니다: 2024년 6월, 널리 사용되던 Polyfill.js CDN이 침해되었고, 그저 일상적인 의존성으로 해당 스크립트를 포함했을 뿐인 49만 개 이상의 웹사이트 방문자에게 악성 코드가 주입되어 전달되었습니다 — 이 사이트들 중 어느 것도 개별적으로 표적이 되거나 서드파티 스크립트를 신뢰한 것 외에 잘못한 일이 없었습니다. 평균적인 웹사이트는 이제 수십 개의 스크립트를 로드하며, 그중 약 3분의 2가 서드파티 스크립트이고, 서드파티가 관련된 침해 사고 비율은 해마다 급격히 증가하고 있습니다. 이것이 서드파티 스크립트가 있는 페이지가 자동으로 안전하지 않다는 뜻은 아니지만, 불필요한 도구를 잔뜩 실은 도구보다 간결하고 검증 가능한 페이지를 가진 생성기를 선호할 실질적인 이유가 됩니다.
이것이 왜 어떤 비밀번호에는 더 중요한가
신뢰할 수 없는 생성기를 사용하는 위험은 그 비밀번호가 무엇을 보호하는지에 비례합니다. 일회성 뉴스레터 가입을 위한 일회용 비밀번호를 생성하는 것은 의심스러운 도구를 쓰더라도 위험이 적습니다. 은행 비밀번호, 이메일 비밀번호, 또는 비밀번호 관리자의 마스터 비밀번호를 생성하는 것이야말로 주장을 믿기보다 클라이언트 측 동작을 직접 확인하기를 고집해야 하는 지점입니다 — 기록된 평문 사본이 실제로 문제가 되는 것이 바로 이런 비밀번호들이기 때문입니다.
핵심 요점
- 모든 온라인 비밀번호 생성기에 대한 핵심 안전성 질문은 비밀번호를 어딘가로 전송하는지 여부입니다 — 주장을 믿기보다 네트워크 탭으로 직접 확인하세요.
- 진짜 클라이언트 측 생성은 비밀번호 생성 시 네트워크 요청이 전혀 발생하지 않습니다.
- 무작위성 소스를 설명하지 않는 도구보다는 Web Crypto API의 CSPRNG 사용을 명시적으로 공개하는 도구를 선호하세요.
- 은행, 이메일, 마스터 비밀번호 같은 고위험 비밀번호용 생성기에는 저위험 일회용 비밀번호보다 더 엄격한 검토를 적용하세요.
PassGenerate를 신뢰할 수 있는 이유
- 비밀번호는 Web Crypto API를 사용해 브라우저에서 로컬로 생성됩니다.
- 어떤 비밀번호도 서버로 전송되지 않습니다.
- 암호학적으로 안전한 의사난수 생성기(CSPRNG)를 사용합니다.
- NIST와 OWASP가 권장하는 현대적인 보안 모범 사례를 따릅니다.
참고 자료
- Polyfill.js CDN 공급망 침해 사고, 2024년 6월
- MDN Web Crypto API 문서
- OWASP 비밀번호 저장 치트 시트
- NIST SP 800-63B – 디지털 신원 가이드라인
결론
온라인 비밀번호 생성기가 어떻게 작동하는지에 대해 그 말을 그대로 믿을 필요는 없습니다 — 브라우저의 네트워크 탭을 1분만 확인하면 생성한 내용을 전송하는지 확실히 알 수 있습니다. Web Crypto API의 CSPRNG를 사용하고, 비밀번호 생성 외에는 아무것도 요구하지 않으며, 네트워크 활동이 전혀 없다는 것을 직접 확인한 도구를 선호하세요 — 그리고 무언가 잘못되었을 때 가장 큰 영향을 미칠 비밀번호에는 가장 엄격한 검토를 남겨두세요.