
Центр сертификации SSH с нулевым доверием
Ephemera — это легковесный, самостоятельно размещаемый центр сертификации SSH, разработанный для обеспечения доступа с нулевым доверием к инфраструктуре. Он заменяет статические SSH-ключи на краткосрочные сертификаты, интегрирует WebAuthn MFA с аппаратной поддержкой и поддерживает криптографически проверяемые журналы аудита.
[!NOTE] Канонический источник: Codeberg
Зеркало на GitHub: GitHub (для доступности и хостинга)
graph LR
subgraph Client["User (Operator)"]
SSH["SSH Client"]
HW["Hardware Key<br/>WebAuthn / YubiKey"]
end
subgraph Auth["Authentication Boundary"]
MFA["WebAuthn MFA<br/><i>Human presence required</i>"]
OIDC["OIDC<br/><i>Optional</i>"]
end
subgraph CA["Ephemera SSH Certificate Authority"]
CORE["Self-hosted CA<br/>Air-gap capable"]
POLICY["Policy Engine<br/><i>Governance at issuance</i>"]
BUDGET["Trust Budgeting<br/><i>Optional</i>"]
end
subgraph Targets["Target Servers"]
NATIVE["Native OpenSSH<br/>TrustedUserCAKeys"]
NOAGENT["No agents<br/>No SSH proxy"]
end
subgraph Audit["Audit & Recovery"]
LOG["Tamper-Evident<br/>Audit Log"]
BACKUP["Encrypted Backups<br/>Shamir Recovery"]
end
Client --> Auth
Auth -->|"Short-lived cert"| CA
CA -->|"Certificate expires<br/>automatically"| Targets
CA -.->|"Post-fact integrity"| Audit
style Auth fill:#e8f5e9,stroke:#2e7d32
style CA fill:#e3f2fd,stroke:#1565c0
style Audit fill:#fff3e0,stroke:#ef6c00
Что делает Ephemera: Управляет тем, кто может получить доступ и насколько долго.
Что Ephemera НЕ делает: Мониторинг в реальном времени, MITM-проксирование, инспекция команд.
Реализация: Полностью встроенный OpenSSH — никаких агентов Ephemera на целевых серверах.
Ротация ключей: Не требуется — сертификаты истекают автоматически.
Ephemera — это самостоятельно размещаемый центр сертификации SSH, построенный на встроенных функциях OpenSSH. Он заменяет долгоживущие SSH-ключи на краткосрочные сертификаты, выдаваемые по требованию, с явным физическим присутствием и аудитируемым повышением привилегий.
Он предназначен для команд, которым нужно централизованное управление SSH без MITM-прокси, собственных протоколов или облачных зависимостей.
Базовая функциональность SSH CA: Готова к production
Trust Budgeting: Экспериментально (опционально, может измениться)
Экспериментальные функции четко изолированы и отключены по умолчанию.
Традиционный SSH опирается на долгоживущие закрытые ключи, распространяемые по ноутбукам и серверам. Как только ключ утекает, доступ сохраняется, пока вы не обнаружите это и не смените ключи везде. Ephemera заменяет статические ключи на краткосрочные сертификаты, которые истекают автоматически, сокращая окно злоупотребления с месяцев до минут.
Доступ по требованию : Сертификаты истекают через минуты (по умолчанию 5 мин), сокращая окно возможностей для кражи учетных данных.
Принуждение WebAuthn : Выдача сертификатов требует физического MFA (FIDO2) через YubiKey или TouchID.
Суверенное восстановление : Зашифрованные резервные копии защищены с помощью схемы Шамира, требующей кворума для восстановления.
Проверяемый аудит : Все действия ЦС записываются в журнал с цепочкой Меркла для защиты от несанкционированного изменения.
Гранулированное RBAC : Механизм политик на основе YAML определяет доступ по ролям, ресурсам и условиям.

