gr-PHYSEC: GNU-Radio-Modul für Physical-Layer-Sicherheit
Dieses GNU-Radio-Modul bietet Kanal-Fingerprinting-Funktionen für Anwendungen der Physical-Layer-Sicherheit unter Verwendung von Deep-Learning-Modellen.
Funktionen
- Kanal-Fingerprinting: Extraktion eindeutiger Kanalmerkmale aus IQ-Samples
- Deep-Learning-Integration: Verwendung trainierter Modelle (QExtractor.h5) zur Merkmalsextraktion
- Merkmalsquantisierung: Umwandlung extrahierter Merkmale in Binärwerte
- Privacy Amplification: Anwendung kryptografischen Hashings (SHA3-512) zur Schlüsselgenerierung
- Echtzeitverarbeitung: Verarbeitung von IQ-Samples in Echtzeit von SDR-Geräten
- Unterstützung mehrerer Modelle: Unterstützung sowohl für TripletNet- als auch für QuadrupletNet-Architekturen
Anforderungen
- GNU Radio 3.10+
- Python 3.8+
- TensorFlow 2.x
- NumPy
- Hashlib (integriert)
Installation
1. Repository klonen
git clone <your-repo-url>/gr-PHYSEC.git
cd gr-PHYSEC
2. Build-Verzeichnis erstellen
3. Konfigurieren und bauen
4. Installieren
sudo make install
sudo ldconfig
5. Installation überprüfen
Sie sollten eine neue Kategorie [PHYSEC] mit dem PHYSEC Fingerprint Block sehen.
Verwendung
GNU Radio Companion (GRC)
- Öffnen Sie GNU Radio Companion
- Suchen Sie die Kategorie
[PHYSEC]
- Ziehen Sie den
PHYSEC Fingerprint Block per Drag-and-Drop
- Konfigurieren Sie die Parameter:
- Model Path: Pfad zu Ihrer QExtractor.h5-Datei
- Model Type: Wählen Sie zwischen "quadruplet" oder "triplet"
- Spectrogram Size: FFT-Größe (Standard: 512)
- Sample Rate: SDR-Abtastrate in Hz
- Center Frequency: SDR-Mittenfrequenz in Hz
- Key Length: Gewünschte Schlüssellänge in Bits
Python-Skript
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()
Beispiel-Flowgraph
Siehe examples/decoupled_physic_example.grc für einen vollständigen Beispiel-Flowgraphen mit den entkoppelten PHYSEC-Blöcken.
Blockparameter
Spectrogram Block
| Parameter | Typ | Standard | Beschreibung |
|---|
model_path | string | - | Pfad zur ONNX-Modelldatei |
Feature Quantization Block
| Parameter | Typ | Standard | Beschreibung |
|---|
threshold_type | string | "mean" | Schwellenwertmethode: "mean", "median" oder "zero" |
Parity Generation Block
| Parameter | Typ | Standard | Beschreibung |
|---|
key_length | int | 512 | Länge des binären Schlüssels für die Paritätsgenerierung |
Reconciliation Block
| Parameter | Typ | Standard | Beschreibung |
|---|
key_length | int | 512 | Länge des binären Schlüssels für die Abstimmung |
Privacy Amplification Block
| Parameter | Typ | Standard | Beschreibung |
|---|
| Keine Parameter erforderlich | - | - | Wendet SHA3-512-Hashing an |
Eingang/Ausgang
Spectrogram Block
- Eingang: Komplexe IQ-Samples vom SDR
- Ausgang: Spektrogrammdaten (204×31 Float-Werte)
- Eingang: Spektrogrammdaten (204×31 Float-Werte)
- Ausgang: Merkmalsvektor (512 Float-Werte)
Feature Quantization Block
- Eingang: Merkmalsvektor (512 Float-Werte)
- Ausgang: Binäre Merkmale (512 uint8-Werte)
Parity Generation Block
- Eingang: Binäre Merkmale (512 uint8-Werte)
- Ausgang: Paritätsbits (String)
Reconciliation Block
- Eingang: Binäre Merkmale + Paritätsbits
- Ausgang: Abgestimmter binärer Schlüssel (String)
Privacy Amplification Block
- Eingang: Binäre Merkmale (512 uint8-Werte)
- Ausgang: Finaler kryptografischer Schlüssel (128 Bytes)
Die Fingerprint-Ausgabenachricht enthält:
{
"fingerprint": "generated_hash_string",
"block_count": 123,
"sample_rate": 1000000.0,
"center_freq": 2400000000.0,
"spectrogram_size": 512
}
Verarbeitungspipeline
- IQ-Sample-Erfassung: Puffern eingehender IQ-Samples mittels Stream to Vector
- Spektrogrammerstellung: Umwandlung von IQ-Samples in ein Spektrogramm mittels STFT, RMS-Normalisierung und Frequenzzuschnitt
- Merkmalsextraktion: Verwendung des ONNX-Modells zur Extraktion von Kanalmerkmalen
- Merkmalsquantisierung: Umwandlung von Merkmalen in Binärwerte mittels konfigurierbarer Schwellenwerte
- Paritätsgenerierung: Generierung von Reed-Solomon-Paritätsbits zur Fehlerkorrektur
- Schlüsselabstimmung: Korrektur von Fehlern mittels Paritätsbits
- Privacy Amplification: Anwendung von SHA3-512-Hashing zur finalen Schlüsselgenerierung
- Ausgang: Stream-basierte Kommunikation zwischen den Blöcken
Modellanforderungen
Ihr ONNX-Modell sollte:
- Eingabeform akzeptieren:
(batch, 204, 31) für Spektrogrammdaten
- Merkmalsvektoren der Länge 512 ausgeben
- Mit ONNX Runtime kompatibel sein
- float32-Eingabe/Ausgabe unterstützen
Fehlerbehebung
Häufige Probleme
- Modell nicht gefunden: Stellen Sie sicher, dass der Pfad zu QExtractor.h5 korrekt ist
- TensorFlow-Fehler: Überprüfen Sie die TensorFlow-Installation und -Kompatibilität
- Speicherprobleme: Reduzieren Sie spectrogram_size für eine geringere Speichernutzung
- Leistung: Verwenden Sie GPU-Beschleunigung, falls verfügbar
Debug-Ausgabe
Der Block bietet umfangreiche Debug-Informationen:
- Konsolenausgabe zum Verarbeitungsstatus
- Nachrichtenports für Zwischenergebnisse
- Fehlerbehandlung mit informativen Meldungen
Entwicklung
Hinzufügen neuer Funktionen
- Ändern Sie den entsprechenden spezialisierten Block (z. B.
spectrogram_block.py)
- Aktualisieren Sie die entsprechende GRC-Blockdefinition in
grc/
- Bauen Sie das Modul neu
- Testen Sie mit Beispielen
Testen
Führen Sie das Beispielskript aus:
cd examples
python3 fingerprint_example.py
Lizenz
Dieses Projekt ist unter der GPL-3.0-or-later-Lizenz lizenziert.
Mitwirken
- Forken Sie das Repository
- Erstellen Sie einen Feature-Branch
- Nehmen Sie Ihre Änderungen vor
- Fügen Sie Tests hinzu, falls zutreffend
- Reichen Sie einen Pull-Request ein
Support
Bei Problemen und Fragen:
- Lesen Sie den Abschnitt zur Fehlerbehebung
- Sehen Sie sich die Beispieldateien an
- Öffnen Sie ein Issue im Repository
- Kontaktieren Sie das Entwicklungsteam
Danksagungen
- Basiert auf der PHYSEC-Kanal-Fingerprinting-Forschung
- Verwendet TensorFlow für Deep-Learning-Inferenz
- Integriert sich mit GNU Radio für die SDR-Verarbeitung