
يُضمّن ويكتشف علامات مائية مفتاحية قائمة على الأسلوب في شيفرة Python وJava وC++ المولّدة بواسطة LLM عبر إعادة كتابة CST، مع الحفاظ على الصحة الوظيفية ومقاومة هجمات تحرير الشيفرة.
| الميزة | العلامات المائية على مستوى الرمز (KGW, SWEET, Unigram, STONE, STA-1) | العلامات المائية اللاحقة (ACW, SrcMarker, RoSeMary) | ✨ SEW |
|---|---|---|---|
| الوصول | وقت فك التشفير (يؤثر على اختيار الرمز) | لاحق (يعيد كتابة الشيفرة المكتملة) | لاحق (يعيد كتابة الشيفرة المكتملة، مستقل عن النموذج) |
| الصحة الوظيفية | يغيّر البرنامج (مقايضة بين القابلية للكشف والصحة) | قد يكسر البرامج (Java/C++ pass@1 ≈ 12% لإعادة الكتابة العصبية) | محفوظة (pass@1 مساوٍ للشيفرة غير المُعلَّمة مائيًا) |
| القابلية للتنبؤ | — | أنماط متكررة (تُستعاد من 10 برامج مُعلَّمة مائيًا) | تعتمد على المفتاح والسياق (تختلف الاختيارات حسب بنية كل برنامج) |
| الكشف (TPR@FPR5%) | 14–60% | 31–98% | ⚡ 98.7–99.5% |
تدعم العلامات المائية على الشيفرة المُولَّدة بواسطة نماذج اللغة الكبيرة تتبع المصدر. تُقايض العلامات المائية التي تعدّل اختيار الرمز أثناء التوليد بين القابلية للكشف والصحة الوظيفية، كما أنها تتطلب التحكم في النموذج المُولِّد. أما الطرق اللاحقة فتُعلِّم مائيًا الشيفرة المكتملة بتحويلات محددة مسبقًا أو نماذج عصبية مُدرَّبة، لكن أنماطها المتكررة تجعل العلامة المائية قابلة للتنبؤ عبر البرامج، كما تُحتسب الأنماط الشائعة أصلًا في الشيفرة غير المُعلَّمة مائيًا كدليل على وجود العلامة المائية، مما يسبب كشوفًا خاطئة. يطرح SEW السؤال التالي: هل يمكن لأسلوب كتابة برنامج مُولَّد بالفعل أن يحمل علامة مائية صحيحة بحكم البناء، وصعبة التنبؤ، ومعايَرة مقابل الشيفرة المكتوبة بشريًا؟
يقوم SEW (Style-Encoded Watermarking) بتضمين العلامات المائية وكشفها في الشيفرة المُولَّدة بالفعل عبر ثلاثة مكونات:
x += 1 / x = x + 1، وrange(n) / range(0, n)، وif (c) s; / if (c) { s; }) على شجرة الصياغة الملموسة (CST). ويُحدَّد المتغير الذي يتخذه الموقع بواسطة مفتاح سري والسياق البنيوي للموقع.لا يحتاج الكشف سوى إلى الشيفرة المشتبه بها والمفتاح — وليس إلى النموذج المُولِّد، أو الشيفرة الأصلية، أو أي سجل لعملية التضمين.
✅ مستقل عن النموذج وصحيح بحكم البناء — يعيد SEW كتابة مواقع الأسلوب فقط حيث يكون للمتغيرين نفس الدلالة، لذا يعمل على مخرجات أي نموذج ويحافظ على pass@1 مساويًا لتلك الخاصة بالشيفرة غير المُعلَّمة مائيًا.
✅ دليل معايَر — اختبار بواسون-ثنائي الحد مع احتمالات أسلوب مُقدَّرة من الشيفرة المكتوبة بشريًا (حلول LeetCode، منفصلة عن بيانات التقييم) يُبقي الكشوف الخاطئة على الشيفرة البشرية منخفضة.
✅ متين وصعب الاستنتاج — يحافظ SEW على كشفه في ظل التنسيق، والفحص البرمجي (linting)، وإزالة التعليقات، وإعادة تسمية المتغيرات، ولا يستطيع خصم يراقب البرامج المُعلَّمة مائيًا استعادة اختياراته الأسلوبية بالطريقة التي يستعيد بها اختيارات الأسس اللاحقة.
النتيجة الرئيسية — الكشف على CodeContests (TPR@FPR5% / AUROC، %)، بمتوسط على ثلاثة نماذج لغوية كبيرة (Qwen3.5-9B، gemma-4-12B-it، gpt-oss-20b).
| النوع | الطريقة | Python | Java | C++ |
|---|---|---|---|---|
| على مستوى الرمز | KGW | 48.33 / 80.56 | 43.30 / 72.31 | 59.31 / 84.54 |
| SWEET | 59.92 / 85.18 | 41.19 / 76.56 | 60.01 / 87.24 | |
| Unigram | 57.45 / 88.97 | 36.54 / 71.37 | 47.05 / 71.13 | |
| STONE | 28.09 / 62.33 | 14.38 / 62.95 | 23.65 / 64.79 | |
| STA-1 | 35.26 / 66.26 | 20.93 / 61.48 | 44.71 / 73.72 | |
| لاحق | ACW | 90.10 / 95.05 | – | – |
| SrcMarker | 90.21 / 97.86 | 71.52 / 93.58 | 69.88 / 81.55 | |
| RoSeMary | 97.86 / 97.32 | 31.00 / 95.46 | 81.26 / 89.44 | |
| SEW | 99.49 / 99.64 | 98.70 / 98.99 | 99.22 / 99.38 |
الصحة الوظيفية (pass@1 للشيفرة المُعلَّمة مائيًا، %؛ الشيفرة غير المُعلَّمة مائيًا: 57.63 / 52.05 / 53.74).
| الطريقة | Python | Java | C++ |
|---|---|---|---|
| ACW | 56.00 | – | – |
| SrcMarker | 56.78 | 11.87 | 11.82 |
| RoSeMary | 56.39 | 11.71 | 11.52 |
| SEW | 57.63 | 52.05 | 53.74 |
المتانة أمام هجمات تحرير الشيفرة (TPR@FPR5%، %، بمتوسط على ثلاثة نماذج لغوية كبيرة وثلاث لغات؛ ACW: Python فقط).
| الطريقة | بدون هجوم | التنسيق | الفحص البرمجي | إزالة التعليقات | إعادة التسمية |
|---|---|---|---|---|---|
| KGW | 50.31 | 43.31 | 49.99 | 24.48 | 43.26 |
| SWEET | 53.71 | 49.79 | 53.00 | 19.34 | 48.83 |
| ACW | 90.10 | 0.51 | 93.56 | 89.35 | 3.17 |
| SrcMarker | 77.20 | 77.23 | 76.42 | 77.20 | 26.43 |
| RoSeMary | 70.04 | 67.00 | 69.42 | 70.04 | 22.26 |
| SEW | 99.14 | 95.57 | 98.99 | 99.14 | 99.14 |
تُظهر تجاربنا على CodeContests مع ثلاثة نماذج لغوية كبيرة وثلاث لغات برمجة ما يلي: