Autentica dispositivo di localizzazione con server TCP

3

Sto costruendo un dispositivo di localizzazione e sto cercando un metodo di autenticazione sicuro da utilizzare quando il dispositivo vuole stabilire una connessione al server.

Il server è un server TCP che apriamo una connessione con oltre TLS. Utilizziamo TLS per crittografare il traffico tra il dispositivo e il server per escludere la possibilità che i dati vengano rilevati da un hacker. Il dispositivo stabilisce una connessione con il server utilizzando i dati della rete mobile dalla SIM integrata.

Se il dispositivo è fisicamente compromesso, questo non è un problema (non ci preoccupiamo di impedirlo, come se avessero perso il dispositivo, ma non è la loro posizione). Inoltre, poiché utilizziamo TLS, non dobbiamo preoccuparci di qualcuno che esegue la scansione delle comunicazioni tra il dispositivo e la rete mobile. La preoccupazione principale è impedire a qualcuno di spoofing / emulare uno dei dispositivi di tracciamento. Non vogliamo che gli hacker impostino la posizione del dispositivo di localizzazione di un altro utente.

Sarebbe sufficiente fornire un ID dispositivo e una password hash sicura che inviamo al server TCP per l'autenticazione (ovviamente unica per ogni dispositivo) quando viene stabilita una connessione? Non sono sicuro dei metodi di autenticazione qui e apprezzerei qualsiasi orientamento.

BOUNTY EDIT: alcuni commenti indicano che il modo migliore per farlo è attraverso i certificati client. Non ho alcuna conoscenza in questo settore e se questa è l'opzione migliore, sarebbe interessato a vedere una risposta spiegando questo in modo più dettagliato. Inoltre, su un sidenote completo, sarebbe una cattiva idea smettere di usare TLS nei nostri dispositivi e utilizzare un altro metodo che non include la crittografia? Siamo consapevoli del sovraccarico aggiuntivo che dovremmo sostenere quando utilizziamo TLS, quindi se esiste un altro metodo per proteggere l'autenticazione che non utilizza la crittografia, mi piacerebbe sentirlo. Dopotutto, quali sono le possibilità che qualcuno possa effettivamente annusare il traffico tra uno dei nostri dispositivi e una rete mobile e quindi utilizzare l'identità del dispositivo per inviare coordinate dannose / false?

    
posta jskidd3 25.04.2016 - 17:25
fonte

1 risposta

2

Universally Unique ID v 4 con pre-registrazione del dispositivo che suona proprio per questo tipo di applicazione. Quando un dispositivo è in fabbrica, si accende il firmware con un UUID al suo interno. Quindi si registra l'UUID con il DB. Se l'UUID esiste, ne generi e ne crei uno nuovo.

Questo dovrebbe essere esattamente quello che vuoi perché ora se qualcuno afferra un dispositivo, non hanno IDEA su quali altri dispositivi siano mai stati creati o su come impersonare quel dispositivo senza fare tante supposizioni quanti sono gli atomi nell'universo. Meglio ancora, puoi criptare questo UUID in una sorta di cookie permanente sul lato utente (come JWT) che viene inviato e può essere decodificato solo sul server e non deve mai essere modificato dal client.

Ora il migliore che una persona che ha rubato può fare è impersonare quel dispositivo ... e la domanda diventa allora a quale fine? Hai già dichiarato che se ciò accade non ti interessa più.

La pre-registrazione dei dispositivi è simile alle chiavi dei client privati e svolge quasi lo stesso ruolo. Sono semplicemente più facili da implementare poiché non è necessario eseguire un controllo extra in SSL. Devi solo decodificare il cookie che viene inviato e mai cambiato e verificarlo come dispositivo in un data-store da qualche parte. Meglio ancora potresti anche avere un modo per aggiornare il valore di questo cookie negli aggiornamenti OTA per cambiarlo ogni tanto con una sorta di dati inutili che non cambiano l'UUID.

E se sei preoccupato per il sovraccarico, questo può essere fatto con uno script che genera l'UUID, controlla se è nel database, rigenera se necessario o memorizza, quindi genera il cookie e infine modifica il firmware e lampeggia il valore nello spazio cookie permanente. Quindi diventa un'operazione di pulsante.

    
risposta data 28.04.2016 - 01:45
fonte

Leggi altre domande sui tag