
फाइन-ट्यून किए गए LLM क्लासिफायर में एकल KV-कैश बिट को फ्लिप करने वाले ग्रे-बॉक्स ट्रोजन हमले के लिए शोध कोड, जो प्रति-क्लास हमले की सफलता दर को मापता है।
"CacheTrap: Unveiling a Stealthier Gray-Box Trojan against LLMs" के लिए रिपॉज़िटरी, IEEE/ACM International Conference on Computer-Aided Design (ICCAD), 2026।
CacheTrap एक फाइन-ट्यून किए गए LLM क्लासिफायर के KV cache में एकल बिट फ्लिप की खोज करता है और प्रत्येक लक्ष्य क्लास के लिए परिणामी आक्रमण सफलता दर (ASR) को मापता है।
Python 3.10, CUDA 12.x।
conda create -n cachetrap python=3.10
conda activate cachetrap
pip install -r requirements.txt
Hugging Face एक्सेस। meta-llama/Llama-2-7b-chat-hf और
meta-llama/Llama-3.1-8B-Instruct गेटेड हैं। Hub पर लाइसेंस स्वीकार करें, फिर:
huggingface-cli login
एक मॉडल / एक डेटासेट:
python train_model.py --model llama3_1_8b --dataset arc_easy
चेकपॉइंट यहाँ लिखा जाता है:
TrainedModels/merged_<model>_<dataset>/।
सभी मॉडल × सभी डेटासेट:
bash scripts/train.sh
किसी सबसेट को चलाने के लिए स्क्रिप्ट के शीर्ष पर MODELS, DATASETS, और NUM_GPUS को संपादित करें।
लॉग logs/training/ में जाते हैं।
नोट: कम मेमोरी वाले GPUs पर, ऊपर दिए गए कमांड में और
scripts/train.shके अंदर, दोनों जगहtrain_model.pyके स्थान परtrain_model_lowmem.pyका उपयोग करें।
python attack.py --model llama3_1_8b --dataset arc_easy --calib_dataset openbookqa
--dataset वह डेटासेट है जिस पर विक्टिम को प्रशिक्षित किया गया था; --calib_dataset वह डेटा है जो आक्रमणकर्ता के पास उपलब्ध है। पेपर के अनुसार, OpenBookQA, TREC या ARC-Challenge पर प्रशिक्षित विक्टिम्स को ARC-Easy के साथ कैलिब्रेट किया जाता है, और ARC-Easy पर प्रशिक्षित विक्टिम्स को OpenBookQA के साथ कैलिब्रेट किया जाता है। दो बैच स्क्रिप्ट्स ठीक इसी विभाजन को लागू करती हैं:
| स्क्रिप्ट | विक्टिम डेटासेट | कैलिब्रेशन |
|---|---|---|
scripts/attack_bundle1.sh | openbookqa, trec, arc_challenge | arc_easy |
scripts/attack_bundle2.sh | arc_easy | openbookqa |
bash scripts/attack_bundle1.sh
bash scripts/attack_bundle2.sh
प्रत्येक अपने स्वयं के लॉग डायरेक्टरी पर summarize_logs.py चलाकर समाप्त होता है।
पूरी विकल्प सूची के लिए python attack.py --help चलाएँ।
logs/<run>/<model>_<dataset>.log — प्रति-रन पूर्ण आउटपुटlogs/<run>/summary.csv — प्रति लक्ष्य क्लास एक पंक्ति (बेसलाइन सटीकता, आक्रमण के अंतर्गत सटीकता, ASR, फ्लिप स्थान)logs/<run>/summary.txt — कच्चे सारांश ब्लॉकflip_locations/*.json — फ्लिप स्थान, यदि --save_flip_locations पास किया गया थाखोज को दोहराए बिना पुनः-मूल्यांकन करने के लिए:
python attack.py --model llama3_1_8b --dataset arc_easy --calib_dataset openbookqa \
--load_flip_locations flip_locations/llama3_1_8b_arc_easy.json
कुछ भी प्रशिक्षित किए बिना आक्रमण आज़माने के लिए, जारी किया गया
merged_llama3_1_8b_arc_easy चेकपॉइंट डाउनलोड करें और इसे TrainedModels/ के अंतर्गत रखें:
TrainedModels/
└── merged_llama3_1_8b_arc_easy/
├── config.json
├── model-*.safetensors
├── tokenizer.json
└── ...
फिर आक्रमण करने के लिए निम्नलिखित कमांड चलाएँ:
python attack.py --model llama3_1_8b --dataset arc_easy --calib_dataset openbookqa \
--load_flip_locations flip_locations/llama3_1_8b_arc_easy.json
वैकल्पिक रूप से, एक नए आक्रमण के लिए निम्नलिखित चलाएँ
python attack.py \
--model llama3_1_8b \
--dataset arc_easy \
--calib_dataset openbookqa \
--threat_model graybox \
--save_flip_locations flip_locations/llama3_1_8b_arc_easy_fresh.json
यह बेसलाइन सटीकता, आक्रमण के अंतर्गत सटीकता, ASR, और चयनित फ्लिप स्थान का प्रति-क्लास सारांश प्रिंट करता है।
प्री-प्रिंट संस्करण को इस प्रकार उद्धृत करें
@article{nahian2025cachetrap,
title={CacheTrap: Unveiling a Stealthier Gray-Box Trojan against LLMs},
author={Nahian, Mohaiminul Al and Almalky, Abeer Matar A and Aragonda, Gamana and Zhou, Ranyang and Ahmed, Sabbir and Ponomarev, Dmitry and Yang, Li and Angizi, Shaahin and Rakin, Adnan Siraj},
journal={arXiv preprint arXiv:2511.22681},
year={2025}
}