gr-PHYSEC: модуль GNU Radio для физической защиты канала
Этот модуль GNU Radio предоставляет возможности создания отпечатков канала для приложений физической защиты канала с использованием моделей глубокого обучения.
Возможности
- Создание отпечатков канала: извлечение уникальных характеристик канала из IQ-выборок
- Интеграция глубокого обучения: использование обученных моделей (QExtractor.h5) для извлечения признаков
- Квантование признаков: преобразование извлечённых признаков в двоичные значения
- Усиление конфиденциальности: применение криптографического хеширования (SHA3-512) для генерации ключей
- Обработка в реальном времени: обработка IQ-выборок в реальном времени с SDR-устройств
- Поддержка нескольких моделей: поддержка архитектур TripletNet и QuadrupletNet
Требования
- GNU Radio 3.10+
- Python 3.8+
- TensorFlow 2.x
- NumPy
- Hashlib (встроенный)
Установка
1. Клонирование репозитория
git clone <your-repo-url>/gr-PHYSEC.git
cd gr-PHYSEC
2. Создание каталога сборки
3. Настройка и сборка
4. Установка
sudo make install
sudo ldconfig
5. Проверка установки
Вы должны увидеть новую категорию [PHYSEC] с блоком PHYSEC Fingerprint Block.
Использование
GNU Radio Companion (GRC)
- Откройте GNU Radio Companion
- Найдите категорию
[PHYSEC]
- Перетащите блок
PHYSEC Fingerprint Block
- Настройте параметры:
- Model Path: путь к вашему файлу QExtractor.h5
- Model Type: выберите между "quadruplet" или "triplet"
- Spectrogram Size: размер FFT (по умолчанию: 512)
- Sample Rate: частота дискретизации SDR в Гц
- Center Frequency: центральная частота SDR в Гц
- Key Length: желаемая длина ключа в битах
Python-скрипт
from gnuradio import gr
from gnuradio import PHYSEC
# Create decoupled PHYSEC blocks
spectrogram = PHYSEC.spectrogram_block(
vector_size=512,
sample_rate=1e6,
center_freq=2.4e9
)
feature_extractor = PHYSEC.feature_extraction_block(
model_path="/path/to/QExtractor.onnx"
)
feature_quantizer = PHYSEC.feature_quantization_block(
threshold_type="mean"
)
parity_generator = PHYSEC.parity_generation_block(
key_length=512
)
reconciler = PHYSEC.reconciliation_block(
key_length=512
)
privacy_amplifier = PHYSEC.privacy_amplification_block()
Пример графа потоков
См. examples/decoupled_physic_example.grc для полного примера графа потоков с использованием раздельных блоков PHYSEC.
Параметры блоков
Блок спектрограммы
Блок извлечения признаков
| Параметр | Тип | По умолчанию | Описание |
|---|
model_path | string | - | Путь к файлу модели ONNX |
Блок квантования признаков
| Параметр | Тип | По умолчанию | Описание |
|---|
threshold_type | string | "mean" | Метод порога: "mean", "median" или "zero" |
Блок генерации чётности
| Параметр | Тип | По умолчанию | Описание |
|---|
key_length | int | 512 | Длина двоичного ключа для генерации чётности |
Блок согласования
| Параметр | Тип | По умолчанию | Описание |
|---|
key_length | int | 512 | Длина двоичного ключа для согласования |
Блок усиления конфиденциальности
| Параметр | Тип | По умолчанию | Описание |
|---|
| Параметры не требуются | - | - | Применяет хеширование SHA3-512 |
Вход/Выход
Блок спектрограммы
- Вход: комплексные IQ-выборки от SDR
- Выход: данные спектрограммы (204×31 значений float)
Блок извлечения признаков
- Вход: данные спектрограммы (204×31 значений float)
- Выход: вектор признаков (512 значений float)
Блок квантования признаков
- Вход: вектор признаков (512 значений float)
- Выход: двоичные признаки (512 значений uint8)
Блок генерации чётности
- Вход: двоичные признаки (512 значений uint8)
- Выход: биты чётности (строка)
Блок согласования
- Вход: двоичные признаки + биты чётности
- Выход: согласованный двоичный ключ (строка)
Блок усиления конфиденциальности
- Вход: двоичные признаки (512 значений uint8)
- Выход: итоговый криптографический ключ (128 байт)
Формат сообщения
Выходное сообщение отпечатка содержит:
{
"fingerprint": "generated_hash_string",
"block_count": 123,
"sample_rate": 1000000.0,
"center_freq": 2400000000.0,
"spectrogram_size": 512
}
Конвейер обработки
- Сбор IQ-выборок: буферизация входящих IQ-выборок с помощью Stream to Vector
- Создание спектрограммы: преобразование IQ-выборок в спектрограмму с помощью STFT, RMS-нормализации и обрезки по частоте
- Извлечение признаков: использование модели ONNX для извлечения признаков канала
- Квантование признаков: преобразование признаков в двоичные значения с использованием настраиваемых порогов
- Генерация чётности: генерация битов чётности Рида-Соломона для исправления ошибок
- Согласование ключа: исправление ошибок с использованием битов чётности
- Усиление конфиденциальности: применение хеширования SHA3-512 для генерации итогового ключа
- Выход: потоковая связь между блоками
Требования к модели
Ваша модель ONNX должна:
- Принимать входную форму:
(batch, 204, 31) для данных спектрограммы
- Выдавать векторы признаков длиной 512
- Быть совместимой с ONNX Runtime
- Поддерживать ввод/вывод float32
Устранение неполадок
Распространённые проблемы
- Модель не найдена: убедитесь, что путь к QExtractor.h5 указан верно
- Ошибки TensorFlow: проверьте установку и совместимость TensorFlow
- Проблемы с памятью: уменьшите spectrogram_size для снижения потребления памяти
- Производительность: используйте ускорение на GPU, если доступно
Отладочный вывод
Блок предоставляет обширную отладочную информацию:
- Вывод в консоль о состоянии обработки
- Порты сообщений для промежуточных результатов
- Обработка ошибок с информативными сообщениями
Разработка
Добавление новых возможностей
- Измените соответствующий специализированный блок (например,
spectrogram_block.py)
- Обновите соответствующее определение блока GRC в
grc/
- Пересоберите модуль
- Протестируйте с примерами
Тестирование
Запустите пример скрипта:
cd examples
python3 fingerprint_example.py
Лицензия
Этот проект лицензирован под лицензией GPL-3.0-or-later.
Участие в разработке
- Форкните репозиторий
- Создайте ветку для новой функции
- Внесите свои изменения
- Добавьте тесты, если применимо
- Отправьте pull request
Поддержка
По вопросам и проблемам:
- Проверьте раздел устранения неполадок
- Изучите примеры файлов
- Откройте issue в репозитории
- Свяжитесь с командой разработчиков
Благодарности
- Основано на исследовании создания отпечатков канала PHYSEC
- Использует TensorFlow для вывода глубокого обучения
- Интегрируется с GNU Radio для обработки SDR