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

حاوية auth

قلب الأمان النابض في النظام. مسؤولة حصرياً عن توليد تذاكر الأمان (PolicyBadges) وتشفير السياسات في مساحة المستخدم (User Space) لتعزيز مبدأ العزل التام.

🔑Trusted AuthorityLevel 1
🎫PolicyBadge64-bit Token
#️⃣FNV-1aHashing
🔒IsolatedUser Space
🔄

فلسفة الأمان (User Space Flow)

🧠
لماذا في الـ User Space؟ نواة seL4 مُثبتة رياضياً (Mathematically Proven) بأنها آمنة تماماً وخالية من الثغرات. لذلك، إضافة أي منطق لإدارة صلاحيات الملفات داخل النواة سيزيد من تعقيدها ويُهدد هذا الإثبات الرياضي. بدلاً من ذلك، نستخدم النواة فقط لتمرير الرسائل (IPC)، ونبني نظام الصلاحيات بالكامل كحاوية معزولة في User Space!
seL4 Kernel (Kernel Space)

نواة مثبتة رياضياً: دورها يقتصر على تأمين قنوات الاتصال (IPC) بصرامة، ولا تفهم معنى "ملف" أو "صلاحية".

Boundary (العزل الصارم)
User Space (مساحة المستخدم)
App(ID: 0x4B2)
1Request Token
Returns Badge2
🔑Auth Vault
AppHas Badge
3IPC Msg + Badge
📁FS VaultVerifies Badge
💻

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

root@heroban:~/auth_vault_tty
bash
[Auth_Vault] ===========================================
[Auth_Vault] seL4-Vault Security & Policy Container v0.1
[Auth_Vault] ===========================================
[Auth_Vault] Container started. Initializing policies...
[Auth_Vault] Ready. Entering IPC event loop...
[Auth_Vault] ===========================================
> [Auth_Vault] Received Token request from App ID:
> [Auth_Vault] Token generated and sent.
_
🧬

تشريح تذكرة الأمان (PolicyBadge)

كيف يتم دمج (Packing) هوية التطبيق، الصلاحيات، وهاش المسار في 64-bit واحدة لتسريع التحقق (O(1) Verification).

16 bits (Top)App ID0x04B2
8 bitsPerm0x02
8 bitsPad0x00
32 bits (Bottom)FNV-1a Hash0xA59F123C
Final u64 Token0x04B20200A59F123C
🦀 Rustlibs/security-policy/src/lib.rs
impl PolicyBadge {
    pub fn new(app_id: u16, permission: Permission, path_hash: u32) -> Self {
        Self { app_id, permission, path_hash }
    }
    
    // ضغط البيانات في كلمة 64-bit واحدة
    pub fn to_badge_word(&self) -> u64 {
        ((self.app_id as u64) << 48) |
        ((self.permission as u8 as u64) << 32) |
        (self.path_hash as u64)
    }
}
📡

أوامر الاستدعاء (Message Tags)

0x100 (Request Token)
يستقبل app_id في mr[1] ويُولّد PolicyBadge بصلاحية ReadWrite لمسار /home/user ويُعيده في reply.mr[1].
_ (Unknown)
يلتقط أي أمر غير معروف ويرد بـ Err لحماية النظام من الطلبات الغير شرعية.
⚙️

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

# 01
🏛️

مصدر الثقة الأمني الوحيد (Single Trusted Authority)

تعمل كـ Trusted Authority مركزي — المصدر الوحيد في النظام المخوّل بإصدار تذاكر الأمان. لا يمكن لأي تطبيق الوصول لـ FS_Vault بدون الحصول على Badge صادر منها أولاً.

# 02
🛡️

إدارة الصلاحيات في الـ User Space

نظراً لأن نواة seL4 مثبتة رياضياً (Mathematically Proven) بأنها آمنة، فلا حاجة لتعقيد النواة بإدارة الصلاحيات. تتم إدارة جميع السياسات في الـ User Space عبر هذه الحاوية.

# 03
🎫

توليد تذاكر الأمان (Security Token Generation)

