Skip to content
HEROBAN-SEL4 SECURITY LAYER
🛡️100% User Space Isolated
🛡️

حاوية crypto

المزود المركزي لخدمات التشفير في بنية Heroban OS. تُقدم خدمات التشفير المتماثل والمصادق عليه (AEAD) وتقسيم الأسرار، وكل ذلك في بيئة Zero-Heap لضمان أمان كامل من هجمات الذاكرة.

🔐AEADChaCha20
Shared MemZero-Copy
🧩ShamirGF(256)
🔒IsolatedZero-Heap
💻

مخرجات الحاوية الحية

root@heroban:~/crypto_vault_tty
bash
[Crypto_Vault] Starting up...
[Crypto_Vault] IPC Buffer at: 0x600000
[Crypto_Vault] Endpoint Slot: 0x4
[Crypto_Vault] Entering IPC Event Loop...
--------------------------------------------------------
> [Crypto_Vault] handle_split_secret: START
> [Crypto_Vault] handle_split_secret: splitting
> [Crypto_Vault] handle_split_secret: DONE
_

التشفير عبر الذاكرة المشتركة (Zero-Copy)

توضيح لكيفية استخدام حاوية Crypto للذاكرة الثابتة (0x5F0000) للتعامل مع البيانات الضخمة (حتى 4000 بايت) دون استهلاك مكدس النظام أو استخدام ذاكرة ديناميكية.

🦀 Rustsrc/crypto_handlers_shared.rs
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.

MessageTag::Ping
يرد بـ MessageTag::Pong للتحقق من الاتصال وعمل الخادم.
MessageTag::Encrypt
يستقبل بيانات (Payload) عبر IPC، يشفرها بـ ChaCha20 ويضيف 16-byte Poly1305 Tag.
MessageTag::Decrypt
يستقبل بيانات عبر IPC، يتحقق من הـ Tag، وإن صحّ يفك تشفير الـ Payload ويعيده.
MessageTag::EncryptShared
يشفر بيانات كبيرة (حتى 4000 بايت) موجودة في الذاكرة المشتركة (0x5F0000) مع دعم المصادقة (AEAD).
MessageTag::DecryptShared
يفك التشفير للبيانات الموجودة في الذاكرة المشتركة (0x5F0000) بناءً على الطول المُعطى في mr[0].
MessageTag::SplitSecret
يستقبل Payload يحتوي على [N, K, Secret..] ويقوم بتقسيمه عبر Shamir (GF256) إلى N حصص ونسخها للذاكرة المشتركة.
MessageTag::ReconstructSecret
يقرأ K حصص من الذاكرة المشتركة، ويعيد بناء السر باستخدام استيفاء لاغرانج، ثم يعيده عبر IPC Payload.
_ (Unknown)
أي طلب غير معروف يطبع رسالة خطأ مع الـ Tag السداسي العشري (Hex) ويعيد MessageTag::Err(1).
⚙️

الوظائف والمهام الأساسية

# 01
🔒

التشفير المتماثل والمصادق (AEAD)

استخدام خوارزمية ChaCha20 مع Poly1305. يتم تشفير البيانات مع AAD ثابت (Sumer) لضمان حمايتها من التلاعب (Tampering) أثناء النقل.

# 02

دعم الذاكرة المشتركة (Shared Memory)

تجاوز حدود رسائل الـ IPC (التي لا تتخطى بضع بايتات) عبر استخدام كتلة ذاكرة على العنوان الثابت 0x5F0000 بحجم 4KB لنقل وتشفير البيانات الضخمة (Zero-Copy).

# 03
🧩

