
مكتبة تشفير هجين ما بعد الكم تجمع بين X25519 + ML-KEM-768 مع AES-256-GCM
خادم تشفير هجين مقاوم للحوسبة الكمومية وإدارة مفاتيح.
يجمع Citadel بين X25519 + ML-KEM-768 لتغليف المفاتيح وAES-256-GCM لتشفير البيانات، متّبعًا نهج NIST الهجين للانتقال إلى ما بعد الحوسبة الكمومية. تقوم التطبيقات بتشفير البيانات وفك تشفيرها عبر REST API. يدير Citadel المفاتيح — التوليد، والتدوير، والإبطال، والتحكم في الوصول، وتسجيل التدقيق.
الحالة: تنفيذ يعمل. غير مُدقَّق. لا توجد عمليات نشر إنتاجية. انظر الأمان أدناه.
Your Application Citadel Database
| | |
|-- POST /encrypt ------->| |
| |-- hybrid KEM (X25519+ML-KEM) |
| |-- derive AES-256 key (HKDF) |
| |-- encrypt with AES-256-GCM |
|<-- encrypted blob ------| |
| |
|-- store blob ------------------------------------------>|
لا يلمس تطبيقك مواد المفاتيح الخام أبدًا. الكتلة المشفرة ذاتية الاحتواء — تتضمن المفتاح المغلف ومعرّفات الخوارزمية والنص المشفر. خزّنها في أي قاعدة بيانات. لفك التشفير، أرسلها مرة أخرى إلى Citadel مع نفس AAD والسياق.
citadel-envelope Hybrid encryption core (X25519 + ML-KEM-768 + AES-256-GCM)
citadel-keystore Key lifecycle management, 4-level hierarchy, threat-adaptive policies
citadel-api HTTP server, scoped API key auth, rate limiting, real-time dashboard
# Clone
git clone https://github.com/mrcord77/rust_citadel.git
cd rust_citadel
# Set your admin API key
echo -n "your-secret-key" | sha256sum | cut -d' ' -f1
# Copy the hash
# Start
CITADEL_API_KEY_HASH=<paste-hash> docker compose up -d
# Verify
curl http://localhost:3000/health
# {"status":"ok","version":"0.2.0"}
لوحة التحكم: http://localhost:3000
يتطلب Rust 1.75+.
cargo build --release -p citadel-api
CITADEL_API_KEY="your-secret-key" CITADEL_SEED_DEMO=true ./target/release/citadel-api
import requests
api = "http://localhost:3000"
headers = {"Authorization": "Bearer your-secret-key"}
# Encrypt
r = requests.post(f"{api}/api/keys/{dek_id}/encrypt", headers=headers, json={
"plaintext": "sensitive data",
"aad": "record-001", # binds ciphertext to this record
"context": "patient-records" # domain separation
})
blob = r.json()
# Decrypt
r = requests.post(f"{api}/api/decrypt", headers=headers, json={
"blob": blob,
"aad": "record-001",
"context": "patient-records"
})
plaintext = r.json()["plaintext"]
انظر citadel_example.py للحصول على مثال عملي كامل مع ربط AAD وتدوير المفاتيح وسلوك تطبيق مدرك للتهديدات.
# Status
curl http://localhost:3000/api/status -H "Authorization: Bearer $KEY"
# List keys
curl http://localhost:3000/api/keys -H "Authorization: Bearer $KEY"
# Encrypt
curl -X POST http://localhost:3000/api/keys/$DEK_ID/encrypt \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"plaintext":"hello","aad":"test","context":"demo"}'
Root Key
└── Domain Key (per environment / business unit)
└── KEK — Key Encrypting Key (wraps DEKs)
└── DEK — Data Encrypting Key (encrypts application data)
يتبع NIST SP 800-57. يحصر كل مستوى نصف قطر الانفجار عند الاختراق — فالمفتاح DEK المسرّب لا يكشف مفاتيح DEK الأخرى لأن KEK منفصل.
| النطاق | الصلاحيات |
|---|---|
read | عرض المفاتيح والحالة والمقاييس ومستوى التهديد |
encrypt | تشفير وفك تشفير البيانات |
admin يتضمن جميع النطاقات الأخرى. مبدأ الامتياز الأقل: امنح لوحات المراقبة read، وخدمات التطبيقات read + encrypt، وأدوات الإدارة admin.
يراقب Citadel الأحداث الأمنية ويضبط سياسات المفاتيح تلقائيًا:
الأحداث التي ترفع مستوى التهديد: فشل المصادقة، وفشل فك التشفير، وأنماط الوصول السريعة، والتصعيد اليدوي. تتراجع النتيجة بمرور الوقت.
البناء الهجين: يُربط السرّان المشتركان معًا ويُمرَّران عبر HKDF. يبقى الأمان قائمًا إذا ظل أيٌّ من X25519 أو ML-KEM-768 آمنًا.
version[1] || suite_kem[1] || suite_aead[1] || flags[1] || kem_ct_len[2] ||
x25519_ephemeral_pk[32] || mlkem768_ct[1088] || nonce[12] || aead_ct[variable]
ذاتي الوصف، مُرقَّم الإصدار، بدون تفاوض (يمنع هجمات خفض الإصدار). انظر SPEC.md للمواصفات الكاملة.
subtle يمنع هجمات التوقيتZeroizing<T>، وتُصفَّر عند الإسقاطCitadel برنامج غير مُدقَّق.
يستخدم التنفيذ بدائيات معيارية من NIST عبر حزم Rust راسخة (ml-kem, x25519-dalek, aes-gcm, hkdf). لا ينفّذ أي خوارزميات تشفير. القيمة تكمن في التركيب الصحيح، وليس في رياضيات مبتكرة.
ما تم إنجازه:
ما لم يتم:
لا تستخدمه للبيانات الحساسة دون مراجعة مستقلة. انظر SECURITY.md للإبلاغ عن الثغرات.
مُخطَّط مقابل 34 ضابطًا من NIST SP 800-57: 26 مستوفى، 7 جزئي، 1 فجوة. انظر COMPLIANCE_MATRIX.md للخريطة الكاملة.
الأطر ذات الصلة: NIST SP 800-57 (إدارة المفاتيح)، CNSA 2.0 (الجدول الزمني لـ PQC)، HIPAA (تشفير البيانات المخزنة)، SOC 2 (ضوابط الوصول والتدقيق).
rust_citadel/
├── citadel-envelope/ # Core hybrid encryption library
│ ├── src/
│ │ ├── envelope.rs # Encrypt/decrypt operations
│ │ ├── kem.rs # X25519 + ML-KEM-768 hybrid KEM
│ │ ├── kdf.rs # HKDF-SHA256 key derivation
│ │ ├── wire.rs # Wire format encode/decode
│ │ ├── aead.rs # AES-256-GCM wrapper
│ │ ├── aad.rs # Additional authenticated data
│ │ ├── error.rs # Uniform error types
│ │ └── sdk.rs # High-level API
│ ├── tests/ # KAT + roundtrip tests
│ └── fuzz/ # Fuzz targets
├── citadel-keystore/ # Key lifecycle management
│ └── src/
│ ├── keystore.rs # Key CRUD + state machine
│ ├── policy.rs # Crypto-period policies
│ ├── threat.rs # Adaptive threat intelligence
│ ├── storage.rs # File-based key storage
│ ├── audit.rs # Integrity-chained audit log
│ └── types.rs # Key types and states
├── citadel-api/ # HTTP server
│ └── src/
│ ├── main.rs # API routes, auth, rate limiting
│ └── dashboard.html # Real-time security dashboard
├── citadel_example.py # Python integration example
├── Backup-Citadel.ps1 # Backup/restore tooling
├── docker-compose.yml # Development deployment
├── docker-compose-production.yml # Production with TLS
├── SPEC.md # Wire format specification
├── THREAT_MODEL.md # Security goals and attacker model
├── COMPLIANCE_MATRIX.md # NIST 800-57 control mapping
└── CITADEL_OVERVIEW.md # Commercial overview
هذا المشروع مرخّص بترخيص مزدوج:
إذا كنت تستخدم هذا البرنامج في بيئة تجارية أو لا ترغب في الامتثال لشروط AGPL، فيجب عليك الحصول على رخصة تجارية.
انظر COMMERCIAL_LICENSE.md للشروط التجارية.
النص الكامل لرخصة AGPL مُقدَّم في AGPL-3.0.txt وCOPYING.
التواصل: [email protected]
Andre Cordero — [email protected]
| نقطة النهاية | الطريقة | النطاق | الوصف |
|---|
/health | GET | — | فحص الصحة |
/api/status | GET | read | مستوى التهديد، عدد المفاتيح |
/api/metrics | GET | read | مقاييس الأمان |
/api/keys | GET | read | سرد جميع المفاتيح |
/api/keys | POST | manage | توليد مفتاح جديد |
/api/keys/:id | GET | read | الحصول على تفاصيل المفتاح |
/api/keys/:id/activate | POST | manage | تفعيل مفتاح معلّق |
/api/keys/:id/rotate | POST | manage | تدوير المفتاح (إصدار جديد) |
/api/keys/:id/revoke | POST | manage | إبطال المفتاح نهائيًا |
/api/keys/:id/destroy | POST | manage | إتلاف مادة المفتاح |
/api/keys/:id/encrypt | POST | encrypt | تشفير البيانات |
/api/decrypt | POST | encrypt | فك تشفير البيانات |
/api/threat | GET | read | تفاصيل استخبارات التهديدات |
/api/policies | GET | read | سياسات المفاتيح النشطة |
/api/auth/whoami | GET | read | معلومات مفتاح API الحالي |
/api/auth/keys | GET | admin | سرد مفاتيح API |
/api/auth/keys | POST | admin | إنشاء مفتاح API |
/api/auth/keys/:id | DELETE | admin | إبطال مفتاح API |
manage |
| إنشاء وتدوير وإبطال وإتلاف المفاتيح |
admin | كل ما سبق + إدارة مفاتيح API |
| المستوى | المحفّز | الاستجابة |
|---|
| منخفض | العمليات العادية | فترات تشفير قياسية |
| محروس | حالات شاذة بسيطة | تدوير أكثر إحكامًا قليلًا |
| مرتفع | أنماط مريبة | جداول تدوير مضغوطة |
| عالٍ | مؤشرات تهديد نشطة | تدوير إجباري، حدود استخدام مخفضة |
| حرج | تحت الهجوم | أقصى درجات التقييد |
| المكوّن | الخوارزمية | المعيار |
|---|
| تغليف المفاتيح (تقليدي) | X25519 ECDH | RFC 7748 |
| تغليف المفاتيح (ما بعد الكمومي) | ML-KEM-768 | FIPS 203 |
| تشفير البيانات | AES-256-GCM | NIST SP 800-38D |
| اشتقاق المفاتيح | HKDF-SHA256 | NIST SP 800-56C |
| المستند | الجمهور المستهدف |
|---|
| SPEC.md | مواصفات تنسيق الإرسال |
| THREAT_MODEL.md | الأهداف والافتراضات الأمنية |
| COMPLIANCE_MATRIX.md | خريطة الامتثال لمعيار NIST 800-57 |
| CITADEL_OVERVIEW.md | التموضع التجاري |
| SECURITY.md | الإبلاغ عن الثغرات |
| API_FREEZE.md | ضمانات استقرار API |
| DEPLOYMENT.md | دليل النشر الإنتاجي |
| QUICKSTART.md | بدء الاستخدام |