مخرجات الحاوية الحية
التشفير عبر الذاكرة المشتركة (Zero-Copy)
توضيح لكيفية استخدام حاوية Crypto للذاكرة الثابتة (0x5F0000) للتعامل مع البيانات الضخمة (حتى 4000 بايت) دون استهلاك مكدس النظام أو استخدام ذاكرة ديناميكية.
pub fn handle_encrypt_shared(msg: &IpcMessage) -> IpcMessage {
let len = msg.mr[0] as usize;
if len > 4000 { return IpcMessage::error(5); }
// ربط الذاكرة المشتركة
let shared_mem = unsafe { core::slice::from_raw_parts_mut(0x5F0000 as *mut u8, 4096) };
// ... [تهيئة مفاتيح التشفير] ...
let mut cipher = vault_crypto::chacha20::ChaCha20::new(&key, &nonce, 1);
// التشفير في المكان (In-Place) لعدم تجاوز مساحة الذاكرة
cipher.process(&mut shared_mem[..len]);
// ... [توليد Tag الـ Poly1305] ...
shared_mem[len..len + 16].copy_from_slice(&tag);
IpcMessage::with_words(MessageTag::Ok, (len + 16) as usize, 0, 0, 0)
}أوامر الاستدعاء (IPC Message Tags)
هذه هي الأوامر التي تدعمها حاوية التشفير عبر نظام تمرير الرسائل الخاص بـ seL4.
الوظائف والمهام الأساسية
التشفير المتماثل والمصادق (AEAD)
استخدام خوارزمية ChaCha20 مع Poly1305. يتم تشفير البيانات مع AAD ثابت (Sumer) لضمان حمايتها من التلاعب (Tampering) أثناء النقل.
دعم الذاكرة المشتركة (Shared Memory)
تجاوز حدود رسائل الـ IPC (التي لا تتخطى بضع بايتات) عبر استخدام كتلة ذاكرة على العنوان الثابت 0x5F0000 بحجم 4KB لنقل وتشفير البيانات الضخمة (Zero-Copy).
تقسيم الأسرار (Shamir's Secret Sharing)
تطبيق مخصص لخوارزمية شامير يعتمد على حقل GF(2^8) (بدون مكتبات خارجية). يدعم حتى 5 حصص (Shares) وأسرار تصل إلى 64 بايت.
أمان بيئة التنفيذ (Zero-Heap & No_std)
الاعتماد على بيئة خالية تماماً من تخصيص الذاكرة الديناميكي غير الآمن، واستخدام مكدس مخصص (BOOT_STACK بحجم 64KB) لضمان أقصى درجات الأمان من هجمات الذاكرة.
توثيق الملفات البرمجية المصدريّة
بنية مجلد `src` في مسار `Hasn-Sel4/containers/crypto_vault/src` وتحليل كل ملف سطرًا بسطر بناءً على قراءة دقيقة للكود المصدري الفعلي.
نقطة الدخول للحاوية. يقوم بتهيئة BOOT_STACK بحجم 64KB، تحميل talc_alloc، وطباعة عنوان الـ IPC Buffer والـ Endpoint Slot ثم تحويل التحكم إلى server::start_server().
65536 بايت (64KB)يطبع [!] CRYPTO_VAULT PANIC! ويدخل في حلقة Yieldيحتوي على حلقة الأحداث (Event Loop) الرئيسية باستخدام Receiver::serve. يستمع لـ 7 أنواع من الرسائل ويقوم بتوجيهها للمعالجات الصحيحة.
Receiver::new(endpoint_slot, ipc_buffer)Ping, Encrypt, Decrypt, ... Shared & Secretمعالجة عمليات التشفير وفك التشفير عبر حزم IPC (حجم صغير). يستخدم ChaCha20-Poly1305 مع AAD بقيمة "Sumer".
يضيف 16-byte Poly1305 Tag للمخرجات.يتحقق بـ Poly1305::verify قبل فك التشفير.تشفير ومصادقة البيانات التي تصل حتى 4000 بايت والموجودة مسبقاً في الذاكرة المشتركة 0x5F0000. يتم تنفيذ العملية In-Place.
0x5F0000يعالج البيانات كتل بحجم 16 بايت للمصادقة.تطبيق لخوارزمية Shamir Secret Sharing باستخدام GF(2^8). يستقبل الطلب، يولد حصص (باستخدام LFSR RNG كاختبار)، ويكتب النتيجة في الذاكرة المشتركة، أو يستردها عبر استيفاء لاغرانج.
64 bytes5 حصص (Hardcoded Buffer)يحتوي على دوال مساعدة بسيطة مثل print_hex() للتواصل مع واجهة طباعة النواة.
sel4_sys::invocations::print_hex_usize(val)المكتبات والاعتمادات (Cargo.toml)
الاعتمادات المذكورة في ملف `Cargo.toml` والمسؤولة عن تقديم الوظائف الأساسية.
vault-crypto
مكتبة التشفير الأساسية (AEAD ChaCha20-Poly1305) المجهزة خصيصاً للعمل في بيئة Bare-metal الخالية من الذاكرة الديناميكية.
talc-alloc
مُخصص ذاكرة ديناميكية (Allocator) مبني على مكتبة Talc يُستخدم لتلبية احتياجات الذاكرة في بعض الحالات المتقدمة (رغم أن التصميم يعتمد بشكل رئيسي على Zero-Heap).
ipc-sync
مكتبة داخلية للتعامل مع تمرير الرسائل بين الحاويات، تحتوي على Receiver لمعالجة الـ Endpoints.
sel4-sys
لتوجيه نداءات النظام (Syscalls) للـ Microkernel مثل seL4_Yield() والطباعة.
