
تنفيذ بحثي لهجوم الثقب الأسود (Black-Hole Attack) الذي يسمّم فهارس قواعد البيانات المتجهية عبر خاصية المركزية المدفوعة بالhubness، مع خطوط معالجة FAISS وتقييم دفاعات الكشف والتخفيف.
يحتوي هذا المستودع على التنفيذ المرافق لورقة Black-Hole Attack from Embedding Space Defects. يستغل هجوم الثقب الأسود عيبًا هندسيًا في فضاءات التضمين عالية الأبعاد — المركزية المدفوعة بالمحورية (centrality-driven hubness) — لتسميم قواعد البيانات المتجهية: عدد صغير من المتجهات الخبيثة المحقونة بالقرب من مراكز العناقيد تصبح أقرب الجيران لجزء كبير من استعلامات المستخدمين، دون الحاجة إلى أي معرفة بتلك الاستعلامات.
faiss-gpu؛ أو CPU: faiss-cpu)scripts/encode_*.py؛ خط أنابيب الهجوم نفسه لا يستورد torch)تثبيت التبعيات الأساسية:
pip install numpy pandas pyarrow scikit-learn tqdm faiss-gpu
# Download BEIR datasets
bash scripts/download_data.sh
# Encode to vectors + build FAISS indexes
bash scripts/process_data.sh
عدّل مصفوفتي MODELS وDATASETS في كل سكربت لاختيار نماذج أو مجموعات بيانات محددة.
# Full-Export Attack on HotpotQA with Contriever
python run.py --model contriever --src hotpotqa
هذا يشغّل خط الأنابيب الكامل: تحميل المتجهات → التجميع العنقودي → توليد المتجهات الخصامية → الحقن → بناء الفهرس المسموم → تقييم MO@10 وASR وFPR.
| العَلَم | الافتراضي | الوصف |
|---|---|---|
--model / --src | contriever / hotpotqa | نموذج التضمين ومجموعة البيانات المصدر |
--mode | default | default (نفس مجموعة البيانات) أو transfer (عبر مجموعات البيانات) |
--preprocess | default | default أو query_trans أو multi_query_transfer |
--cluster | kmeans | kmeans أو minibatch_kmeans أو faiss_gpu |
--num-copies / --epsilon | 10 / 0.001 | عدد النسخ المُشوَّشة لكل مركز عنقودي؛ مقدار التشويش |
--eval-k / --sample-queries | 10 / 3000 | تقييم أعلى‑k؛ عدد الاستعلامات المُعيَّنة |
--eval-index-types | FlatIP | أنواع الفهارس المراد تقييمها: FlatIP وHNSW وIVF وIVFPQ |
--eval-runners | evaluate | خطوات التقييم: evaluate وevaluate_recall وevaluate_defense وevaluate_defense_performance_loss وevaluate_mitigation_defense وevaluate_mitigation_performance_loss |
--result-subdir | تلقائي | دليل فرعي تحت data/result/ لملف JSON الناتج |
تتوافق مسارات الهجوم الأربعة الموصوفة في الورقة مع الاستدعاءات التالية:
| المسار | الأمر |
|---|---|
| (1) تصدير قاعدة البيانات الكامل | python run.py --mode default --preprocess default |
| (2) تصدير قاعدة البيانات الجزئي | تصدير جزء من المتجهات خارجيًا قبل التجميع العنقودي؛ وبقية خط الأنابيب مطابقة لـ (1) |
| (3) هجوم مجموعة البيانات البديلة | python run.py --mode transfer --preprocess multi_query_transfer --victim <dataset> |
| (4) تسميم مجموعات البيانات العامة المُضمَّنة مسبقًا | تعديل ملفات .npy لمجموعة بيانات مُضمَّنة مسبقًا وإعادة رفعها إلى HuggingFace |
بالنسبة لـ (3)، يبني المهاجم متجهات خبيثة من استعلامات جميع مجموعات البيانات الأخرى ويحقنها في الضحية. يجب أن تكون ملفات .npy الخاصة بالاستعلامات لمجموعات البيانات المصدر البديلة موجودة في data/vector/.
لتشغيل الدفاع القائم على الكشف:
python run.py --model contriever --src hotpotqa \
--eval-runners evaluate_defense evaluate_defense_performance_loss
لدفاع القائم على التخفيف (طريقة واحدة أو أكثر):
python run.py --model contriever --src hotpotqa \
--eval-runners evaluate_mitigation_defense evaluate_mitigation_performance_loss \
--mitigation-methods cl2 zn nohub
يحتوي demo/ على مثال مصغّر قائم بذاته يبني قاعدة معرفة صغيرة من مجموعة بيانات BEIR، ويشفّرها، ويحقن متجهات خبيثة، ويقيس التأثير على مستوى الاسترجاع. يستخدم ملف requirements.txt الخاص به ولا يعتمد على src/. راجع demo/src/main.py للحصول على تفاصيل واجهة سطر الأوامر.
يحدد config.json النماذج المدعومة (contriever، bge، gte) ومجموعات البيانات (14 معيارًا من BEIR). لإضافة نموذج جديد، وسّع config.json وتأكد من وجود ملفات المتجهات .npy ضمن data/vector/<model>_<dataset>.npy.
@misc{li2026trustvectorsvectordatabase,
title={Can You Trust the Vectors in Your Vector Database? Black-Hole Attack from Embedding Space Defects},
author={Hanxi Li and Jianan Zhou and Jiale Lao and Yibo Wang and Zhengmao Ye and Yang Cao and Junfen Wang and Mingjie Tang},
year={2026},
eprint={2604.05480},
archivePrefix={arXiv},
primaryClass={cs.CR},
url={https://arxiv.org/abs/2604.05480},
}