
Расширение для браузера с открытым исходным кодом для шифрования, дешифрования и подписания PGP. Движок Rust/WASM с разблокировкой WebAuthn PRF, защитой паролем Argon2id и обнуляемой памятью.
Расширение для браузера с открытым исходным кодом для шифрования, дешифрования и подписи PGP.
Создано на Rust/WebAssembly. Закрытые ключи не попадают в кучу JS, если без этого нельзя обойтись.
Открытый исходный код и прозрачность. Большинство PGP-расширений для браузера являются закрытыми. Не стоит доверять свои секреты чёрному ящику.
Криптография выполняется в WASM, а не в JavaScript. Все операции PGP выполняются в песочнице Rust/Sequoia-PGP WebAssembly. JS держит лишь непрозрачный целочисленный дескриптор вашего ключа — фактические байты находятся в линейной памяти WASM и обнуляются при освобождении. Закрытые ключи кратковременно проходят через JS при создании и импорте, прежде чем будут зашифрованы и сохранены.
Разблокировка с помощью Passkey. Защищайте ключи с помощью WebAuthn PRF — разблокируйте с помощью Touch ID, Face ID, Windows Hello или YubiKey вместо пароля. Выходные данные PRF объединяются с сохранённым секретом через HKDF-SHA256, а весь процесс разблокировки выполняется в WASM.
Argon2id для паролей. 64 МБ памяти, 3 итерации — устойчивость к GPU-перебору. KDF, дешифрование и хранение ключей происходят в WASM. Байты пароля обнуляются с обеих сторон сразу после использования.
Атомарное дешифрование + проверка подписи. Открытый текст и результат подписи возвращаются вместе в одном упакованном ответе. Плохая подпись = открытый текст не возвращается. Нет окна TOCTOU.
Обнуление везде. Крейт zeroize для всех сохранённых ключей и промежуточных данных (Rust). Uint8Array.fill(0) для паролей, выходных данных PRF и производных ключей (JS). Память WASM не подвергается сборке мусора, поэтому обнуление детерминировано.
Per-key AAD. Каждый закрытый ключ шифруется с помощью AES-256-GCM, используя дополнительные аутентифицированные данные (AAD), привязанные к его отпечатку. Замена блоков между слотами ключей не сработает.
.crx) для Verified CRX Uploads в Web Store (опционально; отключено по умолчанию)pnpm install
pnpm dev # сервер разработки с горячей перезагрузкой
pnpm test # модульные тесты (vitest); тесты Rust-движка: cargo test в apps/pgp/gpg-wasm
pnpm build # production-сборка (автоматически собирает WASM)
pnpm zip # упаковка для Chrome Web Store / Firefox Add-ons
Модуль WASM необходимо собрать из исходников. Для ручной пересборки:
cd apps/pgp && pnpm build:wasm
apps/pgp/ Исходники расширения
components/ UI на React
entrypoints/ background + sidepanel
hooks/ keyring, sessions, contacts
lib/pgp/ Обёртка WASM + операции
lib/protection/ WebAuthn PRF, Argon2id, AES-256-GCM
lib/storage/ chrome.storage с мьютексом
gpg-wasm/ Движок Rust/WASM (sequoia-openpgp)
packages/ui/ Компоненты shadcn/ui
tooling/ eslint, prettier, tailwind, tsconfig
Создано со значительной помощью ИИ (Claude). UI, React-проводка, хранилище и обвязка расширения в значительной степени сгенерированы ИИ.
Криптографические реализации — движок Rust/WASM, защита ключей, WebAuthn PRF, конфигурация Argon2id — были спроектированы и проверены человеком. Мы не доверяем криптографии на основе ощущений.
MIT
| Уровень | Механизм |
|---|
| Криптодвижок | Sequoia-PGP в WASM (ключи в JS только при создании/импорте) |
| Разблокировка ключа | WebAuthn PRF (passkeys) или Argon2id 64 МБ (пароли) |
| Хранение ключей | AES-256-GCM с per-key AAD |
| Память | Крейт zeroize (Rust) + ручное обнуление (JS) |
| Подписи | Атомарное дешифрование+проверка (нет TOCTOU) |
| Сеансы | Автоблокировка при бездействии, закрытии панели или после каждой операции |
| Перебор | Экспоненциальная задержка при неудачных разблокировках |
| Область действия | Нет content-скриптов — только песочница расширения |