비밀번호 도구 생성기로 돌아가기

보안 가이드

Web Crypto와 리젝션 샘플링을 이용한 클라이언트 측 비밀번호 생성

PwdGen의 브라우저 측 비밀번호 생성 모델, 엔트로피 경계, 리젝션 샘플링 및 개인정보 보호 한계를 설명하는 기술 백서입니다.

개요

PwdGen은 클라이언트 측 참조 생성 방법을 사용합니다. 브라우저 또는 런타임 Web Crypto가 무작위 바이트를 제공하고, 리젝션 샘플링이 해당 바이트를 편향되지 않은 제한된 인덱스로 매핑하며, Fisher-Yates 셔플이 필요한 문자 클래스를 최종 비밀번호 전체에 분배합니다. 이 방법은 의도적으로 작고, 감사 가능하며, 웹 앱, API 어댑터, CLI 및 준비된 pwdgen-core 패키지에서 재현 가능합니다.

이 문서는 엔지니어링 모델을 설명합니다. 새로운 암호화 기본 요소, 공식 표준 또는 독립적인 제3자 감사에 대한 주장이 아닙니다.

무작위성 소스

생성기는 crypto.getRandomValues()를 통해 암호학적으로 강력한 무작위 값을 요청합니다. Web Crypto 구현은 호스트 환경에서 제공하는 고품질 엔트로피로 시드된 암호학적으로 안전한 의사 난수 생성기를 사용할 것으로 예상됩니다. 실제로 브라우저는 이 책임을 운영 체제 기능 및 플랫폼 암호화 공급자에게 위임합니다.

PwdGen은 모든 비밀번호 생성 호출이 하드웨어 노이즈 소스를 직접 샘플링한다고 주장하지 않습니다. 더 안전하고 정확한 표현은 브라우저가 Web Crypto API를 통해 CSPRNG 출력을 제공하며, PwdGen이 비암호화 의사 난수 인터페이스를 피한다는 것입니다.

Math.random()을 사용하지 않는 이유

Math.random()는 보안에 민감한 용도로 지정되지 않았습니다. 시뮬레이션, 시각 효과 및 일반적인 무작위 UI 동작에는 적합하지만, 비밀번호, 재설정 코드, 서명 키 또는 기타 자격 증명에 필요한 보장을 제공하지 않습니다.

PwdGen은 안전하지 않은 의사 난수 대체를 오류 상태로 간주합니다. Web Crypto를 사용할 수 없는 경우, 생성기는 조용히 취약한 자격 증명을 생성하는 대신 호환성 오류를 표시해야 합니다.

리젝션 샘플링

무작위 바이트와 정수는 일반적으로 2의 거듭제곱 범위에서 추출됩니다. 비밀번호 알파벳의 크기가 해당 범위를 정확히 나누는 경우는 드뭅니다. 직접 모듈로 연산을 사용하면 일부 문자가 다른 문자보다 약간 더 자주 선택될 수 있습니다.

PwdGen은 리젝션 샘플링을 사용합니다:

  1. 32비트 부호 없는 정수를 추출합니다.
  2. 32비트 범위 내에 들어가는 알파벳 크기의 가장 큰 배수를 계산합니다.
  3. 해당 경계를 초과하는 값을 거부합니다.
  4. 남은 완전한 범위에만 모듈로를 적용합니다.

이렇게 하면 측정 가능한 모듈로 편향을 도입하지 않고 제한된 문자 선택이 균일하게 유지됩니다.

문자 범위 및 엔트로피

구성된 비밀번호 정책에 대해 생성기는 먼저 각 활성화된 클래스에서 하나의 문자를 선택하고, 나머지를 결합된 알파벳으로 채운 다음 결과를 섞습니다. 이는 예측 가능한 위치에 예측 가능한 클래스를 배치하지 않고 대상 비밀번호 규칙을 충족하는 데 도움이 됩니다.

이론적 엔트로피 추정치는 다음과 같습니다:

bits = length × log2(uniqueAlphabetSize)

이 값은 구성된 알파벳에서 균일하게 무작위로 선택한 경우의 상한선입니다. 비밀번호 재사용, 사용자 편집 출력, 손상된 장치, 유출된 비밀번호 또는 대상 서비스의 취약한 저장소를 고려하지 않습니다.

개인정보 보호 경계

브라우저 도구에서 생성된 값은 사용자가 복사하거나 내보낼 때까지 페이지 메모리와 표시된 결과 필드에 남아 있습니다. 로컬 생성기는 생성된 비밀번호를 PwdGen 서버로 보내거나, URL에 넣거나, 분석 이벤트에 기록하지 않습니다.

이 경계는 악성 브라우저 확장 프로그램, 클립보드 관리자, 운영 체제 손상, 화면 캡처, 피싱 페이지 또는 사용자가 생성된 비밀번호를 안전하지 않은 대상에 붙여넣는 것으로부터 보호하지 않습니다.

재현 가능한 구현

공개 pwdgen-cli 패키지와 준비된 pwdgen-core 패키지는 웹 페이지 외부에서 생성 모델을 검사할 수 있도록 존재합니다. 단위 테스트는 문자 클래스 포함, 제외된 문자, 잘못된 구성, 엔트로피 공식 및 안전하지 않은 의사 난수 대체 코드 경로의 부재를 다룹니다.

목표는 PwdGen을 개인 표준으로 만드는 것이 아닙니다. 목표는 개발자가 환경에서 다른 신뢰 경계가 필요할 때 읽고, 테스트하고, 교체할 수 있을 만큼 구현을 작게 만드는 것입니다.

출처