Ephemera включает экспериментальный, опциональный примитив управления под названием Trust Budgeting.
Trust Budgeting ограничивает совокупные привилегированные полномочия во время выдачи сертификатов, рассматривая доступ как конечный, видимый ресурс. Каждая выдача сертификата потребляет явный бюджет. Когда бюджет исчерпан, обычная выдача прекращается до сброса бюджета или использования отдельного аварийного (break-glass) пути.
Этот механизм:
Trust Budgeting экспериментален и может быть изменен или удален.
Документация: docs/trust_budgeting.md
Ephemera включает GateBridge — систему теневого оценивания, которая проверяет решения политик на альтернативном движке (Gate0), не влияя на производственное поведение.
policy-shadow.log)Каждая запись содержит:
GET /api/admin/gate0/status
Возвращает:
{
"bridge_version": "1.0.0",
"gate0_version": "v0.2.1",
"policy_hash": "sha256:8f4b...",
"status": "healthy",
"last_mismatch": null,
"telemetry": {
"latency_p50_ms": 2.3,
"latency_p95_ms": 5.1,
"latency_p99_ms": 8.7
}
}
GateBridge можно отключить с помощью флага конфигурации. Теневой режим работает по принципу fail-open и не влияет на решения об авторизации.
Нет критических изменений в интерфейсе CLI Gate0. Теневые журналы получают новые поля, но остаются обратно совместимыми при парсинге.
Цель: Выпустить первый SSH-сертификат менее чем за 5 минут.
# Клонирование и запуск
git clone https://github.com/Qarait/ephemera.git
cd ephemera
docker compose up -d
Примечание: Мастер-пароль ЦС генерируется автоматически и сохраняется при первом запуске.
Для production установитеCA_MASTER_PASSWORDв файле.envперед запуском.
[!IMPORTANT] Производственные развертывания: Используйте бэкенд SoftHSM для изоляции ключей на аппаратном уровне. Закрытый ключ ЦС никогда не попадает на диск. См. Руководство по настройке PKCS#11.
Откройте http://localhost:3000 в браузере.
Учетные данные по умолчанию:
admindocker compose logs ephemera | grep "Password:"
Альтернативные файлы Compose:
docker-compose.dev.yml — Разработка с локальной сборкой и syslogdocker-compose.test.yml — Включает SSH-цель для сквозного тестирования# Установите CLI из исходников
git clone https://github.com/Qarait/ephemera.git
cd ephemera
pip install .
# Инициализируйте конфигурацию SSH
ephemera init
# Войдите в ЦС
ephemera login
# Выпустите первый сертификат
ephemera renew
# Проверьте свой статус
ephemera status
# Подключайтесь безопасно!
ssh user@your-server
Ephemera предоставляет безопасный механизм резервного копирования, который шифрует ваши критически важные данные (ключи ЦС, базу данных) случайным паролем, а затем разделяет этот пароль на части по схеме Шамира. Это гарантирует, что ни один человек не сможет восстановить резервную копию, но кворум сможет.
# Создать зашифрованную резервную копию и разделить пароль на 5 частей (порог 3)
ephemera backup-create --k 3 --n 5 --out-dir ./backup
Это создает:
ephemera_backup.enc (Зашифрованный архив)backup_shard_1_of_5.json и т.д. (Части пароля)Примечание: Храните части в отдельных, защищенных местах. Храните зашифрованный файл резервной копии в безопасности (он бесполезен без частей).
# Восстановить, используя зашифрованный файл и любые 3 части
ephemera backup-restore --backup ./backup/ephemera_backup.enc --shards ./backup/backup_shard_1_of_5.json ./backup/backup_shard_2_of_5.json ./backup/backup_shard_4_of_5.json --out-dir ./restored
policy.yaml)Ephemera использует мощный механизм политик на основе YAML для управления доступом на основе ролей (RBAC).
# Define Roles
roles:
developer:
can_request_cert: true
max_cert_duration: 300 # 5 minutes
allowed_principals: ["dev-user"]
admin:
can_request_cert: true
max_cert_duration: 3600 # 1 hour
allowed_principals: ["root", "admin"]
can_approve_sudo: true
# Define Rules
rules:
# Developers can only access dev servers
- role: developer
resource: "dev-*"
action: "ssh"
effect: allow
# Admins can access everything with MFA
- role: admin
resource: "*"
action: "ssh"
effect: allow
conditions:
mfa_required: true
Пожалуйста, смотрите SECURITY.md для информации об ответственном раскрытии.
Хотите внести вклад? Ознакомьтесь с нашими Небольшими задачами для новых участников.
[!TIP] Модель угроз и предположения по безопасности задокументированы здесь. Отзывы и критика приветствуются.
| Поле | Описание |
|---|
timestamp | Метка времени ISO 8601 UTC |
match | Boolean — согласны ли оба движка? |
versions.bridge | Версия Python GateBridge |
versions.gate0 | Версия CLI Gate0 |
versions.policy_hash | SHA256-хэш policy.yaml |
context_hash | SHA256-хэш канонизированного ввода |
yaml_decision | Результат движка YAML |
gate0_decision | Результат движка Gate0 |
snapshot | Полный контекст (только при несовпадении, с ограничением размера) |