gr-PHYSEC: Modulo GNU Radio per la Sicurezza del Livello Fisico
Questo modulo GNU Radio fornisce capacità di fingerprinting del canale per applicazioni di sicurezza del livello fisico utilizzando modelli di deep learning.
Caratteristiche
- Fingerprinting del Canale: Estrae caratteristiche uniche del canale dai campioni IQ
- Integrazione con Deep Learning: Utilizza modelli addestrati (QExtractor.h5) per l'estrazione delle caratteristiche
- Quantizzazione delle Caratteristiche: Converte le caratteristiche estratte in valori binari
- Amplificazione della Privacy: Applica hashing crittografico (SHA3-512) per la generazione delle chiavi
- Elaborazione in Tempo Reale: Elabora campioni IQ in tempo reale da dispositivi SDR
- Supporto Multiplo di Modelli: Supporto per le architetture TripletNet e QuadrupletNet
Requisiti
- GNU Radio 3.10+
- Python 3.8+
- TensorFlow 2.x
- NumPy
- Hashlib (integrato)
Installazione
1. Clonare il repository
git clone <your-repo-url>/gr-PHYSEC.git
cd gr-PHYSEC
2. Creare la directory di build
3. Configurare e compilare
4. Installare
sudo make install
sudo ldconfig
5. Verificare l'installazione
Dovresti vedere una nuova categoria [PHYSEC] con il blocco PHYSEC Fingerprint Block.
Utilizzo
GNU Radio Companion (GRC)
- Apri GNU Radio Companion
- Cerca la categoria
[PHYSEC]
- Trascina e rilascia il blocco
PHYSEC Fingerprint Block
- Configura i parametri:
- Model Path: Percorso del file QExtractor.h5
- Model Type: Scegli tra "quadruplet" o "triplet"
- Spectrogram Size: Dimensione FFT (predefinito: 512)
- Sample Rate: Frequenza di campionamento SDR in Hz
- Center Frequency: Frequenza centrale SDR in Hz
- Key Length: Lunghezza desiderata della chiave in bit
Script 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 di Esempio
Vedi examples/decoupled_physic_example.grc per un flowgraph di esempio completo che utilizza i blocchi PHYSEC disaccoppiati.
Parametri dei Blocchi
Blocco Spectrogram
| Parametro | Tipo | Predefinito | Descrizione |
|---|
model_path | string | - | Percorso del file del modello ONNX |
Blocco Feature Quantization
| Parametro | Tipo | Predefinito | Descrizione |
|---|
threshold_type | string | "mean" | Metodo di soglia: "mean", "median" o "zero" |
Blocco Parity Generation
| Parametro | Tipo | Predefinito | Descrizione |
|---|
key_length | int | 512 | Lunghezza della chiave binaria per la generazione della parità |
Blocco Reconciliation
| Parametro | Tipo | Predefinito | Descrizione |
|---|
key_length | int | 512 | Lunghezza della chiave binaria per la riconciliazione |
Blocco Privacy Amplification
| Parametro | Tipo | Predefinito | Descrizione |
|---|
| Nessun parametro richiesto | - | - | Applica l'hashing SHA3-512 |
Blocco Spectrogram
- Input: Campioni IQ complessi dall'SDR
- Output: Dati dello spettrogramma (204×31 valori float)
- Input: Dati dello spettrogramma (204×31 valori float)
- Output: Vettore di caratteristiche (512 valori float)
Blocco Feature Quantization
- Input: Vettore di caratteristiche (512 valori float)
- Output: Caratteristiche binarie (512 valori uint8)
Blocco Parity Generation
- Input: Caratteristiche binarie (512 valori uint8)
- Output: Bit di parità (stringa)
Blocco Reconciliation
- Input: Caratteristiche binarie + Bit di parità
- Output: Chiave binaria riconciliata (stringa)
Blocco Privacy Amplification
- Input: Caratteristiche binarie (512 valori uint8)
- Output: Chiave crittografica finale (128 byte)
Il messaggio di output del fingerprint contiene:
{
"fingerprint": "generated_hash_string",
"block_count": 123,
"sample_rate": 1000000.0,
"center_freq": 2400000000.0,
"spectrogram_size": 512
}
Pipeline di Elaborazione
- Raccolta dei Campioni IQ: Bufferizza i campioni IQ in ingresso utilizzando Stream to Vector
- Creazione dello Spettrogramma: Converte i campioni IQ in spettrogramma utilizzando STFT, normalizzazione RMS e ritaglio in frequenza
- Estrazione delle Caratteristiche: Utilizza il modello ONNX per estrarre le caratteristiche del canale
- Quantizzazione delle Caratteristiche: Converte le caratteristiche in valori binari utilizzando soglie configurabili
- Generazione della Parità: Genera bit di parità Reed-Solomon per la correzione degli errori
- Riconciliazione della Chiave: Corregge gli errori utilizzando i bit di parità
- Amplificazione della Privacy: Applica l'hashing SHA3-512 per la generazione finale della chiave
- Output: Comunicazione basata su stream tra i blocchi
Requisiti del Modello
Il tuo modello ONNX dovrebbe:
- Accettare una forma di input:
(batch, 204, 31) per i dati dello spettrogramma
- Restituire vettori di caratteristiche di lunghezza 512
- Essere compatibile con ONNX Runtime
- Supportare input/output float32
Risoluzione dei Problemi
Problemi Comuni
- Modello non trovato: Assicurati che il percorso di QExtractor.h5 sia corretto
- Errori TensorFlow: Verifica l'installazione e la compatibilità di TensorFlow
- Problemi di memoria: Riduci spectrogram_size per un utilizzo di memoria inferiore
- Prestazioni: Utilizza l'accelerazione GPU se disponibile
Output di Debug
Il blocco fornisce informazioni di debug estese:
- Output sulla console per lo stato di elaborazione
- Porte di messaggi per risultati intermedi
- Gestione degli errori con messaggi informativi
Sviluppo
Aggiunta di Nuove Funzionalità
- Modifica il blocco specializzato appropriato (ad esempio,
spectrogram_block.py)
- Aggiorna la definizione del blocco GRC corrispondente in
grc/
- Ricompila il modulo
- Testa con gli esempi
Test
Esegui lo script di esempio:
cd examples
python3 fingerprint_example.py
Licenza
Questo progetto è distribuito sotto la licenza GPL-3.0-or-later.
Contribuire
- Fai un fork del repository
- Crea un branch per la funzionalità
- Apporta le tue modifiche
- Aggiungi test se applicabile
- Invia una pull request
Supporto
Per problemi e domande:
- Consulta la sezione di risoluzione dei problemi
- Esamina i file di esempio
- Apri una issue sul repository
- Contatta il team di sviluppo
Riconoscimenti
- Basato sulla ricerca sul fingerprinting del canale PHYSEC
- Utilizza TensorFlow per l'inferenza di deep learning
- Si integra con GNU Radio per l'elaborazione SDR