PassForge - 올인원 비밀번호 생성기 CLI
프로덕션 준비 완료, 암호학적으로 안전한 비밀번호 생성기 CLI로, 17가지 생성 모드, 엔트로피 투명성 및 포괄적인 사용자 정의 옵션을 제공합니다.



기능
17가지 생성 모드
| 생성기 | 명령어 | 설명 |
|---|
| 랜덤 | random, r | 암호학적으로 안전한 무작위 문자 비밀번호 |
| 패스프레이즈 | phrase, p | EFF 단어 목록을 사용한 단어 기반 패스프레이즈 |
| 리트스피크 | leet, l | 문자 치환(A→4, E→3 등)이 적용된 패스프레이즈 |
| PIN | pin | 구성 가능한 길이의 숫자 PIN |
| 발음 가능 | pronounce, pr | 말하기 쉬운 음절 기반 비밀번호 |
| UUID | uuid, u | RFC 4122/9562 UUID(v1, v4, v7) 및 짧은 UUID(Base58) |
| Base64 | base64, b64 | URL 안전 base64 인코딩 시크릿 |
| JWT 시크릿 | jwt | JWT 서명(HS256/384/512)을 위한 고엔트로피 시크릿 |
| WiFi 키 | wifi | WPA2/WPA3 호환 키(8-63자) |
| 라이선스 키 | license | 소프트웨어 라이선스 키(AxB 형식, 예: 5x5) |
| 복구 코드 | recovery | 2FA 백업 코드(숫자 또는 단어 기반) |
| OTP 코드/시크릿 | otp | TOTP/HOTP 코드 및 시크릿, otpauth URI 포함 |
| 패턴 | pattern | 시각적 그리드 기반 패턴 비밀번호 |
| 테마 프레이즈 | phrase (사용자 지정) | 테마 단어 목록(동물, SF 등)을 사용한 패스프레이즈 |
| NATO 음성 | phonetic, ph | 텍스트/비밀번호를 NATO 알파벳(Alpha-Bravo)으로 변환 |
| 분석 | analyze, check | 기존 비밀번호의 강도 분석 |
|
- 사전 설정 프로필: 일반적인 사용 사례에 대한 원클릭 생성(Strong, Memorable, Dev 등)
- 대화형 메뉴: 안내식 생성을 위한 완전한 기능의 메뉴
- 플랫폼 런처: 대화형 메뉴가 포함된 전용
.bat 및 .sh 스크립트
- 암호학적 보안: CSPRNG를 위해 Python의
secrets 모듈 사용
- 엔트로피 투명성: 실시간 엔트로피 계산 및 강도 분석
- zxcvbn 분석: 패턴 기반 비밀번호 강도 확인(사전 공격, 시퀀스)
- 안전한 클립보드: 구성 가능한 시간 초과 후 자동 클립보드 지우기
- 실시간 OTP 코드: 시크릿과 함께 현재 6/8자리 TOTP 코드 생성
- OTP용 QR 코드: 인증 앱용 스캔 가능 QR 코드
- 색상 코드 출력: 문자 유형 간 시각적 구분
- JSON 내보내기: 스크립팅을 위한 기계 판독 가능 출력
- 균형 모드: 읽기 가능한 분포 보장(문자 60%, 숫자 20%, 기호 20%)
- 생성기 가이드: 14개 생성기 유형에 대한 포괄적인 문서.
- 암호화된 기록(Vault): AES-128(Fernet)을 사용하여 저장된 비밀번호 자동 암호화.
- 안전한 Vault 저장소: 전용 vault는
.env(권장) 또는 엄격한 0600 파일 권한이 있는 레거시 .vault.key를 통해 암호화 키를 처리합니다.
- 제로 누출 아키텍처: 🛡️ PWA 모드에서 브라우저 액세스로부터 소스 코드 및 로그 차단; 엔트로피 분석을 위해 CLI 모드에서 민감한 입력이 마스킹됩니다.
- 편집된 내보내기: 기본적으로 비밀번호가 자동 편집되는 보안 우선 기록 내보내기
- 제로 들여쓰기 UI: 모든 모드에서 깔끔하고 전문적인 왼쪽 정렬 출력
- 스마트 리트스피크: 보다 자연스럽고 읽기 쉬운 비밀번호를 위한 확률적 치환
- 강력한 유효성 검사: 기본값과 재귀적 오류 처리가 포함된 대화형 프롬프트
- 방어적 PWA 프론트엔드: 🛡️ CDN 자산에 대한 내장 안전 검사로 초기화 충돌 방지.
- 전역 수정자:
--easy-read 및 모드
설치
# 저장소 복제
git clone https://github.com/krishnakanthb13/password_generator.git
cd password_generator
# 의존성 설치 (colorama, cryptography, pyperclip 등)
pip install -r requirements.txt
빠른 시작
# 20자 랜덤 비밀번호 생성
python main.py random -l 20
# 4단어 패스프레이즈 생성
python main.py phrase -w 4 --capitalize
# 리트스피크 패스프레이즈 생성
python main.py leet -w 3 -s _
# 엔트로피 분석과 함께 생성
python main.py --show-entropy random -l 16
# 대화형 모드 실행
python main.py --interactive
# 사전 설정 프로필 사용 (Strong)
python main.py --preset strong --show-entropy
사용 예제
랜덤 비밀번호
# 기본 16자 비밀번호
python main.py random
# 24자, 문자만
python main.py random -l 24 --no-symbols --no-digits
# 읽기 쉬운 (0/O, 1/l/I 제외)
python main.py --easy-read random -l 20
# 최소 요구 사항 포함
python main.py random -l 16 --min-upper 2 --min-digits 2 --min-symbols 1
# 균형 모드 (대부분 문자, 적은 기호)
python main.py random -l 24 --balanced
패스프레이즈
# 표준 4단어 패스프레이즈
python main.py phrase -w 4
# 대문자화 및 밑줄 구분자
python main.py phrase -w 5 -s _ --capitalize
# 교차 대소문자 (높은 엔트로피)
python main.py phrase -w 4 -s . --alternate
# 출력: aPpLe.bAnAnA.cHeRrY.dAtE
# 모두 대문자 및 하이픈 구분자 (높은 엔트로피)
python main.py phrase -w 4 -s . --uppercase
# 출력: APPLE-BANANA-CHERRY-DATE
# 리트스피크 버전 (스마트 50% 치환)
python main.py leet -w 4 -s -
# 출력: 4PPl3.8@N@[email protected]
# 테마 패스프레이즈 ('animals.txt' 사용)
python main.py phrase -w 4 --capitalize --wordlist data/wordlists/animals.txt
# 출력: Tiger-Falcon-Shark-Wolf
소프트웨어 키 (A x B)
# 5개 세그먼트, 각 5자
python main.py license --segments 5 --segment-length 5
# 4개 세그먼트, 각 8자
python main.py license --segments 4 --segment-length 8
개발자 토큰
# HS256용 JWT 시크릿
python main.py jwt --bits 256
# Base64 API 키
python main.py base64 -b 32 --url-safe
# UUID 토큰 (v4 랜덤)
python main.py uuid --upper
# UUID v7 (시간 기반, 정렬 가능)
python main.py uuid --ver 7
# 또는 단축 명령어
python main.py uuid --v7
# 짧은 UUID (Base58 인코딩, ~22자)
python main.py uuid --short
# 단축 명령어로 v7 UUID 생성
python main.py u --v7
# 10개의 짧은 v4 UUID 생성
python main.py uuid --v4 --short -n 10
# NATO 음성 변환
python main.py phonetic --text "PassForge"
# 출력: Papa-Alpha-Sierra-Sierra-Foxtrot-Oscar-Romeo-Golf-Echo
보안 및 로깅
# 기존 비밀번호 분석
python main.py analyze "p@ssword123"
# 기록에 로그
python main.py --log random -l 16
# 마지막 10개 기록 항목 보기 (기본)
python main.py history
# 모든 기록 항목 보기 (실시간 복호화)
python main.py history --all
# 편집된 비밀번호로 기록 보기
python main.py history --redact
# 기록 내보내기 (기본 편집됨)
python main.py history --export backup.json
# 기록 내보내기 (평문 - 주의 필요)
python main.py history --export secrets.csv --no-redact
# 스크립트용 JSON 출력
python main.py --json jwt --bits 256
명령어 참조
생성기별 옵션
랜덤 (random, r)
패스프레이즈 (phrase, p)
리트스피크 (leet, l)
PIN (pin)
| 플래그 | 기본값 | 설명 |
|---|
-l, --length | 6 | PIN 길이 (4-64) |
-n, --count | 1 | 생성할 개수 |
발음 가능 (pronounce, pr)
| 플래그 | 기본값 | 설명 |
|---|
-l, --length | 12 | 비밀번호 길이 (4-128) |
-n, --count | 1 | 생성할 개수 |
UUID (uuid)
Base64 (base64, b64)
| 플래그 | 기본값 | 설명 |
|---|
-b, --bytes | 32 | 랜덤 바이트 수 |
--url-safe | - | URL 안전 문자 사용 |
JWT 시크릿 (jwt)
| 플래그 | 기본값 | 설명 |
|---|
--bits | 256 | 비트 길이 (256, 384, 512) |
--hex | - | 16진수 문자열로 출력 |
WiFi 키 (wifi)
| 플래그 | 기본값 | 설명 |
|---|
-l, --length | 24 | 키 길이 (8-63, 기본: 24) |
--simple | - | 영숫자만 (기호 없음) |
라이선스 키 (license)
| 플래그 | 기본값 | 설명 |
|---|
--segments | 4 | 세그먼트 수 (2-64) |
--segment-length | 4 | 세그먼트당 문자 수 (2-32) |
복구 코드 (recovery)
OTP 시크릿 (otp)
| 플래그 | 기본값 | 설명 |
|---|
--digits | 6 | 코드 길이 (6 또는 8) |
--period | 30 |
패턴 (pattern)
| 플래그 | 기본값 | 설명 |
|---|
--grid | 3 | 그리드 크기 (예: 3x3) |
음성 (phonetic, ph)
| 플래그 | 기본값 | 설명 |
|---|
--text | - | NATO 알파벳으로 변환할 텍스트 |
-l, --length | 8 | 랜덤 시퀀스 길이 (4-64) |
기록 (history)
엔트로피 가이드
PassForge는 원시 문자 풀 크기, 섀넌 비트 및 무차별 대입 시간 추정치를 포함한 포괄적인 엔트로피 보고서를 제공합니다.
참고: 각 생성기 유형에 대한 자세한 설명은 LITERATURE.md를 참조하세요.
프로젝트 구조
password_generator/
├── main.py # 진입점
├── requirements.txt # 의존성
├── src/
│ ├── __init__.py
│ ├── cli.py # 인수 파서 및 배너
│ ├── command_handler.py # 명령어 라우팅
│ ├── interactive.py # 대화형 메뉴
│ ├── generators/ # 모든 비밀번호 생성기
│ │ ├── base.py # 추상 기본 클래스
│ │ ├── random_password.py # 랜덤 비밀번호 생성기
│ │ ├── passphrase.py # 패스프레이즈 생성기
│ │ ├── leetspeak.py # 리트스피크 생성기
│ │ ├── pin.py # PIN 생성기
│ │ ├── pronounceable.py # 발음 가능 비밀번호 생성기
│ │ ├── uuid_token.py # UUID 토큰 생성기
│ │ ├── base64_secret.py # Base64 시크릿 생성기
│ │ ├── jwt_secret.py # JWT 시크릿 생성기
│ │ ├── wifi_key.py # WiFi 키 생성기
│ │ ├── license_key.py # 라이선스 키 생성기
│ │ ├── recovery_codes.py # 복구 코드 생성기
│ │ ├── otp.py # OTP 생성기
│ │ ├── pattern.py # 패턴 생성기
│ │ └── phonetic.py # NATO 음성 생성기
│ ├── security/
│ │ ├── entropy.py # 엔트로피 계산기
│ │ ├── strength_checker.py # zxcvbn 통합
│ │ └── vault.py # 안전한 기록 암호화
│ ├── output/
│ │ ├── formatter.py # 색상 코드 출력
│ │ ├── logger.py # 기록 로깅
│ │ ├── clipboard.py # 안전한 클립보드 처리
│ │ └── qrcode_gen.py # OTP용 QR 코드 생성
│ ├── config/
│ │ ├── loader.py # YAML/JSON 설정 로더
│ │ └── presets.py # 사전 정의된 보안 프로필
├── data/
│ └── wordlists/ # 테마 단어 목록 (animals.txt, biology.txt 등)
└── tests/
테스트
# 모든 테스트 실행
python -m pytest tests/ -v
# 특정 테스트 클래스 실행
python -m pytest tests/test_generators.py::TestRandomPasswordGenerator -v
# 커버리지와 함께 실행
python -m pytest tests/ --cov=src --cov-report=html
53개의 단위 테스트가 다음을 포함합니다:
- 15개의 특화된 생성기 모드
- 엔트로피 및 zxcvbn 강도 계산기
- 클립보드 자동 지우기 및 안전한 저장소
- QR 코드 ASCII 생성 로직
- 설정 로딩 및 사전 설정
설정
PassForge는 YAML 또는 JSON 형식의 설정 파일을 지원합니다.
설정 파일 위치 (순서대로 검색):
./passforge.yaml 또는 ./passforge.json
./.passforge.yaml 또는 ./.passforge.json
~/.passforge/config.yaml 또는 ~/.passforge/config.json
설정 예시
{
"random": {
"length": 20,
"easy_read": true
},
"passphrase": {
"words": 5,
"capitalize": true
},
"output": {
"show_entropy": true
}
}
사용 가능한 모든 옵션은 passforge.example.json을 참조하세요.
독립 실행형 실행 파일 빌드
PassForge는 PyInstaller를 사용하여 단일 독립 실행형 실행 파일로 컴파일할 수 있습니다.
Windows
# 빌드 스크립트 사용
passforge_build.bat
# 또는 수동
pip install pyinstaller
pyinstaller --onefile --name passforge --console main.py
Linux/macOS
# 빌드 스크립트 사용
chmod +x passforge_build.sh
./passforge_build.sh
# 또는 수동
pip install pyinstaller
pyinstaller --onefile --name passforge --console main.py
실행 파일은 dist/ 폴더에 생성됩니다 (~7MB, 의존성 없음).
🌐 PassForge Web (PWA 애드온)
PassForge는 이제 현대적이고 반응형 웹 인터페이스(PWA)를 포함하여, CLI 버전과 완전한 동등성을 유지하면서 시각적으로 비밀번호를 생성하고 관리할 수 있는 방법을 제공합니다.
주요 기능
- 사이드바 인터페이스: 모든 생성기 유형 간 쉬운 탐색.
- 시각적 슬라이더: 대화형 슬라이더로 길이 및 단어 수 조정.
- QR 지원: 비밀번호 또는 OTP 시크릿 공유를 위한 즉시 QR 코드 생성.
- 어두운/밝은 모드: 시스템 인식 테마 전환을 통한 프리미엄 미학.
- 설치 가능: Windows, Linux 및 모바일에서 PWA 설치 지원.
- 공유 기록: CLI와 동일한 암호화된 로그 파일 사용.
PWA 실행
웹 인터페이스를 시작하려면 사용 중인 OS에 맞는 런처 스크립트를 실행하세요:
- Windows:
passforge_pwa.bat
- Linux/macOS:
passforge_pwa.sh
[!IMPORTANT]
보안 강화 (v34+): PWA는 이제 SecureStaticFiles 핸들러를 사용하여 브라우저가 Python 소스 파일, 로그 및 암호화 키에 접근하는 것을 명시적으로 차단합니다. 기록 접근은 내부 API 키 핸드셰이크를 통해 보호됩니다. 프론트엔드 로직에는 외부 CDN 자산에 대한 방어적 래퍼도 포함되어, CDN이 차단된 경우에도 기능이 유지됩니다.
[!TIP]
빌드 가용성: PWA 파일은 소스 코드 및 ZIP/Tarball 배포판에 포함됩니다. PWA는 단일 파일 .exe 바이너리에 포함되어 있지 않습니다.
런처는 필요한 의존성(fastapi, uvicorn)을 자동으로 설치하고, 로컬 서버를 http://127.0.0.1:8093에서 시작하며 브라우저를 엽니다.
라이선스
GPL v3 라이선스 - 자세한 내용은 LICENSE를 참조하세요.
기여
기여는 환영합니다! PR을 제출하기 전에 기여 가이드라인을 읽어주세요.