gr-PHYSEC: Módulo GNU Radio para Seguridad de Capa Física
Este módulo de GNU Radio proporciona capacidades de fingerprinting de canal para aplicaciones de seguridad de capa física utilizando modelos de aprendizaje profundo.
Características
- Fingerprinting de Canal: Extrae características únicas del canal a partir de muestras IQ
- Integración con Aprendizaje Profundo: Utiliza modelos entrenados (QExtractor.h5) para la extracción de características
- Cuantización de Características: Convierte las características extraídas a valores binarios
- Amplificación de Privacidad: Aplica hashing criptográfico (SHA3-512) para la generación de claves
- Procesamiento en Tiempo Real: Procesa muestras IQ en tiempo real desde dispositivos SDR
- Soporte para Múltiples Modelos: Soporte para arquitecturas TripletNet y QuadrupletNet
Requisitos
- GNU Radio 3.10+
- Python 3.8+
- TensorFlow 2.x
- NumPy
- Hashlib (incluido)
Instalación
1. Clonar el repositorio
git clone <your-repo-url>/gr-PHYSEC.git
cd gr-PHYSEC
2. Crear directorio de compilación
3. Configurar y compilar
4. Instalar
sudo make install
sudo ldconfig
5. Verificar la instalación
Deberías ver una nueva categoría [PHYSEC] con el bloque PHYSEC Fingerprint Block.
Uso
GNU Radio Companion (GRC)
- Abre GNU Radio Companion
- Busca la categoría
[PHYSEC]
- Arrastra y suelta el bloque
PHYSEC Fingerprint Block
- Configura los parámetros:
- Model Path: Ruta a tu archivo QExtractor.h5
- Model Type: Elige entre "quadruplet" o "triplet"
- Spectrogram Size: Tamaño de FFT (por defecto: 512)
- Sample Rate: Tasa de muestreo del SDR en Hz
- Center Frequency: Frecuencia central del SDR en Hz
- Key Length: Longitud deseada de la clave en bits
Script de 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()
Flowgraph de Ejemplo
Consulta examples/decoupled_physic_example.grc para ver un flowgraph de ejemplo completo que utiliza los bloques PHYSEC desacoplados.
Parámetros de los Bloques
Bloque Spectrogram
| Parámetro | Tipo | Valor por Defecto | Descripción |
|---|
model_path | string | - | Ruta al archivo del modelo ONNX |
Bloque Feature Quantization
| Parámetro | Tipo | Valor por Defecto | Descripción |
|---|
threshold_type | string | "mean" | Método de umbral: "mean", "median" o "zero" |
Bloque Parity Generation
| Parámetro | Tipo | Valor por Defecto | Descripción |
|---|
key_length | int | 512 | Longitud de la clave binaria para la generación de paridad |
Bloque Reconciliation
| Parámetro | Tipo | Valor por Defecto | Descripción |
|---|
key_length | int | 512 | Longitud de la clave binaria para la reconciliación |
Bloque Privacy Amplification
| Parámetro | Tipo | Valor por Defecto | Descripción |
|---|
| No se requieren parámetros | - | - | Aplica hashing SHA3-512 |
Entrada/Salida
Bloque Spectrogram
- Entrada: Muestras IQ complejas del SDR
- Salida: Datos del espectrograma (204×31 valores float)
- Entrada: Datos del espectrograma (204×31 valores float)
- Salida: Vector de características (512 valores float)
Bloque Feature Quantization
- Entrada: Vector de características (512 valores float)
- Salida: Características binarias (512 valores uint8)
Bloque Parity Generation
- Entrada: Características binarias (512 valores uint8)
- Salida: Bits de paridad (string)
Bloque Reconciliation
- Entrada: Características binarias + Bits de paridad
- Salida: Clave binaria reconciliada (string)
Bloque Privacy Amplification
- Entrada: Características binarias (512 valores uint8)
- Salida: Clave criptográfica final (128 bytes)
El mensaje de salida del fingerprint contiene:
{
"fingerprint": "generated_hash_string",
"block_count": 123,
"sample_rate": 1000000.0,
"center_freq": 2400000000.0,
"spectrogram_size": 512
}
Pipeline de Procesamiento
- Recolección de Muestras IQ: Almacena en búfer las muestras IQ entrantes usando Stream to Vector
- Creación del Espectrograma: Convierte las muestras IQ a espectrograma usando STFT, normalización RMS y recorte de frecuencia
- Extracción de Características: Utiliza el modelo ONNX para extraer las características del canal
- Cuantización de Características: Convierte las características a valores binarios usando umbrales configurables
- Generación de Paridad: Genera bits de paridad Reed-Solomon para corrección de errores
- Reconciliación de Claves: Corrige errores usando los bits de paridad
- Amplificación de Privacidad: Aplica hashing SHA3-512 para la generación final de la clave
- Salida: Comunicación basada en streams entre bloques
Requisitos del Modelo
Tu modelo ONNX debería:
- Aceptar una forma de entrada:
(batch, 204, 31) para datos de espectrograma
- Producir vectores de características de longitud 512
- Ser compatible con ONNX Runtime
- Soportar entrada/salida float32
Solución de Problemas
Problemas Comunes
- Modelo no encontrado: Asegúrate de que la ruta a QExtractor.h5 sea correcta
- Errores de TensorFlow: Verifica la instalación y compatibilidad de TensorFlow
- Problemas de memoria: Reduce spectrogram_size para un menor uso de memoria
- Rendimiento: Utiliza aceleración por GPU si está disponible
Salida de Depuración
El bloque proporciona información de depuración extensa:
- Salida por consola del estado del procesamiento
- Puertos de mensajes para resultados intermedios
- Manejo de errores con mensajes informativos
Desarrollo
Añadir Nuevas Características
- Modifica el bloque especializado correspondiente (por ejemplo,
spectrogram_block.py)
- Actualiza la definición del bloque GRC correspondiente en
grc/
- Recompila el módulo
- Prueba con los ejemplos
Pruebas
Ejecuta el script de ejemplo:
cd examples
python3 fingerprint_example.py
Licencia
Este proyecto está licenciado bajo la Licencia GPL-3.0-or-later.
Contribuciones
- Haz un fork del repositorio
- Crea una rama de características
- Realiza tus cambios
- Añade pruebas si corresponde
- Envía un pull request
Soporte
Para problemas y preguntas:
- Consulta la sección de solución de problemas
- Revisa los archivos de ejemplo
- Abre un issue en el repositorio
- Contacta al equipo de desarrollo
Agradecimientos
- Basado en la investigación de fingerprinting de canal PHYSEC
- Utiliza TensorFlow para inferencia de aprendizaje profundo
- Se integra con GNU Radio para el procesamiento SDR