Protocolo de Mensagens
Formato de frames, tipos de mensagem, priorização e mecanismos de segurança. Otimizado para as limitações do LoRa.
O protocolo SIREN define o formato das mensagens trocadas na rede mesh. Foi desenhado para ser compacto devido às limitações de payload do LoRa, seguro através de assinaturas em todas as mensagens, e extensível para futuras necessidades.
Estrutura do Frame
Cada mensagem segue um formato binário compacto otimizado para LoRa.
┌─────────────────────────────────────────────────────────────┐
│ SIREN Message Frame │
├──────┬──────┬──────┬──────┬──────────┬──────────┬───────────┤
│ Ver │ Type │ Flags│ TTL │ Source │ Dest │ Timestamp │
│ 1B │ 1B │ 1B │ 1B │ 8B │ 8B │ 4B │
├──────┴──────┴──────┴──────┴──────────┴──────────┴───────────┤
│ Nonce (8B) │
├──────────────────────────────────────────────────────────────┤
│ Payload (0-180B) │
├──────────────────────────────────────────────────────────────┤
│ Signature (64B) │
└──────────────────────────────────────────────────────────────┘
Total: 96B header + payload + 64B signature = 160-340B
| Campo | Tamanho | Descrição |
|---|---|---|
| Version | 1B | Versão do protocolo |
| Type | 1B | Tipo de mensagem |
| Flags | 1B | Opções da mensagem |
| TTL | 1B | Time-To-Live (max 7 saltos) |
| Source | 8B | ID do nó origem |
| Destination | 8B | ID do nó destino |
| Timestamp | 4B | Unix timestamp |
| Nonce | 8B | Valor único anti-replay |
| Payload | 0-180B | Dados da mensagem |
| Signature | 64B | Assinatura Ed25519 |
Tipos de Mensagem
O protocolo suporta diferentes tipos de mensagens para diversos casos de uso.
0x01EMERGENCY
Alerta de emergência (broadcast)
0x02SOS
Pedido de socorro com localização
0x03STATUS
Relatório de estado
0x04MESSAGE
Mensagem ponto-a-ponto
0x05BEACON
Anúncio de presença
0x06ACK
Confirmação de receção
0x10TRUST_VERIFY
Verificação de confiança
0x11TRUST_VOUCH
Atestação de outro nó
Flags de Mensagem
O byte de flags controla o comportamento da mensagem.
Requires ACK
Solicita confirmação
Encrypted
Payload cifrado
Compressed
Payload comprimido
Fragmented
Mensagem fragmentada
Priority
Alta prioridade
Reserved
Reservado para futuro
Níveis de Prioridade
As mensagens são processadas por ordem de prioridade.
Máxima
EMERGENCY, SOS
Alta
ACK, TRUST_*
Normal
STATUS, QUERY, RESPONSE
Baixa
MESSAGE
Mínima
BEACON
Mensagens Grandes
Para payloads superiores a 180 bytes, a mensagem é fragmentada.
┌──────────┬──────────┬──────────┬─────────────────┐
│ Frag ID │ Frag Num │ Total │ Fragment │
│ 2B │ 1B │ 1B │ 0-176B │
└──────────┴──────────┴──────────┴─────────────────┘
Timeout de reassembly
30 segundos
Cifragem End-to-End
Para mensagens privadas, o payload pode ser cifrado opcionalmente.
Key Exchange
X25519 ECDH
Key Derivation
HKDF-SHA256
Encryption
ChaCha20-Poly1305
Proteção Anti-Replay
Cada nó mantém mecanismos de proteção contra replay attacks.
Janela Temporal
±5 minutos
Mensagens fora desta janela são rejeitadas automaticamente.
Cache de Nonces
1000 mensagens
Bloom filter para deteção eficiente de nonces duplicados.
Mensagens são rejeitadas se:
- O timestamp estiver fora da janela temporal
- O nonce já tiver sido visto anteriormente
- A assinatura Ed25519 for inválida