
شهادة 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 الأساسية: جاهزة للإنتاج
الميزانية الموثوقة: تجريبية (اختياري، قابلة للتغيير)
الميزات التجريبية معزولة بوضوح ومعطلة افتراضيًا.
يعتمد SSH التقليدي على مفاتيح خاصة طويلة العمر موزعة عبر أجهزة الكمبيوتر المحمولة والخوادم. بمجرد تسريب مفتاح، يستمر الوصول حتى تكتشفه وتدير المفاتيح في كل مكان. يستبدل Ephemera المفاتيح الثابتة بشهادات قصيرة العمر تنتهي تلقائيًا، مما يقلص نافذة إساءة الاستخدام من شهور إلى دقائق.
الوصول في الوقت المناسب : تنتهي صلاحية الشهادات خلال دقائق (الافتراضي 5 دقائق)، مما يقلل من فرصة سرقة بيانات الاعتماد.
فرض WebAuthn : يتطلب إصدار الشهادة تفاعل MFA مادي (FIDO2) عبر YubiKey أو TouchID.
الاستعادة السيادية : النسخ الاحتياطية المشفرة محمية عبر مشاركة السر لشامير، وتتطلب النصاب القانوني للاستعادة.
تدقيق قابل للتحقق : تُسجل جميع إجراءات هيئة الشهادات في سجل متسلسل 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 عبر علامة تهيئة. الوضع الظلي مفتوح الفشل ولا يؤثر على قرارات التفويض.
لا تغييرات موثقة على واجهة CLI لـ Gate0. تكتسب سجلات الظل حقولًا جديدة لكنها تبقى قابلة للتحليل بشكل عكسي.
الهدف: إصدار أول شهادة SSH في أقل من 5 دقائق.
# استنساخ وتشغيل
git clone https://github.com/Qarait/ephemera.git
cd ephemera
docker compose up -d
ملاحظة: يتم إنشاء كلمة مرور رئيسية لهيئة الشهادات تلقائيًا وحفظها عند التشغيل الأول.
للإنتاج، ضعCA_MASTER_PASSWORDفي ملف.envقبل التشغيل.
[!IMPORTANT] النشرات الإنتاجية: استخدم الواجهة الخلفية SoftHSM لعزل المفاتيح المدعوم بالأجهزة. المفتاح الخاص لهيئة الشهادات لا يلمس القرص أبدًا. راجع دليل إعداد PKCS#11.
افتح http://localhost:3000 في متصفحك.
بيانات الدخول الافتراضية:
admindocker compose logs ephemera | grep "Password:"
ملفات Compose بديلة:
docker-compose.dev.yml — تطوير مع بنيات محلية وسجل النظامdocker-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 آلية نسخ احتياطي آمنة تقوم بتشفير بياناتك الحرجة (مفاتيح هيئة الشهادات، قاعدة البيانات) بكلمة مرور عشوائية، ثم تقسيم كلمة المرور تلك إلى شرائح Shamir. يضمن ذلك عدم قدرة أي شخص واحد على استعادة النسخة الاحتياطية، لكن النصاب القانوني يمكنه ذلك.
# إنشاء نسخة احتياطية مشفرة وتقسيم كلمة المرور إلى 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] نموذج التهديد والافتراضات الأمنية موثقة هنا. التعليقات والنقد مرحب بها.
| Field | الوصف |
|---|
timestamp | طابع زمني UTC وفق ISO 8601 |
match | قيمة منطقية — هل اتفق المحركان؟ |
versions.bridge | إصدار Python لـ GateBridge |
versions.gate0 | إصدار CLI لـ Gate0 |
versions.policy_hash | تجزئة SHA256 لملف policy.yaml |
context_hash | تجزئة SHA256 للمدخلات المقيسة |
yaml_decision | نتيجة محرك YAML |
gate0_decision | نتيجة محرك Gate0 |
snapshot | السياق الكامل (فقط عند عدم التطابق، بحجم محدود) |