
Централизованный аппаратно-защищённый анклав криптографической идентификации на базе TPM 2.0 и многопротокольный мост для Linux (FIDO2/CTAP2 WebAuthn Passkeys, OpenSSH Agent, GnuPG LibAssuan, age-plugin, зашифрованное хранилище конфигурации).
.. image:: https://gitlab.com/renich/genclave/-/raw/master/assets/banner.svg :width: 100% :align: center :alt: баннер gEnclave
|
.. image:: https://gitlab.com/renich/genclave/badges/master/pipeline.svg :target: https://gitlab.com/renich/genclave/-/commits/master :alt: статус конвейера .. image:: https://img.shields.io/gitlab/v/release/renich/genclave?logo=gitlab&label=release :target: https://gitlab.com/renich/genclave/-/releases :alt: релиз GitLab .. image:: https://img.shields.io/badge/Go-1.26+-00ADD8?style=flat&logo=go :target: https://golang.org/ :alt: версия Go .. image:: https://img.shields.io/badge/License-GPLv3-blue.svg?logo=gnu :target: https://www.gnu.org/licenses/gpl-3.0 :alt: лицензия
|
.. 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: мультипротокольные мосты .. image:: https://img.shields.io/badge/Donate-Liberapay-f6c915.svg?logo=liberapay&logoColor=black :target: https://liberapay.com/Renich/donate :alt: поддержать через Liberapay
.. caution::
ПРЕДВАРИТЕЛЬНАЯ АЛЬФА-ВЕРСИЯ — ИСПОЛЬЗУЙТЕ НА СВОЙ РИСК!
Несмотря на нумерацию релизов, gEnclave (ранее gpasskey) в настоящее время является экспериментальным программным обеспечением стадии pre-alpha, находящимся в процессе быстрой архитектурной разработки. Криптографические схемы, форматы хранилищ и протокольные мосты могут изменяться без обратной совместимости.
gEnclave предоставляет единый аппаратно-защищённый анклав безопасности, который хранит закрытые ключи и секреты в зашифрованном хранилище, защищённом TPM.
Он действует как мультипротокольный мост, поддерживая пасскеи WebAuthn/FIDO2, OpenSSH Agent, протокол плагина шифрования age, эмуляцию подписи коммитов GnuPG и зашифрованную конфигурацию секретов.
Поддержка множества протоколов:
/dev/uhid для нативной аутентификации по Passkey в браузерах (Firefox, Chrome, Chromium) и ОС.age (v1) (age-plugin-ge/age-plugin-gpasskey).genclave-gpg/gpasskey-gpg) для бесшовного подписывания и проверки Git-коммитов.Аппаратно защищённая безопасность: Приватные ключи шифруются с помощью AES-256-GCM и в первую очередь запечатываются в TPM 2.0 с кэшированием SRK и автоматическим программным откатом на Argon2id.
Криптографическая привязка к PIN и кэш авторизации: Каждая операция привязана к подключу, производному от PIN, с кэшем авторизации в памяти, заблокированной в ядре (mlock). Поддерживается настраиваемая длительность серии операций (по умолчанию 5 с) или постоянное/неограниченное кэширование (настраивается в хранилище или через GENCLAVE_SSH_CACHE_TTL), с мгновенным обнулением при приостановке системы или ручной блокировке.
Предварительная аутентификация через CLI и управление блокировкой: Разблокировка или блокировка кэша в памяти прямо из терминала (ge unlock [--stdin], ge lock) для автоматизированных пакетных скриптов и headless-рабочих процессов.
Argon2id KDF: Ресурсоёмкое по памяти вычисление ключа для мастер-парольной фразы, восстановления и подключей.
Защита от перебора: Автоматическая экспоненциальная задержка при неудачных попытках авторизации.
Интеллектуальная маршрутизация UI: Автоматическое определение сеанса (графический или TTY) для запросов авторизации.
Безопасная память: Использует mmap/mlock и стратегию «Wrap and Clear» для предотвращения утечки ключевого материала в swap или кучу GC.
Управление идентификацией: Надёжный CLI (ge) для администрирования хранилища и управления зашифрованными секретами.
Аппаратное обеспечение и ядро
* **TPM 2.0**: Hardware TPM 2.0 device (``/dev/tpmrm0`` or ``/dev/tpm0``), or ``swtpm`` for software-emulated development.
* **Linux Kernel with /dev/uhid**: Native kernel support for user-space HID devices (enabled by default in modern distributions) to support virtual FIDO2/CTAP2 browser passkeys.
Runtime Dependencies
wl-copy): рекомендуется для копирования в буфер обмена одним щелчком в диалоге аварийного восстановления.Зависимости для сборки и разработки
* **Go 1.26** or later
* **GNU Make**
* **swtpm** (optional, required to execute the full integration test suite)
Package Manager Installation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
On Fedora/RHEL/AlmaLinux:
.. code-block:: bash
sudo dnf install golang make tpm2-tools zenity pinentry wl-clipboard swtpm
On Arch Linux:
.. code-block:: bash
sudo pacman -S go make tpm2-tools zenity pinentry wl-clipboard swtpm
On Debian/Ubuntu:
.. code-block:: bash
sudo apt install golang-go make tpm2-tools zenity pinentry-curses wl-clipboard swtpm
Quick Start
-----------
Build and install for your user account (recommended, non-root):
.. code-block:: bash
make
make install-user # Installs binaries, systemd units, man pages, and activates services
Or install system-wide (requires root):
.. code-block:: bash
sudo make install # Installs to /usr/local/bin, /usr/share/man, etc.
Inspect enclave and daemon status:
.. code-block:: bash
ge status
Pre-authenticate the cache for automated scripts or headless sessions:
.. 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
Manage OpenSSH keys in the vault:
.. code-block:: bash
# Generate a new hardware-sealed Ed25519 SSH key:
ge ssh generate --name personal-github
# Or import your existing keys from ~/.ssh/:
ge ssh import ~/.ssh/
# Export OpenSSH public key for GitHub/GitLab:
ge ssh public personal-github
Manage GnuPG identities & Git commit signing:
.. code-block:: bash
# Generate an OpenPGP signing key:
ge gpg generate --user-name "Your Name" --email "[email protected]"
# List registered keys and Libgcrypt keygrips:
ge gpg list
Manage WebAuthn Passkeys in Browser:
.. 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!
Manage encrypted secrets in the hardware-bound configuration store:
.. code-block:: bash