
ゼロトラストSSH CA
Ephemera は、インフラストラクチャへのゼロトラストアクセスを強制するために設計された、軽量でセルフホストの SSH 認証局です。静的 SSH キーを短命な証明書に置き換え、ハードウェアバックアップされた WebAuthn MFA を統合し、暗号検証可能な監査証跡を維持します。
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 は、ネイティブの OpenSSH 機能をベースに構築されたセルフホスト SSH 認証局です。 長期間有効な SSH キーを、明示的な物理的存在と監査可能な権限昇格を伴って、ジャストインタイムで発行される短命な証明書に置き換えます。
これは、MITM プロキシ、カスタムプロトコル、クラウド依存関係なしに、集中型の SSH ガバナンスを必要とするチーム向けに設計されています。
コア SSH CA 機能: プロダクション準備完了
信頼予算管理: 実験的 (オプトイン、変更の可能性あり)
実験的機能は明確に分離されており、デフォルトで無効になっています。
従来の SSH は、ラップトップやサーバーに散らばった長期間有効な秘密鍵に依存しています。キーが漏洩すると、それを発見してすべての場所でキーをローテーションするまでアクセスが持続します。Ephemera は静的キーを自動的に期限切れになる短命な証明書に置き換え、不正利用の機会を数か月から数分に縮小します。
ジャストインタイムアクセス: 証明書は数分で期限切れ(デフォルト 5 分)になり、盗まれた資格情報の悪用機会を減らします。
WebAuthn 強制: 証明書の発行には、YubiKey または TouchID を介した物理的な MFA(FIDO2)操作が必要です。
主権的回復: 暗号化されたバックアップは Shamir の秘密分散法で保護され、復元には定足数が必要です。
検証可能な監査: すべての CA アクションは、改ざん防止履歴のために Merkle チェーン化された台帳に記録されます。
きめ細かい RBAC: YAML ベースのポリシーエンジンが、役割、リソース、条件に基づいてアクセスを定義します。

Ephemera には、信頼予算管理と呼ばれる実験的でオプトインのガバナンスプリミティブが含まれています。
信頼予算管理は、アクセスを有限で可視的なリソースとして扱うことにより、証明書発行時に累積的な特権権限を制限します。各証明書発行は明示的な予算を消費します。予算が枯渇すると、予算がリセットされるか、別の緊急(ブレイクガラス)パスが使用されるまで、通常の発行は停止します。
このメカニズムは:
信頼予算管理は実験的であり、変更または削除される可能性があります。
ドキュメント: 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 は設定フラグで無効にできます。シャドウモードはフェイルオープンであり、認可決定に影響を与えません。
Gate0 CLI インターフェースへの破壊的変更はありません。シャドウログは新しいフィールドを取得しますが、後方互換性のあるパースが可能です。
目標: 5 分以内に最初の SSH 証明書を発行する。
# Clone and start
git clone https://github.com/Qarait/ephemera.git
cd ephemera
docker compose up -d
注: CA マスターパスワードは初回実行時に自動生成され、保存されます。
本番環境では、起動前に.envファイルにCA_MASTER_PASSWORDを設定してください。
[!IMPORTANT] 本番環境へのデプロイ: ハードウェアバックアップされた鍵の分離には SoftHSM バックエンドを使用してください。CA 秘密鍵はディスクに触れません。PKCS#11 セットアップガイド を参照してください。
ブラウザで http://localhost:3000 を開きます。
デフォルトの認証情報:
admindocker compose logs ephemera | grep "Password:"
代替 Compose ファイル:
docker-compose.dev.yml — ローカルビルドと syslog を使用した開発用docker-compose.test.yml — エンドツーエンドテスト用に SSH ターゲットを含む# Install the CLI from source
git clone https://github.com/Qarait/ephemera.git
cd ephemera
pip install .
# Initialize your SSH config
ephemera init
# Login to the CA
ephemera login
# Issue your first certificate
ephemera renew
# Check your status
ephemera status
# Connect securely!
ssh user@your-server
Ephemera は、重要なデータ(CA キー、データベース)をランダムなパスワードで暗号化し、そのパスワードを Shamir シャードに分割する安全なバックアップメカニズムを提供します。これにより、単独の人物がバックアップを復元することはできませんが、定足数があれば復元できます。
# Create encrypted backup and split password into 5 shards (threshold 3)
ephemera backup-create --k 3 --n 5 --out-dir ./backup
これにより以下が生成されます:
ephemera_backup.enc (暗号化アーカイブ)backup_shard_1_of_5.json など(パスワードシャード)注: シャードは別々の安全な場所に保管してください。暗号化されたバックアップファイルは安全に保管してください(シャードなしでは役に立ちません)。
# Restore using the encrypted file and any 3 shards
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 は、ロールベースのアクセス制御(RBAC)のために、強力な YAML ベースのポリシーエンジンを使用します。
# 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 | ブール — 両方のエンジンが一致しましたか? |
versions.bridge | GateBridge Python バージョン |
versions.gate0 | Gate0 CLI バージョン |
versions.policy_hash | policy.yaml の SHA256 ハッシュ |
context_hash | 正規化された入力の SHA256 ハッシュ |
yaml_decision | YAML エンジンの結果 |
gate0_decision | Gate0 エンジンの結果 |
snapshot | 完全なコンテキスト(不一致時のみ、サイズ制限あり) |