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:
- 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.
- L'utilizzo di flash / eeprom crittografati esterni non funzionerà per gli stessi motivi.
- 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.