
PGP 암호화, 복호화 및 서명을 위한 오픈소스 브라우저 확장 프로그램. WebAuthn PRF 잠금 해제, Argon2id 비밀번호 보호 및 메모리 제로화 기능을 갖춘 Rust/WASM 엔진.
PGP 암호화, 복호화 및 서명을 위한 오픈소스 브라우저 확장 프로그램.
Rust/WebAssembly로 제작되었습니다. 개인 키는 꼭 필요한 경우가 아니면 JS 힙에 닿지 않습니다.
오픈소스이며 투명합니다. 대부분의 PGP 브라우저 확장 프로그램은 클로즈드 소스입니다. 비밀을 블랙박스에 맡겨서는 안 됩니다.
암호화 연산은 WASM에서 실행되며, JavaScript가 아닙니다. 모든 PGP 연산은 Rust/Sequoia-PGP WebAssembly 샌드박스에서 실행됩니다. JS는 키에 대한 불투명한 정수 핸들만 보유하며, 실제 바이트는 WASM 선형 메모리에 존재하다가 해제되면 제로화됩니다. 개인 키는 생성 및 가져오기 중에만 잠시 JS를 통과한 후 암호화되어 저장됩니다.
패스키로 잠금 해제. WebAuthn PRF로 키를 보호하세요. 비밀번호 대신 Touch ID, Face ID, Windows Hello 또는 YubiKey로 잠금 해제할 수 있습니다. PRF 출력은 HKDF-SHA256을 통해 저장된 비밀과 결합되며, 전체 잠금 해제 흐름은 WASM에서 실행됩니다.
비밀번호는 Argon2id. 64 MB 메모리, 3회 반복으로 GPU 무차별 대입에 저항합니다. KDF, 복호화 및 키 저장이 모두 WASM에서 이루어집니다. 비밀번호 바이트는 사용 직후 양쪽에서 제로화됩니다.
원자적 복호화 + 검증. 평문과 서명 결과는 단일 압축 응답으로 함께 반환됩니다. 잘못된 서명 = 평문 미반환. TOCTOU 공격 창이 없습니다.
모든 곳에서 제로화. 모든 저장된 키와 중간체에 zeroize 크레이트 사용(Rust). 비밀번호, PRF 출력 및 파생 키에 Uint8Array.fill(0) 사용(JS). WASM 메모리는 GC되지 않으므로 제로화가 결정적입니다.
키별 AAD. 각 개인 키는 해당 지문에 바인딩된 추가 인증 데이터(AAD)와 함께 AES-256-GCM으로 암호화됩니다. 키 슬롯 간 블롭 교체는 실패합니다.
pnpm install
pnpm dev # 핫 리로드가 있는 개발 서버
pnpm test # 단위 테스트 (vitest); Rust 엔진 테스트: apps/pgp/gpg-wasm에서 cargo test
pnpm build # 프로덕션 빌드 (WASM 자동 빌드)
pnpm zip # Chrome 웹 스토어 / Firefox 애드온용 패키징
WASM 모듈은 소스에서 빌드되어야 합니다. 수동으로 다시 빌드하려면:
cd apps/pgp && pnpm build:wasm
apps/pgp/ 확장 프로그램 소스
components/ React UI
entrypoints/ background + sidepanel
hooks/ keyring, sessions, contacts
lib/pgp/ WASM 래퍼 + 연산
lib/protection/ WebAuthn PRF, Argon2id, AES-256-GCM
lib/storage/ chrome.storage with mutex
gpg-wasm/ Rust/WASM 엔진 (sequoia-openpgp)
packages/ui/ shadcn/ui 컴포넌트
tooling/ eslint, prettier, tailwind, tsconfig
상당한 AI 지원(Claude)을 받아 구축되었습니다. UI, React 배관, 저장소 및 확장 프로그램 연결은 주로 AI가 생성했습니다.
암호화 구현(Rust/WASM 엔진, 키 보호, WebAuthn PRF, Argon2id 구성)은 인간이 설계하고 검토했습니다. 분위기 기반 암호화는 신뢰하지 않습니다.
MIT
| 계층 | 메커니즘 |
|---|
| 암호화 엔진 | WASM의 Sequoia-PGP(생성/가져오기 중에만 JS에 있는 키) |
| 키 잠금 해제 | WebAuthn PRF(패스키) 또는 Argon2id 64 MB(비밀번호) |
| 키 저장 | 키별 AAD를 사용한 AES-256-GCM |
| 메모리 | zeroize 크레이트(Rust) + 수동 제로화(JS) |
| 서명 | 원자적 복호화+검증(TOCTOU 없음) |
| 세션 | 비활성 시, 패널 닫힘 시 또는 작업별 자동 잠금 |
| 무차별 대입 | 실패한 잠금 해제에 대한 지수 백오프 |
| 범위 | 콘텐츠 스크립트 없음 - 확장 프로그램 샌드박스만 |