تقسيم الأسرار (Shamir's Secret Sharing)

تطبيق مخصص لخوارزمية شامير يعتمد على حقل GF(2^8) (بدون مكتبات خارجية). يدعم حتى 5 حصص (Shares) وأسرار تصل إلى 64 بايت.

# 04
🛡️

أمان بيئة التنفيذ (Zero-Heap & No_std)

الاعتماد على بيئة خالية تماماً من تخصيص الذاكرة الديناميكي غير الآمن، واستخدام مكدس مخصص (BOOT_STACK بحجم 64KB) لضمان أقصى درجات الأمان من هجمات الذاكرة.

📁

توثيق الملفات البرمجية المصدريّة

بنية مجلد `src` في مسار `Hasn-Sel4/containers/crypto_vault/src` وتحليل كل ملف سطرًا بسطر بناءً على قراءة دقيقة للكود المصدري الفعلي.

🦀

src/main.rs

Entry Point
containers/crypto_vault/src/main.rs
48 سطر

نقطة الدخول للحاوية. يقوم بتهيئة BOOT_STACK بحجم 64KB، تحميل talc_alloc، وطباعة عنوان الـ IPC Buffer والـ Endpoint Slot ثم تحويل التحكم إلى server::start_server().

🔍 أهم العناصر
Stack Size65536 بايت (64KB)
Panic Handlerيطبع [!] CRYPTO_VAULT PANIC! ويدخل في حلقة Yield
📡

src/server.rs

IPC Server
containers/crypto_vault/src/server.rs
28 سطر

يحتوي على حلقة الأحداث (Event Loop) الرئيسية باستخدام Receiver::serve. يستمع لـ 7 أنواع من الرسائل ويقوم بتوجيهها للمعالجات الصحيحة.

🔍 أهم العناصر
ReceiverReceiver::new(endpoint_slot, ipc_buffer)
Tags HandledPing, Encrypt, Decrypt, ... Shared & Secret
🔐

src/crypto_handlers.rs

Standard IPC Crypto
containers/crypto_vault/src/crypto_handlers.rs
69 سطر

معالجة عمليات التشفير وفك التشفير عبر حزم IPC (حجم صغير). يستخدم ChaCha20-Poly1305 مع AAD بقيمة "Sumer".

🔍 أهم العناصر
handle_encryptيضيف 16-byte Poly1305 Tag للمخرجات.
handle_decryptيتحقق بـ Poly1305::verify قبل فك التشفير.

src/crypto_handlers_shared.rs

Zero-Copy Crypto
containers/crypto_vault/src/crypto_handlers_shared.rs
100 سطر

تشفير ومصادقة البيانات التي تصل حتى 4000 بايت والموجودة مسبقاً في الذاكرة المشتركة 0x5F0000. يتم تنفيذ العملية In-Place.

🔍 أهم العناصر
Shared Memory0x5F0000
Chunk Processingيعالج البيانات كتل بحجم 16 بايت للمصادقة.
🧩

src/shamir_handlers.rs

Shamir GF(256)
containers/crypto_vault/src/shamir_handlers.rs
243 سطر

تطبيق لخوارزمية Shamir Secret Sharing باستخدام GF(2^8). يستقبل الطلب، يولد حصص (باستخدام LFSR RNG كاختبار)، ويكتب النتيجة في الذاكرة المشتركة، أو يستردها عبر استيفاء لاغرانج.

🔍 أهم العناصر
Max Secret64 bytes
Max Shares (N)5 حصص (Hardcoded Buffer)
🛠️

src/utils.rs

Utilities
containers/crypto_vault/src/utils.rs
6 سطور

يحتوي على دوال مساعدة بسيطة مثل print_hex() للتواصل مع واجهة طباعة النواة.

🔍 أهم العناصر
print_hexsel4_sys::invocations::print_hex_usize(val)
📚

المكتبات والاعتمادات (Cargo.toml)

الاعتمادات المذكورة في ملف `Cargo.toml` والمسؤولة عن تقديم الوظائف الأساسية.

# 01
مكتبتنا
⚙️

vault-crypto

libs/vault-crypto

مكتبة التشفير الأساسية (AEAD ChaCha20-Poly1305) المجهزة خصيصاً للعمل في بيئة Bare-metal الخالية من الذاكرة الديناميكية.

# 02
ليست مكتبتنا
⚙️

talc-alloc

libs/talc-alloc

مُخصص ذاكرة ديناميكية (Allocator) مبني على مكتبة Talc يُستخدم لتلبية احتياجات الذاكرة في بعض الحالات المتقدمة (رغم أن التصميم يعتمد بشكل رئيسي على Zero-Heap).

# 03
مكتبتنا
⚙️

ipc-sync

libs/ipc-sync

مكتبة داخلية للتعامل مع تمرير الرسائل بين الحاويات، تحتوي على Receiver لمعالجة الـ Endpoints.

# 04
مكتبتنا
⚙️

sel4-sys

libs/sel4-sys

لتوجيه نداءات النظام (Syscalls) للـ Microkernel مثل seL4_Yield() والطباعة.

جميع الحقوق محفوظة © 2026 Qtoom