
Estensione per browser open-source per cifratura PGP, decifratura e firma. Motore Rust/WASM con sblocco WebAuthn PRF, protezione tramite password Argon2id e memoria azzerata.
Estensione open-source per il browser per crittografia PGP, decifratura e firma.
Costruita con Rust/WebAssembly. Le chiavi private non toccano mai l'heap JS a meno che non sia necessario.
Open source e trasparente. La maggior parte delle estensioni browser PGP sono closed source. Non dovresti fidare di una scatola nera con i tuoi segreti.
La crittografia viene eseguita in WASM, non in JavaScript. Tutte le operazioni PGP vengono eseguite in un sandbox WebAssembly Rust/Sequoia-PGP. JS contiene solo un handle intero opaco per la tua chiave: i byte effettivi risiedono nella memoria lineare di WASM e vengono azzerati al rilascio. Le chiavi private passano brevemente attraverso JS durante la generazione e l'importazione prima di essere crittografate e archiviate.
Sblocco con passkey. Proteggi le chiavi con WebAuthn PRF - sblocca con Touch ID, Face ID, Windows Hello o un YubiKey invece di una password. L'output PRF viene combinato con un segreto memorizzato tramite HKDF-SHA256 e l'intero flusso di sblocco viene eseguito in WASM.
Argon2id per le password. 64 MB di memoria, 3 iterazioni - resistente a brute-force GPU. Il KDF, la decifratura e l'archiviazione delle chiavi avvengono tutte in WASM. I byte della password vengono azzerati su entrambi i lati immediatamente dopo l'uso.
Decifratura + verifica atomiche. Il testo in chiaro e il risultato della firma vengono restituiti insieme in una singola risposta impacchettata. Firma non valida = nessun testo in chiaro restituito. Nessuna finestra TOCTOU.
Zeroizzazione ovunque. Crate zeroize su tutte le chiavi archiviate e intermedi (Rust). Uint8Array.fill(0) su password, output PRF e chiavi derivate (JS). La memoria WASM non è soggetta a GC, quindi la zeroizzazione è deterministica.
AAD per chiave. Ogni chiave privata viene crittografata con AES-256-GCM utilizzando Dati Autenticati Aggiuntivi legati alla sua impronta digitale. Lo scambio di blob tra slot di chiave fallisce.
.crx) per i Verified CRX Uploads del Web Store (opzionale; disattivato per impostazione predefinita)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
Il modulo WASM deve essere compilato dal sorgente. Per ricompilare manualmente:
cd apps/pgp && pnpm build:wasm
apps/pgp/ Sorgente dell'estensione
components/ UI React
entrypoints/ background + sidepanel
hooks/ keyring, sessioni, contatti
lib/pgp/ Wrapper WASM + operazioni
lib/protection/ WebAuthn PRF, Argon2id, AES-256-GCM
lib/storage/ chrome.storage con mutex
gpg-wasm/ Motore Rust/WASM (sequoia-openpgp)
packages/ui/ Componenti shadcn/ui
tooling/ eslint, prettier, tailwind, tsconfig
Costruito con un significativo supporto AI (Claude). UI, componentistica React, archiviazione e collegamenti dell'estensione sono stati in gran parte generati dall'AI.
Le implementazioni crittografiche - motore Rust/WASM, protezione chiave, WebAuthn PRF, configurazione Argon2id - sono state progettate e revisionate da umani. Non ci fidiamo della crittografia basata su sensazioni.
MIT
| Layer | Meccanismo |
|---|
| Motore crittografico | Sequoia-PGP in WASM (chiavi in JS solo durante generazione/importazione) |
| Sblocco chiave | WebAuthn PRF (passkey) o Argon2id 64 MB (password) |
| Archiviazione chiave | AES-256-GCM con AAD per chiave |
| Memoria | Crate zeroize (Rust) + zeroizzazione manuale (JS) |
| Firme | Decifratura+verifica atomiche (nessun TOCTOU) |
| Sessioni | Blocco automatico per inattività, chiusura pannello o per operazione |
| Brute-force | Backoff esponenziale su sblocchi falliti |
| Ambito | Nessuno script di contenuto - solo sandbox dell'estensione |