
Open-Source-Browsererweiterung für PGP-Verschlüsselung, -Entschlüsselung und -Signierung. Rust/WASM-Engine mit WebAuthn-PRF-Entsperrung, Argon2id-Passwortschutz und gelöschtem Arbeitsspeicher.
Open-Source-Browsererweiterung für PGP-Verschlüsselung, -Entschlüsselung und -Signierung.
Entwickelt mit Rust/WebAssembly. Private Schlüssel berühren den JS-Heap nur, wenn es sein muss.
Open Source und transparent. Die meisten PGP-Browsererweiterungen sind geschlossen. Deine Geheimnisse sollte man keiner Blackbox anvertrauen.
Krypto läuft in WASM, nicht in JavaScript. Alle PGP-Operationen laufen in einer Rust/Sequoia-PGP-WebAssembly-Sandbox. JS hält nur einen undurchsichtigen Integer-Handle zu deinem Schlüssel – die eigentlichen Bytes leben im linearen WASM-Speicher und werden beim Löschen genullt. Private Schlüssel durchlaufen JS kurz während der Generierung und des Imports, bevor sie verschlüsselt und gespeichert werden.
Passkey-Entsperrung. Schlüssel mit WebAuthn PRF schützen – entsperren mit Touch ID, Face ID, Windows Hello oder einem YubiKey statt einem Passwort. Der PRF-Output wird mit einem gespeicherten Geheimnis via HKDF-SHA256 kombiniert, der gesamte Entsperrungsablauf läuft in WASM.
Argon2id für Passwörter. 64 MB Speicher, 3 Iterationen – GPU-Brute-Force-resistent. KDF, Entschlüsselung und Schlüsselspeicherung erfolgen in WASM. Passwort-Bytes werden auf beiden Seiten unmittelbar nach der Verwendung genullt.
Atomares Entschlüsseln + Verifizieren. Klartext und Signaturergebnis werden zusammen in einer einzigen gepackten Antwort zurückgegeben. Schlechte Signatur = kein Klartext. Kein TOCTOU-Fenster.
Nullifikation überall. zeroize-Crate für alle gespeicherten Schlüssel und Zwischenergebnisse (Rust). Uint8Array.fill(0) für Passwörter, PRF-Outputs und abgeleitete Schlüssel (JS). WASM-Speicher wird nicht vom GC verwaltet, daher ist Nullifikation deterministisch.
Pro-Schlüssel-AAD. Jeder private Schlüssel wird mit AES-256-GCM unter Verwendung eines an seinen Fingerprint gebundenen Additional Authenticated Data verschlüsselt. Das Austauschen von Blobs zwischen Schlüsselslots schlägt fehl.
.crx) für die Verified CRX Uploads des Web Stores (optional; standardmäßig deaktiviert)pnpm install
pnpm dev # dev server with hot reload
pnpm test # unit tests (vitest); Rust engine tests: cargo test in apps/pgp/gpg-wasm
pnpm build # production build (builds WASM automatically)
pnpm zip # package for Chrome Web Store / Firefox Add-ons
Das WASM-Modul muss aus dem Quellcode erstellt werden. Zur manuellen Neuerstellung:
cd apps/pgp && pnpm build:wasm
apps/pgp/ Erweiterungsquellcode
components/ React-Benutzeroberfläche
entrypoints/ Hintergrund + Seitenpanel
hooks/ Schlüsselbund, Sitzungen, Kontakte
lib/pgp/ WASM-Wrapper + Operationen
lib/protection/ WebAuthn PRF, Argon2id, AES-256-GCM
lib/storage/ chrome.storage mit Mutex
gpg-wasm/ Rust/WASM-Engine (sequoia-openpgp)
packages/ui/ shadcn/ui-Komponenten
tooling/ eslint, prettier, tailwind, tsconfig
Entwickelt mit umfassender KI-Unterstützung (Claude). UI, React-Infrastruktur, Speicher und Erweiterungsverkabelung wurden größtenteils KI-generiert.
Die kryptografischen Implementierungen – Rust/WASM-Engine, Schlüsselschutz, WebAuthn PRF, Argon2id-Konfiguration – waren menschlich entworfen und überprüft. Wir vertrauen keinem Bauchgefühl-basierten Krypto.
MIT
| Schicht | Mechanismus |
|---|
| Krypto-Engine | Sequoia-PGP in WASM (Schlüssel in JS nur während Generierung/Import) |
| Schlüsselentsperrung | WebAuthn PRF (Passkeys) oder Argon2id 64 MB (Passwörter) |
| Schlüsselspeicherung | AES-256-GCM mit pro-Schlüssel-AAD |
| Speicher | zeroize-Crate (Rust) + manuelles Nullieren (JS) |
| Signaturen | Atomares Entschlüsseln+Verifizieren (kein TOCTOU) |
| Sitzungen | Auto-Sperre bei Inaktivität, Panel-Schließen oder pro Operation |
| Brute-Force | Exponentielles Backoff bei fehlgeschlagenen Entsperrungen |
| Umfang | Keine Content-Scripts – nur Erweiterungs-Sandbox |