
محرك سياسات صغير، قابل للتدقيق، منتهٍ، حتمي
محرك سياسات صغير، قابل للتدقيق، منتهٍ، وحتمي.
لقد بنيت Gate0 لأنني سئمت من تصحيح سياسات RegEx في الإنتاج. أردت شيئًا مملًا، ومحدودًا، ومستحيل التعطل. إذا كنت تريد محرك سياسات مرنًا للأغراض العامة، فعليك استخدام OPA. إذا كنت تريد محرك سياسات يحقق أداءً أقل من 50 ميكروثانية في التقييم ولا تخصيصات ذاكرة في المسارات الحرجة للأمان، فأنت تريد Gate0.
تم تصميم Gate0 للبيئات ذات الضمان العالي حيث يجب أن يكون تقييم السياسات حتميًا ومقيدًا بالموارد. راجع سياسة الأمان للإبلاغ عن الثغرات، ونموذج الأمان لنموذج التهديد الكامل والضمانات الميكانيكية.
يستخدم Gate0 استراتيجية تقييم خطية، تجاوز الرفض. تتكون كل قاعدة من هدف (مطابقة المسار السريع) و شرط اختياري (منطق عميق).
+----------+ +-------------+ +--------+
| Ephemera | ----> | GateBridge | ----> | Gate0 |
| (Legacy) | | (Normalize) | | (Core) |
+----------+ +-------------+ +--------+
| ^
| |
+----(Shadow Log)----+
يتم التحقق من صحة وسلامة Gate0 ميكانيكيًا من خلال اختبارات الوحدة التي تغطي المنطق الأساسي وحالات الحافة، والاختبارات القائمة على الخصائص عبر proptest مع مئات السيناريوهات المولدة، والتحقق من MIRI لضمان تشغيل خالٍ من الذعر والسلوك غير المحدد. يتم اختبار أسوأ حالات الإدخال لضمان الإنهاء المحدود.
cargo test
cargo +nightly miri test --lib
يستخدم مقيم Gate0 مخازن مؤقتة ثابتة الحجم مخصصة في المكدس لضمان عدم وجود تخصيصات في الكومة أثناء التقييم. يستخدم التنفيذ الافتراضي MaybeUninit لتجنب تهيئة الفتحات غير المستخدمة، مما يؤدي إلى تكلفة تهيئة O(مستخدم) بدلاً من O(سعة).
يقتصر الكود غير الآمن على وحدة واحدة (fixed_stack.rs) مع ثوابت واضحة: العناصر 0..len مهيأة، والعناصر len..N غير مهيأة. يتم التحقق من جميع المسارات غير الآمنة باستخدام MIRI.
للمستخدمين الذين يفضلون عدم استخدام أي كود غير آمن، يوفر Gate0 SafeFixedStack خلف علامة الميزة safe-stack. يستخدم هذا البديل [T; N] مع T: Default + Copy ويقوم بتهيئة جميع الفتحات مقدمًا. المقايضة هي تهيئة O(سعة) في كل استدعاء تقييم.
cargo build --features safe-stack
يوفر كلا التنفيذين دلالات متطابقة ونفس ضمان عدم التخصيص أثناء التقييم. الخيار هو بين الأداء (O(مستخدم)) والسلامة المطلقة (O(سعة)). بالنسبة للمكدسات الصغيرة ذات أنواع Default الرخيصة مثل bool، يكون الفرق ضئيلًا.
تم تصميم Gate0 للعمل كنقطة قرار سياسة (PDP) داخل تطبيق مضيف أكبر. للحفاظ على الحتمية والحدود الصارمة، لا يعالج Gate0 الإدخال/الإخراج أو الشبكات أو دورات حياة الكائنات.
يفصل نمط التكامل الموصى به الاهتمامات عبر ثلاث طبقات. يدير التطبيق المضيف (بوابة API، خادم SSH، إلخ) الحالة والهوية والآثار الجانبية. تقوم طبقة المحول بتطبيع هذه الحالة المعقدة إلى بدائيات يفهمها Gate0 (سلاسل، قيم منطقية، أعداد صحيحة). يقوم Gate0 بتقييم السياق المبسط بشكل بحت ويعيد قرارًا.
Host Application (User Request)
│
▼
[Adapter Layer] → Pre-computes context (time, IP ranges, MFA status)
│ Converts "complex" to "primitive"
▼
[Gate0 Engine] → Pure evaluation (0 allocations, bounded stack)
│
▼
Decision::Allow / Deny
يشرح هذا الفصل لماذا لا يتضمن Gate0 مطابقات معقدة مثل فحوصات نطاق IP أو regex. تتعامل طبقة المحول مع المنطق الخاص بالمجال وتقدم لـ Gate0 سمات منطقية أو نصية محسوبة مسبقًا. يظل Gate0 صغيرًا وقابلًا للتدقيق وحتميًا.
use gate0::{Policy, Rule, Target, Request, ReasonCode};
let policy = Policy::builder()
.rule(Rule::allow(Target::any(), ReasonCode(1)))
.build()?;
let decision = policy.evaluate(&Request::new("alice", "read", "doc"))?;
assert!(decision.is_allow());
يحتوي دليل examples/ على سيناريوهات توضيحية تظهر أنماط الاستخدام الشائعة لـ Gate0:
SaaS API: منطق RBAC/متعدد المستأجرين القياسي. Zero Trust Network: التحكم في الوصول المستند إلى السمات (ABAC) مع فحوصات MFA والموقع. Complex Overrides: توضيح حل تعارض تجاوز الرفض.
قم بتشغيلها باستخدام:
cargo run --example saas_api
cargo run --example zero_trust_network
cargo run --example complex_overrides
تم تقييد Gate0 عن قصد ليبقى قابلًا للتنبؤ وعالي الأداء.
لا مطابقات معقدة: المنطق مثل Bit-Mask CIDR الكامل أو Regex المتقدم يظل مسؤولية طبقة المحول. يقوم Gate0 بتقييم البدائيات المعالجة مسبقًا.
لا تعدد خيوط أصلي: تنفيذ FFI الحالي لـ Python ليس آمنًا للخيوط. يجب على المستخدمين ذوي التوافقية العالية استخدام تعدد العمليات أو انتظار تثبيت FFI للمرحلة 4 والذي سيعالج الأقفال العامة.
لا قرارات متداخلة: ضمن فئة تأثير واحدة (السماح/الرفض)، يتم إرجاع أول قاعدة مطابقة فقط. حل التعارض يعتمد بشكل صارم على الترتيب.
المشاريع التالية توسع محرك Gate0 لحالات استخدام متخصصة.
gate0_dsl: لغة خاصة بالمجال أصلية بلغة Rust لـ Gate0 طورتها hardliner66. تستخدم ماكروات Rust لتوفير بنية نظيفة وقابلة للقراءة لتعريف السياسات مباشرة في الكود. يمكنك العثور على التنفيذ والتوثيق على hardliner66/gate0_dsl.
MIT