
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 المشفّر
dog_model.enc لم يعد كافيًا.يمكنك بعد ذلك مناقشة مستويات مستقبلية إضافية (غير مطبَّقة هنا بعد):
MIT License
Copyright (c) 2025 Daniel Eder
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.