
Centralized, TPM 2.0 hardware-backed cryptographic identity enclave and multi-protocol bridge for Linux (FIDO2/CTAP2 WebAuthn Passkeys, OpenSSH Agent, GnuPG LibAssuan, age-plugin, encrypted config store).
.. image:: https://gitlab.com/renich/gpasskey/-/raw/master/assets/logo.svg :width: 140px :align: center :alt: gpasskey logo
The centralized cryptographic identity enclave for Linux.
.. image:: https://gitlab.com/renich/gpasskey/badges/master/pipeline.svg :target: https://gitlab.com/renich/gpasskey/-/commits/master :alt: pipeline status .. image:: https://img.shields.io/gitlab/v/release/renich/gpasskey?logo=gitlab&label=release :target: https://gitlab.com/renich/gpasskey/-/releases :alt: GitLab Release .. image:: https://img.shields.io/badge/Go-1.26+-00ADD8?style=flat&logo=go :target: https://golang.org/ :alt: Go Version .. image:: https://img.shields.io/badge/License-GPLv3-blue.svg?logo=gnu :target: https://www.gnu.org/licenses/gpl-3.0 :alt: License .. image:: https://img.shields.io/badge/FIDO2-CTAP2%20Virtual%20HID-4285F4?logo=fido :target: docs/technical/specs/ctap2-virtual-hid.rst :alt: FIDO2 CTAP2 .. image:: https://img.shields.io/badge/Hardware-TPM%202.0%20Sealed-4CAF50?logo=security :target: docs/technical/specs/tpm-binding.rst :alt: TPM 2.0 .. image:: https://img.shields.io/badge/Bridges-SSH%20%7C%20GPG%20%7C%20Age%20%7C%20D--Bus-8b5cf6 :target: docs/technical/specs/protocol-bridges.rst :alt: Multi-Protocol Bridges .. image:: https://img.shields.io/liberapay/receives/Renich.svg?logo=liberapay :target: https://liberapay.com/Renich/donate :alt: Liberapay .. image:: https://liberapay.com/assets/widgets/donate.svg :target: https://liberapay.com/Renich/donate :alt: Donate using Liberapay
.. caution::
PRE-ALPHA SOFTWARE — USE AT YOUR OWN RISK!
Despite the release numbering, gpasskey is currently experimental pre-alpha software undergoing rapid architectural development. Cryptographic schemas, vault formats, and protocol bridges may change without backwards compatibility.
gpasskey provides a hardware-backed security enclave that stores private keys in an encrypted vault.
It acts as a multi-protocol bridge, supporting SSH Agent, the age encryption plugin protocol, and GnuPG commit signing emulation.
/dev/uhid for native browser (Firefox, Chrome, Chromium) and OS Passkey authentication.age (v1) file encryption.mlock).mmap/mlock and a "Wrap and Clear" strategy to prevent key material from leaking to swap or GC heap.gpasskey-cli) for vault administration and encrypted secret management.gpasskey supports hardware-backed security via TPM 2.0. This ensures that your master key never leaves the TPM unencrypted and is bound to the system's boot state.
Requirements
* A TPM 2.0 compatible device (or ``swtpm`` for development).
* ``tpm2-tools`` installed on the system.
Initialization
The TPM storage is initialized automatically when you create a new identity. To verify TPM status:
.. code-block:: bash
gpasskey-cli status
Usage
Once initialized, the TPM is used transparently by the daemon. All sensitive data is sealed against **PCR 0** (Core System Firmware) and **PCR 7** (Secure Boot State). Any modification to the firmware or Secure Boot configuration will prevent the vault from being unlocked, protecting against offline attacks and unauthorized OS tampering.
Quick Start
-----------
Build and install for your user account (recommended, non-root)::
make clean && make all
make install-user # Installs to ~/.local/bin, ~/.config/systemd/user, ~/.local/share/dbus-1
Or install system-wide (requires root)::
sudo make install # Installs to /usr/local/bin
Enable & start socket activation::
systemctl --user enable --now gpasskey-ssh.socket gpasskey-gpg.socket
Initialize your vault and verify status::
gpasskey-cli status
# Identities are enrolled automatically on first use by clients
# (WebAuthn passkeys, SSH, age, GPG) or via the portal API.
WebAuthn Passkeys in Browser::
# Open Firefox or Chrome, go to https://webauthn.io/
# Click "Register" -> enter your PIN in the gpasskey prompt -> Passkey is created!
# Click "Authenticate" -> enter your PIN -> Instant login verified!
Manage encrypted secrets in the TPM-backed config store::
gpasskey-cli set-secret my-api-key "super-secret-value"
gpasskey-cli get-secret my-api-key
Documentation & Specifications
------------------------------
Our comprehensive engineering documentation is organized into modular specifications, architecture records, and roadmaps:
* **Functional Specifications**: `Functional Spec Index`_ — Defines user requirements and authorization models.
* **Technical Blueprints**: `Technical Spec Index`_ — Detailed Go architecture, crypto primitives, and enclave designs.
* **Architecture Decision Records (ADRs)**: `ADR Index`_ — Immutable log of architectural, crypto, and security choices.
* **API & Wire Protocols**: `API Spec Index`_ — Management socket, D-Bus portals, and bridge wire schemas.
* **Project Execution Roadmap**: `Roadmap Index`_ — Phased engineering timelines and milestone deliverables.
User Guides
User Quick Start_ - Get up and running in 5 minutes.Installation Guide_ - Detailed build, udev, and systemd setup.Security Guide_ - Hardware TPM 2.0 enclave and "Wrap and Clear" memory isolation.Configuration Guide_ - Environment variables and service options... _Functional Spec Index: docs/functional/spec.rst .. _Technical Spec Index: docs/technical/spec.rst .. _ADR Index: docs/adrs/index.rst .. _API Spec Index: docs/api/spec.rst .. _Roadmap Index: docs/project/roadmap.rst .. _User Quick Start: docs/user/quickstart.rst .. _Installation Guide: docs/user/installation.rst .. _Security Guide: docs/user/security.rst .. _Configuration Guide: docs/user/configuration.rst
We are currently specifying and architecting Phase 7: Pluggable Multi-Factor & Multi-Party Quorum Engine:
\mathcal{O}(1) memory consumption (:math:\le 64\,\text{KB} buffer).\text{GF}(2^8) with HMAC verification tags, enabling :math:k-of-:math:n split-key authorization.hmac-secret), and Linux biometrics (fprintd).gpk rekey) to switch an identity's factor policy on the fly without recreating keys.gpk (/usr/local/bin/gpk).org.freedesktop.secrets).See Phase 7 Roadmap_ and ADR-006_ for full specifications.
.. _Phase 7 Roadmap: docs/project/roadmaps/phase-7-pluggable-factors.rst .. _ADR-006: docs/adrs/2026-08-25-pluggable-auth-factors.rst
age encryption tool.Run the unit tests::
make test
Run the full Go-native integration suite (requires swtpm)::
make integration-test
If you find gpasskey useful and would like to support its ongoing development, consider donating via Liberapay:
.. image:: https://liberapay.com/assets/widgets/donate.svg :target: https://liberapay.com/Renich/donate :alt: Donate using Liberapay
Copyright 2026 EVALinux
This project is licensed under the GNU General Public License v3.0 or later. See LICENSE file for details.