← Home
Scarica Switch to English

Sicurezza

Come funzionano autenticazione e cifratura in WFAS e quali sono i loro limiti. Leggi prima il disclaimer qui sotto.

Da leggere prima: software sperimentale, senza audit di sicurezza

WFAS è un progetto personale di uno studente di ingegneria. Le sue funzioni di sicurezza (autenticazione a chiave, cifratura ChaCha20-Poly1305, controlli anti-replay) sono un'implementazione sperimentale che ho scritto io stesso mentre imparavo. Non sono mai state sottoposte ad alcun audit di sicurezza formale né a una revisione indipendente.

Il software è fornito "così com'è", senza garanzie di alcun tipo, secondo i termini delle sue licenze. Se trovi un problema, ti sarei grato se lo segnalassi su GitHub.

Tre modalità di autenticazione

Nessuna

Nessun controllo. Chiunque si trovi sulla stessa rete e possa raggiungere il server può connettersi, quindi ha senso solo su una rete che controlli completamente.

Approvazione manuale

Ogni nuovo dispositivo che tenta di connettersi viene bloccato e richiede la tua conferma manuale sullo schermo del server.

Chiave condivisa

I dispositivi dimostrano di conoscere la stessa chiave, senza inviare la chiave stessa sulla rete.

Utilizza challenge-response basato su HMAC-SHA256.

Cifratura opzionale

L'audio inviato sul protocollo nativo può essere cifrato con ChaCha20-Poly1305, un algoritmo di cifratura autenticata standardizzato dall'IETF (RFC 8439). L'algoritmo in sé è molto studiato, ma la mia implementazione, e quella del protocollo che lo circonda, non è stata sottoposta ad audit e non posso escludere errori. Per attivarla, seleziona la modalità di sicurezza Chiave (Key) nella schermata Send (Server), imposta la passphrase e attiva lo switch della cifratura.

Protezione anti-replay

Oltre alla cifratura, il ricevitore è progettato per riconoscere e scartare i pacchetti audio duplicati, fuori ordine o rigiocati, usando i timestamp. Questo meccanismo non è stato revisionato in modo indipendente.

SENDER RECEIVER ENCRYPTED REPLAY PKT
void wfas_encrypt (packet* p) { chacha20_poly1305_seal ( p->data , p->len, shared_key , p->nonce ); } bool verify_auth (client* c) { return hmac_sha256 ( c->challenge , key ) == c->response; } void wfas_encrypt (packet* p) { chacha20_poly1305_seal ( p->data , p->len, shared_key , p->nonce ); } bool verify_auth (client* c) { return hmac_sha256 ( c->challenge , key ) == c->response; }

Specifica pubblica

La specifica del protocollo WFAS v2, inclusi i dettagli crittografici, le fasi di handshake e le primitive utilizzate, è pubblica su GitHub. Pubblicarla non la rende sicura, ma permette ad altri di rivederla, e accoglierei volentieri correzioni.

Leggi la specifica completa su GitHub →

Limiti noti

In modalità di streaming Multicast, la cifratura si basa su una chiave statica condivisa preventivamente fra tutti i client, quindi ogni dispositivo che possiede quella chiave può decifrare il flusso. Può essere accettabile su una rete domestica di cui ti fidi, ma non è pensata né consigliata per reti Wi-Fi pubbliche, aziendali o non fidate. Potrebbero esserci altre debolezze di cui non sono a conoscenza, ed è per questo che in cima alla pagina c'è il disclaimer.

Privacy

Leggi l'informativa privacy completa →
Nota su sicurezza e cifratura

La funzionalità di cifratura opzionale di WFAS è fornita "COSÌ COM'È" ed è destinata principalmente come livello leggero di privacy e protezione del traffico per reti locali fidate (LAN/P2P). È un'implementazione sperimentale scritta da uno studente come progetto di apprendimento e non è stata sottoposta ad alcun audit formale.

Non è destinata a fornire protezione contro aggressori ad alto rischio, reti ostili o ambienti critici per la sicurezza, e non deve essere utilizzata come sostituto di un trasporto sicuro dedicato o di altri meccanismi di sicurezza dove sono richieste garanzie più forti.

Utenti e integratori sono responsabili di valutare se le proprietà di sicurezza di WFAS e il proprio ambiente di rete siano appropriati per l'uso previsto.

Il protocollo WFAS e le sue implementazioni di riferimento sono forniti nei termini delle rispettive licenze open source. Non sono implicite garanzie di sicurezza aggiuntive al di là di quelle esplicitamente documentate dal protocollo e dall'implementazione.

Se trovi un problema di sicurezza, ti chiedo di segnalarlo tramite i repository GitHub così che possa esaminarlo. Mantengo il progetto da solo nel tempo libero, quindi le risposte possono richiedere del tempo.