
Extensão de navegador de código aberto para criptografia, descriptografia e assinatura PGP. Motor Rust/WASM com desbloqueio WebAuthn PRF, proteção por senha Argon2id e memória zerada.
Extensão de navegador de código aberto para criptografia, descriptografia e assinatura PGP.
Construída com Rust/WebAssembly. As chaves privadas nunca tocam o heap do JavaScript a menos que seja necessário.
Código aberto e transparente. A maioria das extensões PGP para navegador é de código fechado. Você não deveria confiar seus segredos a uma caixa-preta.
A criptografia roda em WASM, não em JavaScript. Todas as operações PGP executam em uma sandbox WebAssembly Rust/Sequoia-PGP. O JavaScript só possui um identificador inteiro opaco para sua chave – os bytes reais estão na memória linear do WASM e são zerados ao serem liberados. As chaves privadas passam brevemente pelo JavaScript durante a geração e importação antes de serem criptografadas e armazenadas.
Desbloqueio por chave de acesso. Proteja chaves com WebAuthn PRF – desbloqueie com Touch ID, Face ID, Windows Hello ou uma YubiKey em vez de senha. A saída do PRF é combinada com um segredo armazenado via HKDF-SHA256, e todo o fluxo de desbloqueio roda em WASM.
Argon2id para senhas. 64 MB de memória, 3 iterações – resistente a força bruta com GPU. A KDF, descriptografia e armazenamento de chave ocorrem em WASM. Os bytes da senha são zerados em ambos os lados imediatamente após o uso.
Descriptografia + verificação atômica. O texto claro e o resultado da assinatura são retornados juntos em uma única resposta compactada. Assinatura inválida = nenhum texto claro é retornado. Sem janela TOCTOU.
Zerificação em toda parte. Crate zeroize em todas as chaves armazenadas e intermediários (Rust). Uint8Array.fill(0) em senhas, saídas PRF e chaves derivadas (JavaScript). A memória WASM não é coletada pelo GC, então a zerificação é determinística.
AAD por chave. Cada chave privada é criptografada com AES-256-GCM usando Dados Autenticados Adicionais vinculados à sua impressão digital. Trocar blobs entre slots de chave falha.
.crx) para o Verified CRX Uploads da Web Store (opcional; desativado por padrão)pnpm install
pnpm dev # servidor de desenvolvimento com hot reload
pnpm test # testes unitários (vitest); testes do motor Rust: cargo test em apps/pgp/gpg-wasm
pnpm build # build de produção (compila WASM automaticamente)
pnpm zip # empacotar para Chrome Web Store / Firefox Add-ons
O módulo WASM deve ser compilado a partir do código-fonte. Para recompilar manualmente:
cd apps/pgp && pnpm build:wasm
apps/pgp/ Código-fonte da extensão
components/ Interface React
entrypoints/ background + sidepanel
hooks/ keyring, sessões, contatos
lib/pgp/ Wrapper WASM + operações
lib/protection/ WebAuthn PRF, Argon2id, AES-256-GCM
lib/storage/ chrome.storage com mutex
gpg-wasm/ Motor Rust/WASM (sequoia-openpgp)
packages/ui/ Componentes shadcn/ui
tooling/ eslint, prettier, tailwind, tsconfig
Construído com assistência significativa de IA (Claude). Interface, encanamento React, armazenamento e fiação da extensão foram amplamente gerados por IA.
As implementações criptográficas – motor Rust/WASM, proteção de chave, WebAuthn PRF, configuração Argon2id – foram projetadas e revisadas por humanos. Não confiamos em criptografia baseada em "vibes".
MIT
| Camada | Mecanismo |
|---|
| Motor de criptografia | Sequoia-PGP em WASM (chaves no JavaScript apenas durante geração/importação) |
| Desbloqueio de chave | WebAuthn PRF (chaves de acesso) ou Argon2id 64 MB (senhas) |
| Armazenamento de chave | AES-256-GCM com AAD por chave |
| Memória | Crate zeroize (Rust) + zerificação manual (JavaScript) |
| Assinaturas | Descriptografia+verificação atômica (sem TOCTOU) |
| Sessões | Bloqueio automático por inatividade, fechamento do painel ou por operação |
| Força bruta | Backoff exponencial em desbloqueios falhos |
| Escopo | Sem scripts de conteúdo – apenas sandbox da extensão |