Towards Efficient Matching of Regexes with Backreferences using Register Set Automata (Technical Report)
تقترح هذه الورقة أتمتة مجموعات السجلات (RSAs)، وهي نموذج أتمتة جديد يوسع أتمتة السجلات بعمليات قائمة على المجموعات، لتمكين المطابقة الفعالة والحتمية والقوية للتعبيرات المنتظمة التي تحتوي على مراجع خلفية مع إثبات قابليتها للتقرير وقدرتها التعبيرية نظرياً.
تخيل أنك أمين مكتبة تحاول العثور على كتاب محدد في مكتبة ضخمة وفوضوية. لديك قاعدة بحث تقول: "ابحث عن جملة تبدأ بكلمة 'The'، وتتوسطها كلمة، وتنتهي بنفس الكلمة التي كانت في المنتصف تماماً."
في علوم الحاسوب، يسمى هذا التعبير النمطي (Regex) مع المرجع الخلفي (Backreference). الأمر يشبه إخبار الحاسوب: "تذكر ما رأيته هنا، وتأكد من رؤيته مرة أخرى لاحقاً."
الأزمة الحالية: معظم البرامج الحاسوبية التي تقوم بهذا النوع من البحث (مثل تلك الموجودة في متصفح الويب أو برامج الحماية) تستخدم طريقة تسمى التراجع (Backtracking).
التشبيه: تخيل محققاً يحاول حل جريمة عن طريق التخمين. يخمن مشتبهاً به، ثم يتحقق من حجة الغياب، وإذا فشلت، يعود للخلف، ويمسح التخمين، ويجرب مشتبهاً به آخر.
الخطر: إذا كانت القاعدة معقدة والنص طويلاً، فقد يضطر المحقق لتجربة ملايين الاحتمالات. إذا أرسل مخترق (Hacker) جملة طويلة مصممة خصيصاً، سيعلق المحقق في حلقة مفرغة من التخمينات. يتجمد الحاسوب، ويتعطل موقع الويب، وتتوقف الخدمة. يُسمى هذا هجوم ReDoS (حرمان الخدمة باستخدام التعبيرات النمطية).
الحل: الروبوت "جامع المجموعات"
يقترح مؤلفو هذه الورقة البحثية طريقة جديدة للبحث لا تعتمد على التخمين. لقد قدموا نوعاً جديداً من الآلات يسمى آلة مجموعة السجلات (Register Set Automata - RSA).
1. الطريقة القديمة مقابل الطريقة الجديدة
الآلة القديمة (آلة السجل - Register Automaton): تخيل روبوتاً لديه بضعة جيوب (سجلات). يمكنه وضع عنصر واحد فقط في الجيب. إذا رأى عنصراً جديداً، عليه أن يقرر: "هل أحتفظ بهذا أم بالقديم؟" لا يمكنه تذكر كل ما رآه، بل شيئاً واحداً فقط في كل مرة. هذا يجعل من الصعب التعامل مع قواعد "تذكر هذا" المعقدة دون اللجوء للتخمين.
الآلة الجديدة (آلة مجموعة السجلات - Register Set Automaton): تخيل روبوتاً لديه جيوب هي في الواقع سلال سحرية.
بدلاً من حمل عنصر واحد فقط، يمكن للسلة أن تحمل مجموعة كاملة من العناصر.
بينما يقرأ الروبوت النص، ليس عليه التخمين بشأن أي عنصر يتذكر؛ بل يقوم ببساطة بإلقاء كل عنصر جديد يراه داخل السلة.
لاحقاً، عندما يحتاج للتحقق مما إذا كان عنصر معين قد ظهر من قبل، فإنه يكتفي بالنظر داخل السلة. إذا كان العنصر موجوداً، فهذا رائع! وإذا لم يكن موجوداً، فهو ليس هناك.
2. لماذا يعد هذا تغييراً جذرياً؟
لأن الروبوت يستخدم "سلالاً" (مجموعات) بدلاً من الفتحات الفردية، فإنه يصبح حتمياً (Deterministic).
حتمي تعني: "هناك مسار واحد فقط للمضي قدماً. لا تخمين، ولا تراجع."
التشبيه: بدلاً من المحقق الذي يخمن ويمسح، تخيل حزاماً ناقلاً حيث يتم فرز كل عنصر تلقائياً في حاوية أثناء مروره. لن تضطر أبداً للعودة للخلف أو إعادة فرز أي شيء. السرعة تكون متوقعة وسريعة بغض بغض النظر عن طول النص.
"سحر" الورقة البحثية
تقوم الورقة بثلاثة أشياء رئيسية لجعل هذا العمل ممكناً:
اختراع السلة (نموذج RSA): لقد عرّفوا رسمياً هذه الآلة الجديدة التي يمكنها تخزين مجموعات من البيانات. وأثبتوا أنه بينما تعد هذه الآلات قوية، إلا أنها لا تزال قابلة للحل رياضياً (يمكننا معرفة ما إذا كانت ستنهي المهمة أم لا).
دليل الترجمة (التحويل لآلة حتمية): ابتكروا خوارزمية تأخذ آلة "تعتمد على التخمين" (الطريقة القديمة البطيئة) وتحولها تلقائياً إلى آلة "تحمل السلال" (الطريقة الجديدة السريعة).
ملاحظة: أحياناً تفشل عملية الترجمة إذا كانت القاعدة غريبة جداً، لكن بالنسبة للغالبية العظمى من القواعد الواقعية، فإنها تعمل بشكل مثالي.
اختبار السرعة: قاموا ببناء نموذج أولي للروبوت (أداة برمجية تسمى rsamatch) واختبروه مقابل أفضل الأدوات الموجودة حالياً.
النتيجة: عندما واجهت هجمات "ReDoS" التي تسبب تعطل الأنظمة الأخرى، لم يبدُ على روبوتهم أي مجهود. لقد أنهى المهمة في أجزاء من الثانية، بينما استغرقت الأدوات الأخرى دقائق أو ساعات (أو تعطلت تماماً).
التأثير في العالم الحقيقي
لماذا يجب أن تهتم؟
الأمن: يحب المخترقون استخدام قواعد "النسخ واللصق" هذه لتعطيل الخوادم. هذه الطريقة الجديدة تجعل تنفيذ هذه الهجمات أصعب بكثير.
السرعة: يمكن لمواقع الويب والتطبيقات استخدام ميزات بحث قوية دون القلق من أن قيام مستخدم بكتابة جملة طويلة قد يؤدي لتجميد النظام.
الموثوقية: إنها تحول موقف "ربما يعمل وربما يتعطل" إلى ضمان "سيعمل بسرعة في كل مرة".
ملخص التشبيه
المشكلة: محاولة العثور على زوج متطابق من الجوارب في غرفة مظلمة عن طريق اختيار جورب، ثم فحص الدرج، ثم إعادته، ثم تجربة جورب آخر. إذا كان لديك 1,000 جورب، فسيستغرق الأمر وقتاً طويلاً جداً.
الحل القديم: روبوت يختار جورباً، يفحصه، وإذا كان خاطئاً، يعيده ويجرب غيره. (بطيء، وعرضة للتعليق).
الحل الجديد (هذه الورقة): روبوت لديه حقيبة سحرية. بينما يلتقط الجوارب، فإنه يضعها جميعاً في الحقيبة. وعندما يحتاج للتحقق مما إذا كان جورب معين موجوداً، فإنه ينظر فقط في الحقيبة. لا يحتاج أبداً لإعادة أي شيء أو التخمين. إنه سريع، وموثوق، ومن المستحيل خداعه ليعلق في حلقة مفرغة.
لقد منح المؤلفون الحواسيب "حقيبة سحرية" للتعامل مع عمليات البحث النصية المعقدة، مما يجعل الإنترنت أكثر أماناً وأسرع.
إليك ملخص تقني مفصل للورقة البحثية بعنوان: "نحو مطابقة فعالة للتعبيرات المنتظمة مع المراجع الخلفية باستخدام أوتوماتا مجموعات السجلات (Register Set Automata)."
1. بيان المشكلة
تعد مطابقة التعبيرات المنتظمة (regex) أساسية للعديد من المهام الحوسبية (البحث، التحقق، والتحليل). ومع ذلك، فإن التعبيرات المنتظمة التي تحتوي على مراجع خلفية (backreferences) (مثل \1 الذي يشير إلى مجموعة تم التقاطها سابقاً) تفرض تحدياً كبيراً:
تدهور الأداء: تعتمد أدوات المطابقة القياسية (مثل PCRE2، وPython re، وJava java.util.regex) عادةً على خوارزميات التراجع (backtracking) للتعامل مع المراجع الخلفية. في أسوأ الحالات، يؤدي هذا إلى تعقيد زمني أسي، مما يتسبب في هجمات حرمان الخدمة عبر التعبيرات المنتظمة (ReDoS) حيث يمكن لمدخلات خبيثة أن تؤدي إلى انهيار الخادم.
الافتقار إلى النماذج الحتمية: تعتمد المطابقة الفعالة عادةً على أوتوماتا حتمية (DFAs) ذات تعقيد زمني خطي. ومع ذلك، لا يمكن لعمليات الحتمية (determinization) القياسية التعامل مع المراجع الخلفية لأن اللغات الناتجة عنها غالباً ما تكون غير منتظمة. تقوم أدوات المطابقة السريعة الموجودة (مثل RE2 وHyperScan) بتعطيل المراجع الخلفية صراحةً للحفاظ على الأداء.
الفجوة: لا يوجد نموذج أوتوماتا حتمي معروف يدعم المراجع الخلفية مع ضمان أداء متوقع يقترب من الخطية.
أ. النموذج الجوهري: أوتوماتا مجموعات السجلات (RSAs)
تقدم الورقة أوتوماتا مجموعات السجلات (RSAs)، وهي امتداد لأوتوماتا السجلات (RAs) القياسية.
الاختلاف الجوهري: في أوتوماتا RAs القياسية، يحمل السجل قيمة بيانات واحدة. أما في RSAs، فيحمل السجل مجموعة من قيم البيانات.
العمليات: تدعم RSAs ما يلي:
إضافة قيم المدخلات إلى السجلات.
دمج السجلات (اتحاد المجموعات).
مسح السجلات.
اختبار العضوية (التحقق مما إذا كانت قيمة المدخلات الحالية موجودة في مجموعة السجل).
أوتوماتا مجموعات السجلات الحتمية (DRSAs): يركز المؤلفون على المتغيرات الحتمية. تقوم DRSA بمعالجة المدخلات في تمريرة واحدة، مع الحفاظ على مجموعة من القيم الممكنة في سجلاتها، مما يسمح باختبار عضوية فعال دون الحاجة إلى التراجع (backtracking).
ب. مسار التجميع (The Compilation Pipeline)
طور المؤلفون سير عمل لتحويل التعبيرات المنتظمة ذات المراجع الخلفية إلى DRSAs:
من التعبير المنتظم إلى أوتوماتا السجلات (RA): باستخدام مشتقات أنتيميروف الجزئية (Antimirov's partial derivatives)، يقومون بتحويل تعبير منتظم يحتوي على مجموعات التقاط أحادية الحرف ومراجع خلفية إلى RA غير حتمية (NRA).
من RA إلى حتمية DRSA: يقترحون خوارزمية شبه (semi-algorithm) (الخوارزمية 1) لتحويل الـ NRA إلى DRSA.
التقنية: تستخدم بناء المجموعات الفرعية (subset construction) مشابهاً لـ Rabin-Scott، ولكنها تتبع فئات حجم السجل (0، 1، أو ω) للتعامل مع حواجز عدم المساواة بدقة.
التعامل مع عدم الحتمية: تستخدم تقنية "انهيار الاختيار" (choice collapse) عند اختبارات المساواة لضمان أنه إذا تم اختبار سجل ما للمساواة، فإن مجموعة القيم الممكنة تتقلص إلى قيمة واحدة، مما يمنع المطابقات الزائفة.
القيود: الخوارزمية هي خوارزمية شبه؛ قد تفشل (تعيد ⊥) إذا كانت الـ NRA المدخلة تتطلب تفاعلات أكثر تعقيداً مما يمكن لنموذج DRSA استيعابه (مثل بعض التقريبات الكارتيزية المفرطة).
ج. تحليل التعقيد
الأبجدية المحدودة: زمن المطابقة خطيO(∣w∣) بالنسبة لطول المدخلات ∣w∣.
الأبجدية غير المحدودة: زمن المطابقة تربيعيO(∣w∣2).
الحدود النظرية: أظهرت الورقة أن مسألة الفراغ (emptiness problem) لـ RSAs هي Fω-complete (أكرمانينية)، وهي أعلى بكثير من تعقيد PSPACE الخاص بـ RAs القياسية، مما يعكس زيادة القوة التعبيرية.
3. المساهمات الرئيسية
النموذج الرسمي (RSAs): تقديم أوتوماتا مجموعات السجلات، التي تعد تعميماً صارماً لـ RAs، وهي غير قابلة للمقارنة مع ARAs من حيث القوة التعبيرية.
خوارزمية الحتمية شبه (Determinization Semi-Algorithm): خوارزمية مبتكرة لتحويل فئة كبيرة من الـ NRAs (تحديداً تلك المشتقة من تعبيرات المراجع الخلفية أحادية الحرف) إلى DRSAs.
تجميع التعبيرات المنتظمة: بناء مشتق (derivative-based construction) لتجميع التعبيرات المنتظمة ذات المراجع الخلفية إلى NRAs، مما يكمل مسار العمل من التعبير المنتظم إلى الأوتوماتا الحتمية.
التحليل النظري:
إثبات أن مسألة الفراغ لـ RSAs هي مسألة قابلة للتقرير (Fω-complete). এতে إثبات أن RSAs غير قابلة للمقارنة مع نماذج الأوتوماتا الأخرى للكلمات ذات البيانات (مثل Pebble Automata أو History-Register Automata).
إثبات أن احتواء اللغة قابل للتقرير للفئة الفرعية المحددة من اللغات التي تولدها عملية الحتمية.
النموذج الأولي للتنفيذ (rsamatch): مطابق يعتمد على لغة Python ينفذ النهج المقترح.
4. النتائج التجريبية
قيم المؤلفون rsamatch مقابل أدوات المطابقة الحديثة (PCRE2، وPython re، وJava، و.NET، وgrep) باستخدام مجموعة بيانات مكونة من 12,046 تعبيراً منتظماً من العالم الحقيقي ومتجهات هجوم ReDoS التي تم إنشاؤها بواسطة أداة Rengar.
المقاومة لهجمات ReDoS:
كثيراً ما تعطلت الأدوات القياسية (تجاوزت 100 ثانية) أو استغرقت عشرات الثواني في نواقل الهجوم، مما يؤكد ضعفها.
نجح rsamatch في مطابقة الغالبية العظمى من المدخلات في أقل من ثانية واحدة، مما أظهر أداءً متوقعاً وخطياً.
بالنسبة لـ 1,246 تعبيراً مدعوماً، كان متوسط وقت التشغيل لـ rsamatch هو 0.16 ثانية والانحراف المعياري 0.30 ثانية، بينما كانت الانحرافات المعيارية للمنافسين في نطاق 3.0 ثانية إلى 6.4 ثانية.
التغطية:
نجحت خوارزمية الحتمية في 91% من التعبيرات المنتظمة التي تحتوي فقط على مراجع خلفية أحادية الحرف.
فشلت في التعبيرات المنتظمة ذات مجموعات الالتقاط المعقدة متعددة الحروف أو الأنماط الهيكلية المحددة التي تتجاوز قدرات نموذج DRSA الحالي.
المقايضة (Trade-off): بينما تضيف خطوة الحتمية عبئاً (overhead) خارجياً (متوسط 1.15 ثانية)، إلا أنه يتم استهلاكه (amortized) عبر العديد من عمليات المطابقة عبر الإنترنت، مما يجعل هذا النهج مناسباً جداً للتحقق من جانب الخادم.
5. الأهمية والأثر
الأمن: يوفر هذا العمل دفاعاً عملياً ضد هجمات ReDoS لفئة كبيرة من التعبيرات المنتظمة (المراجع الخلفية أحادية الحرف)، وهي شائعة في التطبيقات الواقعية. إنه ينقل مطابقة التعبيرات المنتظمة من نموذج عالي المخاطر (أسي) إلى نموذج قابل للتنبؤ بزمن حدودي.
التقدم النظري: يضع العمل تسلسلاً هرمياً جديداً للأوتوماتا فوق الأبجديات غير المحدودة، موضحاً أن السجلات القائمة على المجموعات توفر توازناً فريداً بين القدرة التعبيرية (التعامل مع المراجع الخلفية) والقابلية للتقرير (الحتمية وفحص الفراغ).
القابلية للتطبيق العملي: يثبت النموذج الأولي أنه من الممكن بناء محركات تعبيرات منتظمة قوية وعالية الأداء تدعم ميزات كانت تُعتبر سابقاً مكلفة للغاية للمعالجة الحتمية. يمكن أن يؤدي هذا إلى تنفيذ أكثر أماناً في أطر عمل الويب، وأنظمة كشف التسلل، وأدوات التحقق من البيانات.
في الختام، نجحت الورقة في سد الفجوة بين الاستعصاء النظري لمطابقة المراجع الخلفية والحاجة العملية لمطابقة تعبيرات منتظمة سريعة وآمنة من خلال تقديم أوتوماتا مجموعات السجلات واستراتيجية حتمية قابلة للتطبيق.