
CAWODOG هو مشروع إثبات مفهوم يوضح كيفية حماية نماذج الذكاء الاصطناعي المبنية على Python عند تشغيلها على آلات صناعية غير متصلة بالإنترنت. عبر ثلاث خطوات متدرجة (0 → 2)، يعرض المشروع: * كيف يمكن إجراء هندسة عكسية بسهولة لتطبيق ذكاء اصطناعي بسيط مبني على Python، * كيف يمكن للمهاجمين استخراج النماذج من الملفات الثنائية المعبأة، و * كيفية تحصين عمليات نشر الذكاء الاصطناعي باستخدام تحويل ONNX وتشفير النماذج ومحرك تشغيل منفصل. يستخدم إثبات المفهوم نموذجًا مرحًا لكشف الكلاب («مجموعة هيمنة عالم القطط») لتوضيح مفاهيم حماية الملكية الفكرية الصناعية الحقيقية المطبقة على أنظمة التحكم المعتمدة على الذكاء الاصطناعي، مثل منصة StarX من Starlinger. وهو بمثابة تنفيذ مرجعي للورقة التقنية المصاحبة «تحصين الملكية الفكرية لـ Python لعمليات نشر الذكاء الاصطناعي الصناعي دون اتصال بالإنترنت».
CAWODOG (مجموعة هيمنة عالم القطط) هو إثبات مفهوم مرح ولكن واقعي لـ حماية نماذج الذكاء الاصطناعي القائمة على بايثون المثبتة على أجهزة صناعية دون اتصال بالإنترنت.
الفكرة الأساسية:
خذ مصنّف صور صغيرًا يكتشف الكلاب (وهي «عدو» CAWODOG)، وغلّفه في تطبيق بسيط، ثم حصّن النشر تدريجيًا ضد سرقة الملكية الفكرية.
صُمم إثبات المفهوم ليكون مكمّلًا لورقة بيضاء داخلية حول:
تحصين الملكية الفكرية لبايثون في عمليات نشر الذكاء الاصطناعي الصناعي دون اتصال بالإنترنت
يوضح هذا المستودع خطوة بخطوة:
.
├── 0/ # Step 0 – Unhardened baseline
│ ├── model/ # Training + inference code
│ ├── app/ # Gradio-based web UI
│ ├── requirements.txt
│ └── (optional) build / run helpers
│
├── 1/ # Step 1 – Packaged with Nuitka (Level 1)
│ ├── app/ # Same UI, adapted entrypoint
│ ├── model/ # Same model logic as step 0
│ ├── build.sh # Nuitka onefile build script
│ └── requirements.txt
│
├── 2/ # Step 2 – Encrypted ONNX model (Level 2)
│ ├── model/ # Training + ONNX export + encryption
│ ├── engine/ # Engine module (decryption + ONNX runtime + scoring)
│ ├── app/ # UI calling the engine only
│ ├── hardening/ # Encryption key + utilities (dev only)
│ ├── build.sh # Nuitka onefile build script
│ └── requirements.txt
│
└── attacker/ # Attacker tooling (optional, for demo)
├── run_and_extract.sh # Finds Nuitka temp dir and lists contents
├── steal_model.sh # Copies model file out of extracted payload
└── use_stolen_model.py# Uses stolen model in a separate script
python -m venv .venv)git وpip ومعرفة أساسية بسطر الأوامرتتطلب معظم الخطوات:
pip install -r requirements.txt
المجلد: 0/
الهدف: تطبيق بايثون عادي مع نموذج مُدرَّب وواجهة ويب بسيطة. بدون أي حماية.
dog مقابل not_dogmodel_training.py) الذي:
data/dog وdata/not_dog تلقائيًا إلى تدريب/تحققmodel/models/dog_model.ptmodel_inference.py) الذي:
dog_model.ptapp/gradio_app.py) الذي:
من جذر المستودع:
cd 0
python -m venv .venv
source .venv/bin/activate # on Windows: .venv\Scripts\activate
pip install -r requirements.txt
جهّز البيانات:
0/data/
dog/
<dog images>.jpg
not_dog/
<non-dog images>.jpg
درّب النموذج:
python -m model.model_training
سيُنشئ هذا شيئًا مثل:
model/models/dog_model.pt
شغّل تطبيق Gradio:
python -m app.gradio_app
افتح الرابط المطبوع (الافتراضي http://127.0.0.1:7860) واختبره باستخدام الصور.
.pt).هذه هي الصورة «قبل».
المجلد: 1/
الهدف: تغليف التطبيق في ملف تنفيذي واحد باستخدام Nuitka.
الأثر الأمني: يجعله يبدو كمنتج، لكنه لا يحمي الملكية الفكرية.
app/main.py أو cawodog_app.py)build.sh) الذي:
--standalone و--onefiledog_model.pt)cawodog_step1_nuitka).cd 1
source .venv/bin/activate
./build.sh
بعد البناء، ستحصل على شيء مثل:
./cawodog_step1_nuitka
تشغيله سيطلق واجهة Gradio كما في السابق، لكن الآن من ملف تنفيذي واحد.
attacker/)يُظهر مجلد attacker كيف يمكن للمهاجم:
$TMPDIRdog_model.pt من ذلك المجلدuse_stolen_model.py لتشغيل التنبؤات خارج التطبيقالخلاصة الرئيسية: المستوى 1 ليس حماية مجدية. إنه تغليف، وليس أمانًا.
المجلد: 2/
الهدف: تقديم حماية حقيقية للملكية الفكرية على مستوى النموذج.
الأثر الأمني: لا يمكن للمنافسين استخدام النموذج بمجرد نسخ ملف.
تحويل تنسيق النموذج
dog_model.pt → dog_model.onnx باستخدام تصدير ONNX من PyTorch.تشفير النموذج
dog_model.onnx باستخدام AES-GCM إلى dog_model.enchardening/dev_model.key (لأغراض إثبات المفهوم)تجريد المحرك
تقديم engine/core.py الذي:
dog_model.enc في وقت التشغيلpredict_is_dog() وenemy_score()الواجهة كمنسّق (Orchestrator)
app/gradio_app.py يرى ملفات النموذج الخام أو التفاصيل الداخلية.cd 2
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
درّب النموذج (أو أعد استخدامه) (نفس الخطوة 0، لكن داخل 2/):
python -m model.model_training
صدّر إلى ONNX:
python -m model.export_to_onnx
# produces model/models/dog_model.onnx
شفّر نموذج ONNX:
python -m hardening.encrypt_model
# produces model/models/dog_model.enc and hardening/dev_model.key
ابنِ باستخدام Nuitka (عبر build.sh):
./build.sh
سيتم طباعة مفتاح عند اكتمال البناء. يجب تعيين متغير البيئة CAWODOG_MODEL_KEY_HEX إلى ذلك المفتاح حتى يتمكن البرنامج من تحميل النموذج المشفّر. أي مفتاح مختلف سيؤدي إلى خطأ.
شغّل الملف التنفيذي onefile الناتج. يجب أن تتصرف الواجهة بنفس السلوك السابق.
dog_model.enc) مشفّر.dog_model.enc مباشرة في PyTorchما يزال غير مرتبط بجذر ثقة عتادي، والمهندس العكسي الماهر يمكنه في النهاية إعادة بناء النموذج، لكن العتبة أعلى بكثير من الخطوة 1.
يركز إثبات المفهوم هذا على:
لا يدّعي أنه:
التدفق السردي النموذجي:
الخطوة 0 – خط الأساس
الخطوة 1 – التغليف (Nuitka Onefile)
attacker/ لإظهار كيف لا يزال من السهل سرقة النموذج.الخطوة 2 – ONNX المشفّر