
Enclave d'identité cryptographique centralisée, soutenue par le matériel TPM 2.0, et pont multi-protocole pour Linux (FIDO2/CTAP2 WebAuthn Passkeys, OpenSSH Agent, GnuPG LibAssuan, age-plugin, stockage de configuration chiffré).
.. image:: https://gitlab.com/renich/gpasskey/-/raw/master/assets/banner.svg :width: 100% :align: center :alt: bannière gEnclave
|
.. image:: https://gitlab.com/renich/gpasskey/badges/master/pipeline.svg :target: https://gitlab.com/renich/gpasskey/-/commits/master :alt: état du pipeline .. image:: https://img.shields.io/gitlab/v/release/renich/gpasskey?logo=gitlab&label=release :target: https://gitlab.com/renich/gpasskey/-/releases :alt: Version GitLab .. image:: https://img.shields.io/badge/Go-1.26+-00ADD8?style=flat&logo=go :target: https://golang.org/ :alt: Version de Go .. image:: https://img.shields.io/badge/License-GPLv3-blue.svg?logo=gnu :target: https://www.gnu.org/licenses/gpl-3.0 :alt: Licence
|
.. 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: Ponts multi-protocoles .. image:: https://img.shields.io/badge/Donate-Liberapay-f6c915.svg?logo=liberapay&logoColor=black :target: https://liberapay.com/Renich/donate :alt: Faire un don via Liberapay
.. caution::
LOGICIEL PRÉ-ALPHA — À UTILISER À VOS PROPRES RISQUES !
Malgré la numérotation des versions, gEnclave (anciennement gpasskey) est actuellement un logiciel expérimental pré-alpha en cours de développement architectural rapide. Les schémas cryptographiques, les formats de coffre-fort et les ponts de protocole peuvent changer sans compatibilité ascendante.
gEnclave fournit une enclave de sécurité unifiée reposant sur le matériel, qui stocke les clés privées et les secrets dans un coffre-fort chiffré scellé par TPM.
Il agit comme un pont multi-protocoles, prenant en charge les Passkeys WebAuthn/FIDO2, l'agent OpenSSH, le protocole de plugin de chiffrement age, l'émulation de signature de commit GnuPG et la configuration de secrets chiffrés.
Prise en charge multi-protocoles :
/dev/uhid pour l'authentification native par Passkey dans les navigateurs (Firefox, Chrome, Chromium) et le système d'exploitation.age (v1) (age-plugin-ge/age-plugin-gpasskey).genclave-gpg/gpasskey-gpg) pour une signature et une vérification transparentes des commits Git.Sécurité reposant sur le matériel : Clés privées chiffrées avec AES-256-GCM, principalement scellées au TPM 2.0 avec mise en cache SRK et repli logiciel automatique sur Argon2id.
Liaison cryptographique au PIN et cache d'authentification : Chaque opération est liée à une sous-clé dérivée du PIN avec un cache d'autorisation en mémoire dans une RAM verrouillée par le noyau (mlock). Prend en charge une durée de rafale configurable (5 s par défaut) ou une mise en cache persistante/illimitée (GENCLAVE_SSH_CACHE_TTL="infinite"), avec effacement instantané lors de la mise en veille du système ou du verrouillage manuel.
Matériel et noyau
* **TPM 2.0** : Périphérique TPM 2.0 matériel (``/dev/tpmrm0`` ou ``/dev/tpm0``), ou ``swtpm`` pour le développement en émulation logicielle.
* **Noyau Linux avec /dev/uhid** : Prise en charge native du noyau pour les périphériques HID en espace utilisateur (activée par défaut dans les distributions modernes) afin de prendre en charge les passkeys FIDO2/CTAP2 virtuelles dans le navigateur.
Dépendances d'exécution
wl-copy) ou xclip : Recommandé pour la copie dans le presse-papiers en un clic dans la boîte de dialogue de récupération après sinistre.Dépendances de compilation et de développement
* **Go 1.26** ou version ultérieure
* **GNU Make**
* **swtpm** (facultatif, requis pour exécuter la suite complète de tests d'intégration)
Installation via le gestionnaire de paquets
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sur Fedora/RHEL/AlmaLinux :
.. code-block:: bash
sudo dnf install golang make tpm2-tools zenity pinentry wl-clipboard swtpm
Sur Arch Linux :
.. code-block:: bash
sudo pacman -S go make tpm2-tools zenity pinentry wl-clipboard swtpm
Sur Debian/Ubuntu :
.. code-block:: bash
sudo apt install golang-go make tpm2-tools zenity pinentry-curses wl-clipboard swtpm
Démarrage rapide
----------------
Compilez et installez pour votre compte utilisateur (recommandé, sans root) :
.. code-block:: bash
make clean && make all
make install-user # Installs to ~/.local/bin, ~/.config/systemd/user, ~/.local/share/dbus-1
Ou installez à l'échelle du système (nécessite root) :
.. code-block:: bash
sudo make install # Installs to /usr/local/bin
Activez et démarrez l'activation par socket :
.. code-block:: bash
systemctl --user enable --now genclave-ssh.socket genclave-gpg.socket
Initialisez votre coffre-fort et vérifiez l'état :
.. code-block:: bash
ge status
# Identities are enrolled automatically on first use by clients
# (WebAuthn passkeys, SSH, age, GPG) or via the portal API.
Pré-authentifiez le cache pour les scripts automatisés ou les sessions sans interface graphique :
.. code-block:: bash
# Unlock cache interactively via TTY:
ge unlock
# Or pre-authenticate via pipeline in scripts:
echo "$PIN" | ge unlock --stdin
# Purge and lock immediately when finished:
ge lock
Passkeys WebAuthn dans le navigateur :
.. code-block:: bash
# Open Firefox or Chrome, go to https://webauthn.io/
# Click "Register" -> enter your PIN in the gEnclave prompt -> Passkey is created!
# Click "Authenticate" -> enter your PIN -> Instant login verified!
Gérez les secrets chiffrés dans le magasin de configuration adossé au TPM :
.. code-block:: bash
ge set-secret my-api-key "super-secret-value"
ge get-secret my-api-key
Documentation et spécifications
------------------------------
Notre documentation d'ingénierie complète est organisée en spécifications modulaires, enregistrements d'architecture et feuilles de route :
* **Spécifications fonctionnelles** : `Functional Spec Index`_ — Définit les exigences utilisateur et les modèles d'autorisation.
* **Plans techniques** : `Technical Spec Index`_ — Architecture Go détaillée, primitives cryptographiques et conceptions d'enclave.
* **Enregistrements de décisions d'architecture (ADR)** : `ADR Index`_ — Journal immuable des choix architecturaux, cryptographiques et de sécurité.
* **API et protocoles de communication** : `API Spec Index`_ — Socket de gestion, portails D-Bus et schémas de communication des ponts.
* **Feuille de route d'exécution du projet** : `Roadmap Index`_ — Calendriers d'ingénierie par phases et livrables jalonnés.
Guides utilisateur
~~~~~~~~~~~~~~~~~~
* `User Quick Start`_ - Opérationnel en 5 minutes.
* `Installation Guide`_ - Compilation détaillée, configuration udev et systemd.
* `OpenSSH Guide`_ - Intégration de l'agent OpenSSH, hôtes de rebond et clés FIDO2.
* `GnuPG & Git Signing Guide`_ - Gestion des clés OpenPGP et signature de commits Git.
* `Pluggable Factors Guide`_ - Fichiers de clés, YubiKeys, biométrie et quorums Shamir.
* `Security Guide`_ - Enclave matérielle TPM 2.0 et isolation mémoire « Wrap and Clear ».
* `Configuration Guide`_ - Variables d'environnement et options de service.
* `CLI Reference`_ - Documentation complète de l'interface en ligne de commande.
.. _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
.. _OpenSSH Guide: docs/user/ssh.rst
.. _GnuPG & Git Signing Guide: docs/user/gpg.rst
.. _Pluggable Factors Guide: docs/user/factors.rst
.. _Security Guide: docs/user/security.rst
.. _Configuration Guide: docs/user/configuration.rst
.. _CLI Reference: docs/user/cli.rst
Facteurs enfichables et quorum multipartite (Phase 7)
-----------------------------------------------------
**Phase 7 : Moteur enfichable d'authentification multifacteur et de quorum multipartite** apporte :
* **Hacheur de fichiers arbitraires en flux** : Utilisez n'importe quel fichier (d'un court poème à un master audio FLAC de 100 Go ou une image) comme facteur d'autorisation avec une consommation mémoire constante :math:`\mathcal{O}(1)` (:math:`\le 64\,\text{KB}` de tampon).
* **Quorum multipartite (« La recette Coca-Cola »)** : **Partage de secret de Shamir à clé enveloppée** sur :math:`\text{GF}(2^8)` avec balises de vérification HMAC, permettant une autorisation par clé fractionnée :math:`k`-sur-:math:`n`.
* **Matériel et biométrie** : YubiKey physique (Slot 2 HMAC-SHA1), clés FIDO2 physiques (``hmac-secret``) et biométrie Linux (``fprintd``).
* **Re-keying dynamique des facteurs** : Re-chiffrement atomique en mémoire (``ge rekey``) pour changer à la volée la politique de facteurs d'une identité sans recréer les clés.
* **Modernisation de la CLI** : Interface en ligne de commande rationalisée autour de la commande canonique ``ge``.
* **Déverrouillage automatique du bureau** : Intégration transparente avec le Freedesktop Secret Service (``org.freedesktop.secrets``).
Voir `Phase 7 Roadmap`_ et `ADR-006`_ pour les spécifications complètes.
.. _Phase 7 Roadmap: docs/project/roadmaps/phase-7-pluggable-factors.rst
.. _ADR-006: docs/adrs/2026-08-25-pluggable-auth-factors.rst
Composants
----------
* **genclaved** : L'enclave de sécurité centrale et le démon de clé de sécurité USB virtuelle CTAP2/FIDO2 (``man 8 genclaved``).
* **ge** : Outil principal en ligne de commande pour l'administration du coffre-fort, la génération de clés OpenSSH/GnuPG et la configuration chiffrée (``man 1 ge``).
* **age-plugin-ge** : Plugin pour l'outil de chiffrement ``age`` (``man 1 age-plugin-ge``).
* **genclave-gpg** : Pont d'émulation pour la signature et la vérification compatibles GnuPG (``man 1 genclave-gpg``).
* **genclave-ui** : Assistant graphique pour la saisie du PIN (``man 1 genclave-ui``).
Développement
-------------
Exécutez les tests unitaires :
.. code-block:: bash
make test
Exécutez la suite d'intégration complète native Go (nécessite ``swtpm``) :
.. code-block:: bash
make integration-test
Support et dons
---------------
Si vous trouvez **gEnclave** utile et souhaitez soutenir son développement continu, envisagez de faire un don via Liberapay :
.. image:: https://liberapay.com/assets/widgets/donate.svg
:target: https://liberapay.com/Renich/donate
:alt: Faire un don via Liberapay
Licence
-------
Copyright 2026 EVALinux
Ce projet est sous licence GNU General Public License v3.0 ou ultérieure.
Voir le fichier LICENSE pour plus de détails.
Pré-authentification CLI et contrôle du verrouillage : Déverrouillez ou verrouillez le cache en mémoire directement depuis le terminal (ge unlock [--stdin], ge lock) pour les scripts par lots automatisés et les flux de travail sans interface graphique.
KDF Argon2id : Dérivation de clé à mémoire dure pour la phrase de passe maîtresse, la récupération et les sous-clés.
Protection contre les attaques par force brute : Retrait exponentiel automatique pour les tentatives d'autorisation échouées.
Routage intelligent de l'interface : Détection automatique de la session (graphique ou TTY) pour les invites d'autorisation.
Mémoire sécurisée : Utilise mmap/mlock et une stratégie « Wrap and Clear » pour empêcher toute fuite du matériel de clé vers le swap ou le tas du GC.
Gestion des identités : CLI robuste (ge) pour l'administration du coffre-fort et la gestion des secrets chiffrés.