
Централизованный аппаратно-защищённый анклав криптографической идентификации на базе TPM 2.0 и многопротокольный мост для Linux (FIDO2/CTAP2 WebAuthn Passkeys, OpenSSH Agent, GnuPG LibAssuan, age-plugin, зашифрованное хранилище конфигурации).
.. image:: https://gitlab.com/renich/gpasskey/-/raw/master/assets/banner.svg :width: 100% :align: center :alt: gEnclave banner
|
.. 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/badge/Donate-Liberapay-f6c915.svg?logo=liberapay&logoColor=black :target: https://liberapay.com/Renich/donate :alt: Donate using Liberapay
.. caution::
ПРЕДВАРИТЕЛЬНАЯ АЛЬФА-ВЕРСИЯ — ИСПОЛЬЗУЙТЕ НА СВОЙ РИСК!
Несмотря на нумерацию релизов, gEnclave (ранее gpasskey) в настоящее время является экспериментальным программным обеспечением на стадии предварительной альфы, проходящим быструю архитектурную разработку. Криптографические схемы, форматы хранилищ и протокольные мосты могут изменяться без обратной совместимости.
gEnclave предоставляет унифицированный аппаратно-защищённый анклав безопасности, который хранит приватные ключи и секреты в зашифрованном хранилище, запечатанном TPM.
Он действует как многопротокольный мост, поддерживая WebAuthn/FIDO2 Passkeys, 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="infinite"), с мгновенным обнулением при приостановке системы или ручной блокировке.
Предварительная аутентификация CLI и управление блокировкой: Разблокировка или блокировка кэша в памяти непосредственно из терминала (, ) для автоматизированных пакетных скриптов и безголовых рабочих процессов.
Аппаратное обеспечение и ядро
* **TPM 2.0**: Аппаратное устройство TPM 2.0 (``/dev/tpmrm0`` или ``/dev/tpm0``) или ``swtpm`` для программно-эмулированной разработки.
* **Ядро Linux с /dev/uhid**: Нативная поддержка ядром HID-устройств пользовательского пространства (включена по умолчанию в современных дистрибутивах) для поддержки виртуальных браузерных passkey FIDO2/CTAP2.
Зависимости времени выполнения
wl-copy) или xclip: Рекомендуется для копирования в буфер обмена одним щелчком в диалоге аварийного восстановления.Зависимости для сборки и разработки
* **Go 1.26** или новее
* **GNU Make**
* **swtpm** (опционально, требуется для запуска полного набора интеграционных тестов)
Установка через менеджер пакетов
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
В Fedora/RHEL/AlmaLinux:
.. code-block:: bash
sudo dnf install golang make tpm2-tools zenity pinentry wl-clipboard swtpm
В Arch Linux:
.. code-block:: bash
sudo pacman -S go make tpm2-tools zenity pinentry wl-clipboard swtpm
В Debian/Ubuntu:
.. code-block:: bash
sudo apt install golang-go make tpm2-tools zenity pinentry-curses wl-clipboard swtpm
Быстрый старт
-------------
Сборка и установка для вашей учётной записи (рекомендуется, без root):
.. code-block:: bash
make clean && make all
make install-user # Installs to ~/.local/bin, ~/.config/systemd/user, ~/.local/share/dbus-1
Или установка в систему (требуется root):
.. code-block:: bash
sudo make install # Installs to /usr/local/bin
Включение и запуск активации сокета:
.. code-block:: bash
systemctl --user enable --now genclave-ssh.socket genclave-gpg.socket
Инициализация хранилища и проверка статуса:
.. code-block:: bash
ge status
# Identities are enrolled automatically on first use by clients
# (WebAuthn passkeys, SSH, age, GPG) or via the portal API.
Предварительная аутентификация кэша для автоматизированных скриптов или безголовых сессий:
.. 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 в браузере:
.. 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!
Управление зашифрованными секретами в конфигурационном хранилище на базе TPM:
.. code-block:: bash
ge set-secret my-api-key "super-secret-value"
ge get-secret my-api-key
Документация и спецификации
---------------------------
Наша комплексная инженерная документация организована в модульные спецификации, архитектурные записи и дорожные карты:
* **Функциональные спецификации**: `Functional Spec Index`_ — Определяет пользовательские требования и модели авторизации.
* **Технические чертежи**: `Technical Spec Index`_ — Подробная архитектура Go, криптографические примитивы и проекты анклавов.
* **Записи об архитектурных решениях (ADR)**: `ADR Index`_ — Неизменяемый журнал архитектурных, криптографических и security-решений.
* **API и сетевые протоколы**: `API Spec Index`_ — Управляющий сокет, порталы D-Bus и схемы сетевых мостов.
* **Дорожная карта выполнения проекта**: `Roadmap Index`_ — Поэтапные инженерные графики и вехи.
Руководства пользователя
~~~~~~~~~~~~~~~~~~~~~~~~
* `User Quick Start`_ — Начало работы за 5 минут.
* `Installation Guide`_ — Подробная сборка, настройка udev и systemd.
* `OpenSSH Guide`_ — Интеграция с агентом OpenSSH, jump-хосты и ключи FIDO2.
* `GnuPG & Git Signing Guide`_ — Управление ключами OpenPGP и подпись коммитов Git.
* `Pluggable Factors Guide`_ — Keyfiles, YubiKeys, биометрия и кворумы Шамира.
* `Security Guide`_ — Аппаратный анклав TPM 2.0 и изоляция памяти «Wrap and Clear».
* `Configuration Guide`_ — Переменные окружения и параметры сервиса.
* `CLI Reference`_ — Полная документация интерфейса командной строки.
.. _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
Подключаемые факторы и многосторонний кворум (Фаза 7)
-----------------------------------------------------
**Фаза 7: Движок подключаемых многофакторных и многосторонних кворумов** предоставляет:
* **Потоковый хешер произвольных файлов**: Используйте любой файл (от короткого стихотворения до 100-гигабайтного мастер-файла FLAC или изображения) в качестве фактора авторизации с постоянным потреблением памяти :math:`\mathcal{O}(1)` (буфер :math:`\le 64\,\text{KB}`).
* **Многосторонний кворум («Рецепт Coca-Cola»)**: **Разделение секрета Шамира с обёрткой ключа** над :math:`\text{GF}(2^8)` с тегами проверки HMAC, обеспечивающее авторизацию с разделённым ключом :math:`k`-из-:math:`n`.
* **Аппаратное обеспечение и биометрия**: Физический YubiKey (Slot 2 HMAC-SHA1), физические ключи FIDO2 (``hmac-secret``) и биометрия Linux (``fprintd``).
* **Динамическая перегенерация ключей факторов**: Атомарное перешифрование в памяти (``ge rekey``) для переключения политики факторов идентичности на лету без пересоздания ключей.
* **Модернизация CLI**: Оптимизированный интерфейс командной строки, сведённый к каноническому ``ge``.
* **Автоматическая разблокировка в рабочей среде**: Бесшовная интеграция с Freedesktop Secret Service (``org.freedesktop.secrets``).
См. `Phase 7 Roadmap`_ и `ADR-006`_ для полных спецификаций.
.. _Phase 7 Roadmap: docs/project/roadmaps/phase-7-pluggable-factors.rst
.. _ADR-006: docs/adrs/2026-08-25-pluggable-auth-factors.rst
Компоненты
----------
* **genclaved**: Ядро анклава безопасности и демон виртуального USB-ключа безопасности CTAP2/FIDO2 (``man 8 genclaved``).
* **ge**: Основной инструмент командной строки для администрирования хранилища, генерации ключей OpenSSH/GnuPG и зашифрованной конфигурации (``man 1 ge``).
* **age-plugin-ge**: Плагин для инструмента шифрования ``age`` (``man 1 age-plugin-ge``).
* **genclave-gpg**: Мост эмуляции для подписи и проверки, совместимых с GnuPG (``man 1 genclave-gpg``).
* **genclave-ui**: Графический помощник для ввода PIN (``man 1 genclave-ui``).
Разработка
----------
Запуск модульных тестов:
.. code-block:: bash
make test
Запуск полного нативного интеграционного набора Go (требуется ``swtpm``):
.. code-block:: bash
make integration-test
Поддержка и пожертвования
-------------------------
Если вы находите **gEnclave** полезным и хотите поддержать его дальнейшую разработку, рассмотрите возможность пожертвования через Liberapay:
.. image:: https://liberapay.com/assets/widgets/donate.svg
:target: https://liberapay.com/Renich/donate
:alt: Donate using Liberapay
Лицензия
--------
Copyright 2026 EVALinux
Этот проект лицензирован под GNU General Public License v3.0 или более поздней версией.
Подробности см. в файле LICENSE.
ge unlock [--stdin]ge lockArgon2id KDF: Вывод ключей, устойчивый к атакам по памяти, для мастер-парольной фразы, восстановления и подключей.
Защита от перебора: Автоматическая экспоненциальная задержка при неудачных попытках авторизации.
Интеллектуальная маршрутизация UI: Автоматическое определение сессии (графическая или TTY) для запросов авторизации.
Безопасная память: Использует mmap/mlock и стратегию «Wrap and Clear» для предотвращения утечки ключевого материала в swap или кучу GC.
Управление идентификацией: Надёжный CLI (ge) для администрирования хранилища и управления зашифрованными секретами.