تُولّد PolicyBadge مُشفَّرة تحمل هوية التطبيق (app_id) وصلاحياته (Permission) وهاش المسار المسموح به (FNV-1a). تُعاد كرقم 64-bit واحد يحمل كل هذه المعلومات مضغوطة.

# 04
🔐

ترميز الصلاحيات في 64-bit (Badge Word Encoding)

تُرمّز كل صلاحية في كلمة 64-bit واحدة: الـ 16 bit العليا = app_id | الـ 8 bits التالية = نوع الصلاحية | الـ 32 bit السفلى = hash المسار. هذا يجعل التحقق من الـ Badge عملية بسيطة وسريعة جداً.

# 05
#️⃣

تشفير المسارات بخوارزمية FNV-1a

تستخدم خوارزمية FNV-1a 32-bit لتحويل مسارات الملفات (مثل /home/user) إلى أرقام hash ثابتة وفريدة. يجب أن يتطابق الـ hash بين ما تُصدره auth وما تتحقق منه FS_Vault لقبول أي طلب.

# 06
🔄

إدارة الذاكرة المتقدمة عبر Talc Allocator

تستخدم مكتبة talc و spin لتوفير Global Allocator بذاكرة ثابتة حجمها 256KB. يوفر Talc أداء عالي واستهلاك قليل جداً بدون الحاجة إلى نظام تشغيل، مما يناسب بيئة الـ User Space بشكل مثالي.

# 07
🔑

إدارة Capability Slots الأمنية

تعتمد على استقبال الطلبات مباشرة من التطبيقات وتتخاطب مع FS_Vault ضمن دورة تأمين Capability Slots لتمرير التوثيق.

# 08
⚠️

رفض الطلبات المجهولة (Unknown Request Rejection)

أي أمر خارج النطاق المعروف (عدا 0x100) يُرفض فوراً بـ MessageTag::Err. هذا يحمي النظام من أي محاولة للوصول عبر أوامر غير موثقة أو هجمات.

📁

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

🦀

src/main.rs

Entry Point
containers/auth/src/main.rs
~79 سطر

الملف الرئيسي لحاوية Auth_Vault. يحتوي على نقطة الدخول _start التي تُفوّض إلى rust_main، وحلقة الخدمة التي تستقبل طلبات التوثيق وتُولّد PolicyBadge مُشفَّرة.

🔍 أهم العناصر
Global AllocatorTalc::new(...) مخصص لـ VAULT_HEAP (256KB)
الأمر الوحيد0x100 (Request Token)
الردreply.mr[1] = badge.to_badge_word()
📦

Cargo.toml

Package Config
containers/auth/Cargo.toml
~17 سطر

ملف إعداد حزمة auth. يُعرّف 5 اعتماديات أساسية — تشمل talc و spin لتخصيص الذاكرة، و security-policy لسياسات الأمان.

🔍 أهم العناصر
الاسمauth (v0.1.0)
talc & spinلتخصيص الـ Heap بفعالية في بيئة no_std
security-policypath = "../../libs/security-policy"
📚

المكتبات والاعتمادات (Dependencies)

# 01
مكتبتنا

sel4-sys

libs/sel4-sys

ربط المستوى المنخفض مع نواة seL4. تُوفر نداءات النظام اللازمة للتواصل مع الـ Kernel فقط للمهام الأساسية.

# 02
مكتبتنا

ipc-sync

libs/ipc-sync

مكتبة داخلية لتوحيد بناء هياكل IpcMessage ولف عمليات Receiver.serve().

# 03
خارجية

talc

crates.io/talc

مكتبة OOM-safe، عالية الأداء وفعالة للـ Memory Allocation في بيئات الأنظمة المدمجة بدون قيود.

# 04
خارجية

spin

crates.io/spin

تستخدم لتوفير أقفال آمنة بدون الحاجة لخيوط النواة (Thread OS)، مما يسمح باستخدام Talc بأمان.

# 05
مكتبتنا

security-policy

libs/security-policy

تُعرّف هيكل PolicyBadge ودالة hash_path() بخوارزمية FNV-1a 32-bit.

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