La prima cosa da fare è definire cosa intendi con "sicuro e autenticato". Devi mettere in parole chi sono gli aggressori, cosa possono fare e cosa impedire loro di fare.
Su esempio di un modello di attacco di questo tipo è il seguente:
- Gli attaccanti sono estranei. Essi origliano sul canale comune (le onde radio). Vogliono ottenere i dati confidenziali che i membri del gruppo si scambiano l'uno con l'altro. I membri del gruppo si fidano l'un l'altro.
Se questo è il modello di attacco, allora è sufficiente creare un K segreto condiviso, che tutti i membri del gruppo ma nessun hacker conoscono e quindi crittografare i pacchetti con un algoritmo di crittografia simmetrica (per esempio, AES in una modalità adatta) usando K come chiave. La distribuzione iniziale di K può essere eseguita avendo ciascun membro del gruppo proprietario di una coppia di chiavi RSA; un membro del gruppo genera K in modo casuale, lo crittografa con la chiave pubblica di ciascun membro del gruppo e trasmette quello.
Ora estendiamo il modello di attacco in un altro :
- Gli attaccanti sono estranei. Essi origliano sul canale comune, ma tentano anche di inviare messaggi falsi, a volte riproducendo messaggi precedenti, con o senza alterazioni. Tali istanze di messaggi falsi / ripetuti devono essere rilevate e rilasciate in modo affidabile dai membri del gruppo.
Ora hai bisogno anche di un MAC per ogni pacchetto (in modo che gli aggressori possano solo riprodurre i pacchetti precedenti, non creare nuovi quelli o alterare i pacchetti esistenti), e una sorta di contesto di connessione in modo che vengano rilevati attacchi di riproduzione . Questo può essere fatto incorporando una sorta di data / ora o contatore in ogni pacchetto: ciascun partecipante ricorda i valori del contatore per gli ultimi pacchetti ricevuti, rifiutando pacchetti che sono già stati visti o che hanno un valore contatore "troppo vecchio". Tali meccanismi sono spesso definiti basati sulla finestra e c'è un certo equilibrio tra la prevenzione degli attacchi di replay, i requisiti di memoria (per ricordare i pacchetti precedenti) e la tolleranza alla perdita di pacchetti dovuta alla natura inaffidabile del mezzo di trasporto . Leggi DTLS come esempio di come il protocollo SSL / TLS può essere adattato a supporti inaffidabili basati su pacchetti.
Se l'autore dell'attacco può provare a inviare messaggi falsi, potrebbe anche essere in grado di pubblicizzare una chiave pubblica RSA falsa. La distribuzione di chiavi pubbliche è una questione di Public Key Infrastructure , con certificati essere la solita soluzione.
Forse vogliamo di più ? Ad esempio, che dire di quanto segue:
- I membri del gruppo sono anche attaccanti. Ogni membro del gruppo proverà a intercettare e / o interferire con le comunicazioni one-to-one tra gli altri membri del gruppo.
In tal caso, avrai bisogno di scambi di chiavi a coppie. Per ogni coppia di membri del gruppo A e B , ci deve essere un segreto condiviso K A, B che altro i membri del gruppo e gli estranei non lo sanno. Questo può ancora essere sfruttato da coppie di chiavi RSA pre-distribuite: quando A vuole parlare con B e non hanno già un segreto condiviso (o hanno dimenticato un precedente segreto condiviso, ad esempio B ha riavviato il suo computer e quel segreto condiviso era solo nella RAM), quindi A genera una nuova chiave casuale K A, B e lo crittografa con la chiave pubblica di B .
Di nuovo, leggi l'intero TLS e DTLS standard: sono abbastanza leggibili e questo ti mostrerà a cosa devi pensare.