
Код симуляции и результаты для приватного, проверяемого, устойчивого к византийским сбоям протокола федеративного обнаружения вторжений с использованием разделения секрета, аудита Меркла и обязательств Педерсена.
Код симуляции, необработанные результаты и скрипты для построения графиков к статье
Mustafa S. Aljumaily, Ali Ataeemh Allami, Mustafa N. Mnati, Nawar S. Alseelawi, Shahab Abdulla, "PVBRF-ID: Private, Verifiable and Byzantine-Robust Federated Intrusion Detection for Oilfield Enterprise Networks," arXiv preprint, 2026. (ссылка на arXiv будет добавлена после анонса.)
PVBRF-ID — это двухсерверный агрегатор для федеративного обучения. Узлы разделяют свои обновления модели с помощью секретного разделения; серверы совместно проверяют норму каждого обновления и его косинусное сходство с эталоном из чистого корневого набора внутри долей, раскрывают один бит принятия на узел и публикуют обязательства, корни Меркла и гомоморфный аудит, чтобы включение принятых обновлений было проверяемым.
Область применения. Это симуляция. Безопасное сравнение, доказательства диапазона по каждой координате, генерация троек Бивера и безопасное отсечение моделируются как идеальные функциональности; группа Педерсена — это игрушечная 512-битная группа, используемая только для оценки масштабирования затрат. В экспериментах используется публичный трафик Edge-IIoTset с симулированными узлами. Данные операторов не использовались. Прочитайте раздел об ограничениях статьи, прежде чем ссылаться на какое-либо число.
| путь | назначение |
|---|---|
faithful_agg.py | ядро протокола: аддитивное секретное разделение над GF(2^127-1), кодирование с фиксированной точкой, проверки нормы и косинуса на тройках Бивера (включая толерантный случай tau < 0), включение Меркла на SHA-256, обязательства Педерсена и гомоморфный аудит |
test_core.py | 12 тестов корректности и обнаружения подмены (python test_core.py) |
demo_sanity.py | сквозной проверочный запуск на синтетических данных плюс бенчмарк затрат |
exp_ref_tau.py | перебор по эталонному источнику x порогу косинуса x атаке на синтетических данных (одно зерно, только проверка работоспособности) |
notebooks/faithful_agg_edgeiiot_v5_final.ipynb | основной эксперимент: 870 запусков (10 зёрен x 87 конфигураций) на Edge-IIoTset |
notebooks/faithful_agg_edgeiiot_v5b_tolerance_attack.ipynb | дополнительный эксперимент: 160 запусков с адаптивным атакующим, эксплуатирующим толерантность |
results/v5_full/ | необработанный вывод по каждому запуску основного эксперимента (results.csv) и все производные таблицы |
results/v5b_tolerance/ | необработанный вывод по каждому запуску дополнительного эксперимента |
make_figures.py | пересоздаёт рисунки 2-5 рукописи и дополнительную таблицу S3 из двух файлов results.csv |
figures/ | рисунки рукописи |
Код и файлы результатов сохраняют рабочее название метода, faithful_agg / faithful_root;
faithful_root_t-0.3 в results.csv — это PVBRF-ID с эталоном из корневого набора и tau = -0.3.
pip install -r requirements.txt
python test_core.py # 12 тестов, около минуты
python make_figures.py # рисунки из прилагаемых результатов, секунды
Чтобы повторно запустить эксперименты, скачайте файл DNN из Edge-IIoTset (DNN-EdgeIIoT-dataset.csv,
2 219 201 поток; доступен у авторов набора данных через IEEE DataPort или Kaggle), поместите его в
data/DNN-EdgeIIoT-dataset.csv и запустите два ноутбука из папки notebooks/ по порядку:
faithful_agg_edgeiiot_v5_final.ipynb (около 1.1-2.9 ч на 8 ядрах; возобновляемый; записывает в results/v5_full/)faithful_agg_edgeiiot_v5b_tolerance_attack.ipynb (около 30 мин; записывает в results/v5b_tolerance/)Пути можно переопределить с помощью переменных окружения EDGE_DATA, CORE_DIR и OUT_DIR.
Все запуски детерминированы при заданных зёрнах в config.json. Четыре базовые линии с открытым текстом присутствуют в
обоих экспериментах и должны совпадать до последней цифры; они совпадают.
r_t; публикуют B_t = kappa * ||r_t|| и r_t / ||r_t||.||u_i||^2 и <u_i, r_t>^2 с помощью троек Бивера; идеальное сравнение раскрывает только бит принятия b_i.prod_{i accepted} C_i^j = Com(A_j; R_j) для обоих серверов; каждый узел проверяет свой путь включения в дерево Меркла.Реально: разделение, кодирование с фиксированной точкой, скалярные произведения на тройках Бивера, деревья Меркла, обязательства Педерсена и аудит. Идеально: безопасное сравнение (его коммуникация — это оценочная заглушка), доказательства диапазона, генерация троек, безопасное отсечение и шум внутри агрегата.
| чистый | инверсия знака | адаптивный 30% | |
|---|---|---|---|
| FedAvg | 0.706 | 0.091 | 0.046 |
| Multi-Krum (открытый текст) | 0.690 | 0.686 | 0.693 |
| PVBRF-ID (tau = -0.3) | 0.708 | 0.696 | 0.571 |
| PVBRF-ID + безопасное отсечение | 0.697 | 0.688 | 0.641 |
Бэкдоры проходят фильтр (ASR 1.00); смягчение на основе шума является эвристическим (epsilon >= 16.9). Атакующий, выполняющий вывод по обновлениям, восстанавливает распределение классов из обновлений в открытом тексте (Spearman 0.81), но не из доли одного сервера (0.00). Коммуникация составляет примерно в 19 раз больше, чем загрузка в FedAvg с открытым текстом.
MIT, см. LICENSE.