프로젝트 소개
# PGPony Desktop
**macOS, Linux, Windows**용 OpenPGP — [PGPony](https://pgpony.app) 제품군의 데스크톱 버전입니다.
메시지와 파일을 암호화, 복호화, 서명, 검증하고, 키링을 관리하며, USB를 통해 하드웨어 보안 키를 사용할 수 있습니다 — 모두 기기 내에서 처리됩니다. 휴대폰 버전과 마찬가지로 계정, 광고, 분석, 추적이 없습니다.
## 재작성이 아님
이 앱은 PGPony Android 앱이 탑재한 **바로 그** OpenPGP 엔진을 컴파일합니다 — 패킷 처리, v4 + v6 (RFC 9580) 키, 포스트 양자 복합 계층(두 가지 와이어 포맷 모두), OpenPGP 스마트카드 프로토콜 스택, MIME — 을 PGPonyAndroid 저장소에서 동일한 Bouncy Castle 버전으로 [`vendor/`](vendor/) 아래에 그대로 벤더링했습니다. 하나의 검증된 구현은 모든 기기에서 상호운용성을 보장하고, 어긋날 수 있는 코드를 훨씬 줄여줍니다. [`src/`](src/) 아래의 `com.pgpony.desktop`만 데스크톱 전용이며(Compose UI, CLI, 파일 기반 저장소), [`vendor/README.md`](vendor/README.md)에 정리된 세 개의 작은 심(shim)이 추가됩니다.
## 빌드 및 실행
JDK 17 이상이 필요합니다.
```sh
./gradlew run # GUI 실행
./gradlew run --args="selftest" # 이 JVM에서 엔진이 실행되는지 검증 (키 생성 + 왕복)
./gradlew run --args="list-keys" # pgpony CLI — 앱의 키링을 공유
./gradlew test # 단위 테스트 스위트
```
동일한 바이너리가 GUI이자 `pgpony` CLI입니다: 인수 없이 실행하거나(또는 파일 인수) 앱이 열리고, 동사(`encrypt`, `decrypt`, `sign`, `verify`, `import`, `export`, `list-keys`, `gen-key`, `card-info`)를 지정하면 명령줄이 실행됩니다. 옵션 없이 `pgpony <동사>`를 실행하면 사용법이 출력됩니다.
**Windows**에서는 명령줄이 두 번째 실행 파일인 `pgpony-cli.exe`로, GUI 옆에 설치됩니다. Windows는 터미널에 출력하려면 콘솔 서브시스템 바이너리가 필요하며, 파일 시스템이 대소문자를 구분하지 않고 이미 `PGPony.exe`가 있으므로 `pgpony.exe`로 부를 수 없습니다.
## 네이티브 설치 프로그램
```sh
./gradlew packageDmg # macOS → build/compose/binaries/main/dmg/
./gradlew packageDeb # Linux → build/compose/binaries/main/deb/
./gradlew packageMsi # Windows → build/compose/binaries/main/msi/ (WiX 3.x 필요)
```
jpackage는 실행 중인 OS용 설치 프로그램만 빌드합니다. Java 런타임이 번들로 포함되므로 사용자는 별도의 JDK가 필요하지 않습니다. 릴리스된 설치 프로그램은 서명되며, macOS 빌드는 공증(notarization)됩니다. 전체 절차는 [`RELEASING.md`](RELEASING.md)에 있습니다.
## 상태
**1.0.0 — 릴리스됨.** 서명 및 공증된 `.dmg`(macOS, arm64), `.deb`(Linux, amd64), `.msi`(Windows, x64)가 각각 분리된 PGP 서명과 서명된 `SHA256SUMS`와 함께 제공됩니다. 다운로드 및 체크섬: [pgpony.app/desktop](https://pgpony.app/desktop).
아래의 모든 항목은 완료되었으며 테스트 스위트로 검증됩니다:
| | |
| --- | --- |
| **키링** | 번들 SQLite 위의 Android 앱 `PGPDatabase` 스키마. 두 가지 PQC 복합을 포함한 키 생성, 하위 키 기능, 신뢰/메모/만료/폐기, 가져오기 시 병합, 검색 및 정렬. |
| **암호화 표면** | 텍스트와 파일에 걸친 암호화, 복호화, 서명, 검증, 스트리밍 API 사용, 드래그 앤 드롭, 분리 서명, 절대 덮어쓰지 않는 출력. 양방향 PGP/MIME, `.eml` 작성, 첨부 파일이 있는 구조화된 복호화. |
| **포스트 양자** | IETF(v6) 및 GnuPG/LibrePGP 와이어 포맷 모두의 ML-KEM 복합, gpg 및 sq와 교차 검증. |
| **백업** | 강제 재입력 복구 코드가 있는 `.pgpony` 내보내기 및 복원, 다섯 가지 결과 병합 보고서, OpenKeychain 복원. |
| **키서버** | 출처 표시가 있는 WKD → 디렉터리 → Hagrid 조회, 서버별 VKS/HKP 게시, 5단계 새로 고침 파이프라인, 정렬된 디렉터리 관리, onion 미러가 있는 Tor/SOCKS. |
| **하드웨어 키** | USB PC/SC를 통한 벤더링된 OpenPGP 카드 스택 — 읽기/페어링, 카드 내 키 생성, PW1/PW3 수명 주기, 복호화, 서명 및 서명 후 암호화, TTL이 있는 PIN 캐시. |
| **비밀번호 저장소** | `java.nio`를 통한 읽기 전용 `pass` — 가장 가까운 것 우선 `.gpg-id`, 복호화 없이 탐색 및 검색, 자동 지우기 클립보드, 실시간 RFC 6238 TOTP. |
| **데스크톱 통합** | Android의 `IntentHandler`를 미러링하는 파일 열기 라우팅, 단일 인스턴스 전달, 네이티브 메뉴 바, 시스템 트레이, 만료 알림, QR 렌더링 및 가져오기, OS 파일 연결. |
| **CLI** | 앱의 키링을 공유하는 `pgpony`: encrypt/decrypt/sign/verify/import/export/list-keys/gen-key, stdin·stdout 스트리밍, env/fd/프롬프트를 통한 암호, 안정적인 종료 코드. |
| **현지화** | 6개 언어 — en/de/es/fr/ja/pt-BR — 두 개의 문자열 계층 위에서 재시작 없이 전환 가능. |
코드에서 명확하지 않은 결정의 근거를 포함한 단계별 기록은 [`docs/phases/`](docs/phases/)에 있습니다. 공식 계획은 PGPonyAndroid 저장소의 `PLANNING_DESKTOP_1_0_0.md`입니다. 릴리스는 [`RELEASING.md`](RELEASING.md)에 따라 진행됩니다.
수동 검증 대기 중: 세 OS 전반의 YubiKey 5 / Token2 매트릭스, 백업 교차 복원 삼각형(휴대폰 ↔ 데스크톱 ↔ iOS), Linux 및 Windows의 클린 머신 설치.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.