Sicurezza adeguata per dispositivo IoT

2

Sto sviluppando un prodotto con MCU Cortex-M semplice (senza OS a bordo, firmware su bare metal) e connettività internet tramite modulo esterno.
Come posso renderlo sicuro? In particolare, come posso proteggere i dati inviati al e dal server remoto?

I miei pensieri sono:

  1. Non posso presumere che il firmware possa essere protetto; poiché tutti gli utenti avranno accesso fisico ad esso - alla fine troveranno un modo per scaricarlo. La protezione da lettura flash non funzionerà, la crittografia del flash non impedirà di scaricarla dalla RAM o altro.
  2. L'utilizzo di flash / eeprom crittografati esterni non funzionerà per gli stessi motivi.
  3. Affidarsi a HTTPS sul chip esterno non sarà sufficiente perché il modulo esterno è collegato alla MCU tramite UART e può essere facilmente annusato o manomesso.

Ho una conoscenza di base della crittografia, ma so che non dovrei inventare il mio, quindi presumo che dovrò crittografare tutti i dati che vengono inviati al server da una nota crittografia a chiave pubblica. Probabilmente usando le chiavi di sessione. Ma questo richiede ancora l'uso di una chiave segreta master sul dispositivo e non so come memorizzarlo in modo sicuro a causa di 1).

Qualche idea? Esiste una soluzione bulletproof nota?

O dovrei semplicemente generare chiavi casuali per ogni dispositivo (non derivato dall'ID del dispositivo o qualcosa del genere)? Quindi, se un dispositivo è compromesso, non avrà effetto sull'intera rete - e questo è tutto?

UPD: Chiarimento: non voglio consentire al proprietario del dispositivo di imitare altri dispositivi e caricare dati falsi (su altri dispositivi) nel database.

    
posta Amomum 13.10.2018 - 20:59
fonte

2 risposte

1

Se il problema è che non vuoi che nessun dispositivo impersoni altri, il problema è semplice e già risolto. Basta guardare tutti i singoli servizi online che hanno utenti e non vogliono che un utente acceda ai dati appartenenti ad altri utenti: l'autenticazione.

Devi usare TLS, questo è il primo punto. Senza TLS stai costruendo un castello sulla sabbia.

Secondo: avere una procedura di iscrizione che i dispositivi seguiranno quando si connetteranno per la prima volta e non hanno ancora una coppia di chiavi: generane una nuova, inviate al server. Ogni volta che il dispositivo invia qualcosa, è necessario firmare i dati con la relativa chiave, in modo che il server sappia che è legittimo.

Un utente malintenzionato sarà in grado di imitare i dispositivi che possiede o di accedere fisicamente e non c'è modo di aggirarlo. Ma non possono impersonare nessun altro, nemmeno con l'accesso al tuo database.

    
risposta data 14.10.2018 - 04:05
fonte
1

More specifically, how do I protect the data that is sent to and from the remote server?

Non sono sicuro di aver capito correttamente la tua domanda. Ma capisco la parte precedente che si desidera proteggere i dati in transito tra client e server. In questo caso è sufficiente HTTPS (o TLS normale). Ciò utilizzerà automaticamente diverse chiavi di crittografia per diverse sessioni TLS (in cui la sessione TLS avrà la stessa durata della connessione TCP a meno che non venga utilizzato il resume di sessione), quindi il rischio che si immagina di avere la stessa chiave di crittografia su tutti i dispositivi non esiste. p>

Ma HTTPS o TLS non proteggono da qualcuno che ha accesso fisico al dispositivo e intercetta i dati lì prima della crittografia e dopo la decrittografia. Protegge solo i dati in transito.

    
risposta data 13.10.2018 - 21:59
fonte

Leggi altre domande sui tag