
Codice e risultati per il paper QAI 2026 sulla trasferibilità dell'attacco FGSM dalla simulazione all'hardware quantistico IBM.
Codice, parametri addestrati e risultati per il paper FGSM Attack Transferability from Simulation to Quantum Hardware in Network Intrusion Detection, IEEE International Conference on Quantum Artificial Intelligence (QAI) 2026.
I numeri nel paper provengono dai file JSON in results/. Gli
script qui presenti hanno prodotto quei file.
src/ experiment scripts, numbered in run order
data/ preprocessed splits (the raw CICIDS2017 CSVs are not included)
models/ trained circuit parameters
results/ one JSON per experiment
figures/ the two figures in the paper
python >= 3.10
pennylane == 0.44.1
qiskit-ibm-runtime
numpy, scipy, scikit-learn, pandas, matplotlib
Installa con pip install -r requirements.txt.
Gli script 08 e 09 girano su hardware reale, quindi richiedono un account
IBM Quantum. Copia .env.example e inserisci il tuo token e la tua istanza.
Poi impostali come variabili d'ambiente. Gli script leggono le credenziali
solo dall'ambiente.
La cattura grezza non è qui. Scarica CICIDS2017 dal
Canadian Institute for Cybersecurity
e metti Friday-WorkingHours-Afternoon-DDos.pcap_ISCX.csv in data/.
È l'unico file utilizzato.
01_preprocess.py costruisce i quattro split .npy. Dovresti ottenere 1134
campioni di attacco e 866 benigni nel training. Nel test, 284 di attacco e 216
benigni. Conteggi diversi indicano un file di cattura diverso, o una versione
diversa di scikit-learn.
Esegui gli script in ordine numerico. Gli script da 04 a 07 richiedono che 01, 02 e 03 siano stati eseguiti prima.
| Script | Produce | Tempo di esecuzione |
|---|---|---|
01_preprocess.py | i quattro split in data/ | secondi |
02_train_narrow_margin.py | models/clean_params.npy | secondi |
03_retrain_poisoning_and_noise.py | modelli avvelenati e rumorosi, due file di risultati | diverse ore |
04_epsilon_sweep.py | results/epsilon_sweep.json | meno di un minuto |
05_compare_attack_guidance.py | results/gradient_vs_untargeted.json | meno di un minuto |
06_finish_rq3.py | baseline senza rumore e sweep FGSM sul rumore | circa un'ora |
07_margin_control.py | results/margin_control.json | qualche minuto |
08_run_hardware_models.py | results/hardware_clean_vs_poisoned.json | tempo di coda |
09_run_hardware_fgsm.py | results/hardware_fgsm_adam.json | tempo di coda |
10_convert_hardware_results.py | results/hardware_fgsm_cobyla.json | secondi |
make_figures.py | le due figure | secondi |
Lo script 03 è quello lento. Simula matrici di densità, il che costa circa sedici minuti per inizializzazione. Addestra tre inizializzazioni per ciascuno dei tre livelli di rumore.
Gli script per l'hardware inviano tutti i loro circuiti in un unico job. Ogni circuito
in un job condivide quindi lo stesso stato di calibrazione. Entrambi gli script accettano
--dry-run, che transpila tutto e stampa le statistiche dei circuiti
senza inviare nulla.
| Paper | File di risultati | Script |
|---|---|---|
| Tabella I, avvelenamento | poisoning_retrained.json | 03 |
| Tabella II, FGSM contro non mirato | gradient_vs_untargeted.json | 05 |
| Tabella III, simulazione contro hardware | hardware_clean_vs_poisoned.json, hardware_fgsm_adam.json | 08, 09 |
| Tabella IV, rumore depolarizzante | noise_retrained.json, noise_fgsm_sweep.json, noiseless_400_baseline.json | 03, 06 |
| Figura 1, trasferimento su hardware | hardware_fgsm_adam.json, hardware_fgsm_cobyla.json | 09, 10 |
| Figura 2, accuratezza e margine sotto rumore | come la Tabella IV | 03, 06 |
| Sezione IV-A, baseline pulita | clean_history.json, noise_retrained.json | 02, 03 |
| Sezione IV-C, margini decisionali | epsilon_sweep.json | 04 |
| Sezione VI, controllo del margine | margin_control.json | 07 |
| File | Cos'è |
|---|---|
clean_params.npy | classificatore a margine stretto, COBYLA, 86,8% di accuratezza con margine 0,07 |
noisy_0.0_params.npy | classificatore a margine ampio, Adam, 92,2% di accuratezza con margine 0,54 |
noisy_0.0_params_400.npy | modello senza rumore addestrato sul sottoinsieme di 400 campioni, per confrontare tra livelli di rumore |
noisy_0.001_params.npy, noisy_0.01_params.npy, noisy_0.05_params.npy | uno per livello di rumore depolarizzante |
poisoned_5pct_params.npy, poisoned_10pct_params.npy, poisoned_15pct_params.npy | uno per tasso di inversione delle etichette |
Tutte le esecuzioni hanno usato IBM Fez, un processore Heron r2 da 156 qubit. 1024 shot per circuito, tramite Qiskit Runtime SamplerV2. La transpilazione è stata eseguita a livello di ottimizzazione 1.
Ogni esecuzione ha inviato lo stesso circuito logico: profondità 20 con 12 gate a due qubit. La transpilazione lo mappa su qubit fisici, il che cambia entrambi i numeri a ogni invio.
| Risultato | Script | Circuiti | Profondità transpilata | Gate a due qubit |
|---|---|---|---|---|
| Accuratezza del modello pulito e avvelenato | 08 | 100 | 100 | 27 |
| Trasferimento FGSM, modello a margine ampio | 09 | 150 | 87 | 42 |
| Trasferimento FGSM, modello a margine stretto | codice precedente, sostituito da 09 | 400 | non registrata | non registrata |
L'esecuzione del trasferimento a margine stretto precede gli script in questo repository.
Il suo output è results/transferability_hw_50_expA.json, che lo script 10
converte nel formato letto dalle figure. L'esecuzione ha utilizzato lo stesso circuito
e lo stesso livello di ottimizzazione dello script 09.
Le due profondità registrate differiscono. Il transpiler sceglie i qubit fisici tramite euristica, quindi lo stesso circuito viene mappato diversamente a ogni invio. Entrambe le esecuzioni concordavano comunque con la simulazione.
I risultati hardware dipendono dallo stato di calibrazione del dispositivo in quel giorno. Inviando nuovamente gli stessi circuiti si ottengono conteggi diversi. I file JSON sono la registrazione di ciò che il dispositivo ha fatto.
models/clean_params.npy non può essere rigenerato. I suoi parametri iniziali
provenivano dallo stato casuale globale di NumPy invece che da un generatore con seed.
02_train_narrow_margin.py ora inizializza con seed, quindi le nuove esecuzioni sono
riproducibili tra loro. Esse però approdano altrove, e la dispersione è ampia. Un
ottimizzatore senza gradiente su un obiettivo stocastico può collassare a predire la
classe maggioritaria. Lo script lo segnala quando accade.
Il resto è inizializzato con seed. L'accuratezza varia comunque tra le inizializzazioni, quindi gli script riportano media e deviazione standard invece di una singola esecuzione. La Sezione VI dell'articolo spiega il perché.
@inproceedings{ajmal2026fgsm,
author = {Ajmal, Zeeshan and Halunen, Kimmo and Mau{\ss}ner, Marc
and Reers, Volker and Khan, Arif Ali},
title = {{FGSM} Attack Transferability from Simulation to Quantum
Hardware in Network Intrusion Detection},
booktitle = {IEEE International Conference on Quantum Artificial
Intelligence (QAI)},
year = {2026},
note = {To appear},
}
Il codice è MIT. Vedi LICENSE.
CICIDS2017 proviene dal Canadian Institute for Cybersecurity secondo i suoi termini. Non è ridistribuito qui.
Questo lavoro è stato sostenuto dal progetto Business Finland (24304955) SeQuSoS. Riconosciamo l'uso dei servizi IBM Quantum. Le opinioni espresse sono quelle degli autori e non riflettono la politica ufficiale o la posizione di IBM o del team IBM Quantum.