gr-PHYSEC: Módulo GNU Radio para Segurança de Camada Física
Este módulo GNU Radio fornece capacidades de fingerprinting de canal para aplicações de segurança de camada física usando modelos de deep learning.
Funcionalidades
- Fingerprinting de Canal: Extrai características únicas do canal a partir de amostras IQ
- Integração com Deep Learning: Usa modelos treinados (QExtractor.h5) para extração de características
- Quantização de Características: Converte características extraídas em valores binários
- Amplificação de Privacidade: Aplica hashing criptográfico (SHA3-512) para geração de chave
- Processamento em Tempo Real: Processa amostras IQ em tempo real a partir de dispositivos SDR
- Suporte a Múltiplos Modelos: Suporte para as arquiteturas TripletNet e QuadrupletNet
Requisitos
- GNU Radio 3.10+
- Python 3.8+
- TensorFlow 2.x
- NumPy
- Hashlib (embutido)
Instalação
1. Clone o repositório
git clone <your-repo-url>/gr-PHYSEC.git
cd gr-PHYSEC
2. Crie o diretório de build
4. Instale
sudo make install
sudo ldconfig
5. Verifique a instalação
Você deverá ver uma nova categoria [PHYSEC] com o PHYSEC Fingerprint Block.
Uso
GNU Radio Companion (GRC)
- Abra o GNU Radio Companion
- Procure pela categoria
[PHYSEC]
- Arraste e solte o
PHYSEC Fingerprint Block
- Configure os parâmetros:
- Model Path: Caminho para o seu arquivo QExtractor.h5
- Model Type: Escolha entre "quadruplet" ou "triplet"
- Spectrogram Size: Tamanho da FFT (padrão: 512)
- Sample Rate: Taxa de amostragem do SDR em Hz
- Center Frequency: Frequência central do SDR em Hz
- Key Length: Comprimento desejado da chave em bits
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 de Exemplo
Consulte examples/decoupled_physic_example.grc para um flowgraph de exemplo completo usando os blocos PHYSEC desacoplados.
Parâmetros dos Blocos
Bloco Spectrogram
| Parâmetro | Tipo | Padrão | Descrição |
|---|
model_path | string | - | Caminho para o arquivo de modelo ONNX |
Bloco Feature Quantization
| Parâmetro | Tipo | Padrão | Descrição |
|---|
threshold_type | string | "mean" | Método de limiar: "mean", "median" ou "zero" |
Bloco Parity Generation
| Parâmetro | Tipo | Padrão | Descrição |
|---|
key_length | int | 512 | Comprimento da chave binária para geração de paridade |
Bloco Reconciliation
| Parâmetro | Tipo | Padrão | Descrição |
|---|
key_length | int | 512 | Comprimento da chave binária para reconciliação |
Bloco Privacy Amplification
| Parâmetro | Tipo | Padrão | Descrição |
|---|
| Nenhum parâmetro necessário | - | - | Aplica hashing SHA3-512 |
Entrada/Saída
Bloco Spectrogram
- Entrada: Amostras IQ complexas do SDR
- Saída: Dados do espectrograma (204×31 valores float)
- Entrada: Dados do espectrograma (204×31 valores float)
- Saída: Vetor de características (512 valores float)
Bloco Feature Quantization
- Entrada: Vetor de características (512 valores float)
- Saída: Características binárias (512 valores uint8)
Bloco Parity Generation
- Entrada: Características binárias (512 valores uint8)
- Saída: Bits de paridade (string)
Bloco Reconciliation
- Entrada: Características binárias + Bits de paridade
- Saída: Chave binária reconciliada (string)
Bloco Privacy Amplification
- Entrada: Características binárias (512 valores uint8)
- Saída: Chave criptográfica final (128 bytes)
A mensagem de saída do fingerprint contém:
{
"fingerprint": "generated_hash_string",
"block_count": 123,
"sample_rate": 1000000.0,
"center_freq": 2400000000.0,
"spectrogram_size": 512
}
Pipeline de Processamento
- Coleta de Amostras IQ: Armazena em buffer as amostras IQ recebidas usando Stream to Vector
- Criação do Espectrograma: Converte amostras IQ em espectrograma usando STFT, normalização RMS e recorte de frequência
- Extração de Características: Usa modelo ONNX para extrair características do canal
- Quantização de Características: Converte características em valores binários usando limiares configuráveis
- Geração de Paridade: Gera bits de paridade Reed-Solomon para correção de erros
- Reconciliação de Chave: Corrige erros usando bits de paridade
- Amplificação de Privacidade: Aplica hashing SHA3-512 para geração da chave final
- Saída: Comunicação baseada em stream entre os blocos
Requisitos do Modelo
Seu modelo ONNX deve:
- Aceitar formato de entrada:
(batch, 204, 31) para dados de espectrograma
- Produzir vetores de características de comprimento 512
- Ser compatível com ONNX Runtime
- Suportar entrada/saída float32
Solução de Problemas
Problemas Comuns
- Modelo não encontrado: Certifique-se de que o caminho para QExtractor.h5 está correto
- Erros do TensorFlow: Verifique a instalação e compatibilidade do TensorFlow
- Problemas de memória: Reduza spectrogram_size para menor uso de memória
- Desempenho: Use aceleração por GPU se disponível
Saída de Debug
O bloco fornece informações extensivas de debug:
- Saída no console para status de processamento
- Portas de mensagem para resultados intermediários
- Tratamento de erros com mensagens informativas
Desenvolvimento
Adicionando Novas Funcionalidades
- Modifique o bloco especializado apropriado (ex.:
spectrogram_block.py)
- Atualize a definição correspondente do bloco GRC em
grc/
- Recompile o módulo
- Teste com exemplos
Testes
Execute o script de exemplo:
cd examples
python3 fingerprint_example.py
Licença
Este projeto está licenciado sob a Licença GPL-3.0-or-later.
Contribuindo
- Faça um fork do repositório
- Crie um branch de funcionalidade
- Faça suas alterações
- Adicione testes se aplicável
- Envie um pull request
Suporte
Para problemas e dúvidas:
- Verifique a seção de solução de problemas
- Revise os arquivos de exemplo
- Abra uma issue no repositório
- Contate a equipe de desenvolvimento
Agradecimentos
- Baseado na pesquisa de fingerprinting de canal PHYSEC
- Usa TensorFlow para inferência de deep learning
- Integra-se com GNU Radio para processamento SDR