Filament: Denning-Style Information Flow Control for Rust
تُعد Filament مكتبة للتحكم في تدفق المعلومات الساكنة بلغة Rust بأسلوب Denning، حيث تحقق إنفاذًا أمنيًا دقيقًا دون تعديلات في المترجم عبر الاستفادة من استنتاج النوع للتدفقات الصريحة، وبنية `pc_block!` خفيفة الوزن للتدفقات الضمنية، وماكرو متخصصات للتوافق السلس مع المكتبات، كل ذلك مع تقديم نموذج برمجي أكثر سماحية من الحلول الحالية مثل Cocoon.
البحث الأصلي مرخَّص بموجب CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). هذا شرح مولَّده بالذكاء الاصطناعي للبحث أدناه. لم يكتبه المؤلفون ولم يصادقوا عليه. وللتحقق من الدقة التقنية، يرجى الرجوع إلى البحث الأصلي. اقرأ إخلاء المسؤولية الكامل
تخيل أنك تدير بنكاً عالي الأمن. لديك نوعان من الأموال: النقود العامة (يمكن للجميع رؤيتها ولمسها) والذهب السري (لا يمكن إلا لمدير الخزنة التعامل معه).
في عالم برمجة الحاسوب، يسمى هذا التحكم في تدفق المعلومات (IFC). والهدف هو التأكد من أن "الذهب السري" لا يتسرب بالخطأ إلى سجل "النقود العامة"، ومنع أي شخص من استخدام الذهب السري للتأثير على القرارات العامة بطريقة مخادعة.
لفترة طويلة، كان بناء نظام للقيام بذلك في لغات البرمجة الحديثة (مثل Rust) يشبه محاولة بناء خزنة بنك جديدة داخل قطار متحرك. كان عليك إما:
- إيقاف القطار وإعادة بناء المحرك (تعديل المترجم/Compiler)، وهو أمر مكلف وبطيء.
- وضع الذهب في صندوق صغير وصلب لا يمكنك فتحه إلا في غرف محددة (نهج "مستوى الكتلة" أو block-level)، مما يجعل مهام العمل المصرفي العادية محبطة للغاية ومقيدة.
Filament هي أداة جديدة تحل هذه المشكلة دون الحاجة لإيقاف القطار أو بناء صندوق صلب. إنها تشبه إعطاء كل عملة معدنية "علامة سحرية غير مرئية" يمكن لنظام أمن البنك قراءتها فوراً، دون الحاجة لإعادة بناء البنك بأكمله.
إليك كيف يعمل Filament، باستخدام تشبيهات من الحياة اليومية:
1. المشكلة في الطريقة القديمة (Cocoon)
قبل Filament، كانت هناك أداة تسمى Cocoon. تخيل أن Cocoon تشبه سياسة "الغرفة السرية".
- إذا أردت لمس الذهب السري، يجب عليك الدخول إلى غرفة سرية.
- داخل الغرفة، لا يمكنك التحدث مع أي شخص خارجها، ولا يمكنك تغيير الأثاث (الآثار الجانبية/side effects)، ولا يمكنك إلا إخراج ما جلبته معك.
- الإزعاج: إذا كنت تريد فقط إجراء عملية حسابية بسيطة بالذهب، كان عليك حمله إلى الغرفة، وإجراء الحساب، ثم حمله للخارج. إذا أردت استخدام أداة من الردهة العامة (مكتبة خارجية)، كان عليك تجريد الذهب من علامة "السري"، واستخدام الأداة، ثم الأمل في أن تتذكر إعادة العلامة إليه. إذا نسيت، تسرب الذهب!
2. حل Filament: "العلامات الذكية"
غير Filament قواعد اللعبة. بدلاً من وضع الذهب في غرفة، وضعت علامة ذكية وغير مرئية على كل قطعة من البيانات.
- "الملصق" (العلامة): كل قطعة من البيانات في برنامجك لها مستوى أمني (عام، سري، سري للغاية).
- "التدفق" (قواعد المرور): يتحقق النظام تلقائياً: "هل يمكن لهذا الذهب السري أن يتدفق إلى هذا المنصب العام؟" إذا كانت الإجابة لا، يرفض البرنامج التشغيل.
- السحر: يفعل النظام ذلك باستخدام استنتاج النوع (Type Inference). فكر في الأمر كأنه مساعد ذكي يعرف القواعد جيداً لدرجة أنك لست بحاجة لكتابتها لكل خطوة. أنت فقط تقول: "هذا سري"، والنظام يستنتج الباقي.
3. ثلاث حيل رائعة يستخدمها Filament
أ. "كتلة PC" (إشارة المرور)
أحياناً، يعتمد قرار ما على شيء سري.
- مثال: "إذا كان مبلغ الذهب السري أكثر من 1000 دولار، أشعل الضوء الأحمر".
- في الطريقة القديمة، كان يجب أن تكون الغرفة بأكملها "غرفة سرية" لأن القرار كان سرياً.
- حيلة Filament: تستخدم بنية خاصة تسمى
pc_block!. إنها تشبه إشارة المرور التي يتغير لونها بناءً على السر.- إذا كان الضوء أحمر (سري)، يقول النظام: "حسناً، أي شيء تفعله الآن يجب أن يكون سرياً أيضاً".
- بمجرد اتخاذ القرار وتحول الضوء إلى الأخضر (عام)، يخفف النظام القيود. أنت لا تحتاج إلى غرفة كاملة؛ بل تحتاج فقط لأن تكون حذراً في اللحظة التي يكون فيها الضوء أحمر. هذا يوفر قدراً هائلاً من العناء.
ب. "الغلاف السحري" (fcall! و mcall!)
غالباً ما يستخدم المبرمجون أدوات بناها آخرون (مثل تطبيق حاسبة أو قاعدة بيانات). هذه الأدوات لا تعرف شيئاً عن الذهب السري؛ هي تعرف فقط الأرقام العادية.
- الطريقة القديمة: كان عليك تجريد الذهب السري من علامته، وإعطاء الرقم للأداة، ثم تحاول يائساً تذكر إعادة العلامة إليه. إذا نسيت، ضاع الذهب.
- حيلة Filament: تستخدم ماكرو
fcall!وmcall!. فكر في هذه كـ قفازات سحرية.- تضع الذهب السري داخل القفاز.
- تسلم القفاز للأداة.
- تقوم الأداة بعملها.
- عندما تنتهي الأدا، تقوم القفازات السحرية تلقائياً بإعادة علامة الذهب السري إلى النتيجة. لن تضطر أبداً للقلق بشأن نسيان إعادة الملصق.
ج. وعد "عدم الحاجة للمترجم"
أكبر فوز هو أن Filament يعمل مع لغة Rust القياسية. لست بحاجة لتوظيف فريق من المهندسين لإعادة بناء المترجم الخاص بك. إنها مكتبة تضيفها فقط إلى مشروعك، مثل إضافة ملحق (plugin) إلى لعبة فيديو.
4. لماذا هذا مهم؟
اختبرت الورقة البحثية Filament على تطبيقات واقعية (مثل لعبة Battleship، وعميل Spotify، ونظام بريد إلكتروني آمن).
- جهد أقل: كتب المبرمجون "ملاحظات أمنية" (annotations) أقل مقارنة بالطريقة القديمة.
- حرية أكبر: لم تجبرهم على استخدام "مخارج طوارئ" (حيل) لإنجاز مهامهم.
- السرعة: لم تؤدِ إلى إبطاء الكمبيوتر. في الواقع، كانت سريعة تقريباً مثل كتابة كود بدون أي فحوصات أمنية على الإطلاق.
الخلاصة
Filament يشبه ترقية أمن البنك من "إغلاق المبنى بأكمله" إلى "إعطاء كل موظف شارة ذكية".
- الشارة تعرف بالضبط أين يُسمح لك بالذهاب.
- لا تمنعك من أداء عملك.
- لا تتطلب إعادة بناء البنك.
- والأهم من ذلك، تضمن بقاء الذهب السري سرياً، حتى عندما تستخدم أدوات من الردهة العامة.
إنها تجلب أمن المستوى العسكري إلى البرمجة اليومية، مما يجعلها عملية، سهلة الاستخدام، وآمنة.
غارق في أبحاث مجالك؟
تصلك نشرة يومية بأحدث الأبحاث المطابقة لكلماتك البحثية المفتاحية — مع ملخصات تقنية، بلغتك.