Un po 'di contesto
Poiché stai utilizzando MQTT con AWS IoT, devi utilizzare i certificati X.509 per autenticazione e sicurezza. Amazon ha alcune indicazioni su come proteggere i certificati, quindi citerò qui:
I certificati consentono l'utilizzo di chiavi asimmetriche con i dispositivi. Ciò significa che puoi masterizzare le chiavi private in un archivio sicuro su un dispositivo senza mai lasciare che il materiale crittografico sensibile lasci il dispositivo.
Dal momento che stai utilizzando la protezione da lettura (RDP) dell'STM32, tutti gli aggressori tranne quelli più determinati avranno difficoltà ad accedere ai certificati nel tuo schema attuale:
La protezione globale della lettura consente al codice del firmware incorporato (precaricato nella memoria Flash) di proteggere da reverse engineering, dumping mediante strumenti di debug o altri mezzi di attacco intrusivo.
- Livello 0 - Nessuna protezione (impostazione predefinita)
- Livello 1 - La memoria flash è protetta dalla lettura tramite debug o dumping del codice mediante il codice RAM caricato
- Livello 2: tutte le funzionalità di debug sono disabilitate
Lo storage esterno sarà sicuro?
Probabilmente non è così sicuro . Se la chiave privata del tuo cliente viene rubata, un utente malintenzionato può inviare dati che sembrano provenire dal tuo dispositivo, quando in realtà non lo è. Sebbene non sia chiaro quali dati stai inviando, qualsiasi dato non attendibile può essere un rischio per la sicurezza.
Di quali bit ho bisogno per mantenere privato?
Quando crei un certificato dispositivo su AWS IoT, dovresti vedere un'immagine come questa:
Immagine dalla pagina Crea e attiva un certificato dispositivo della documentazione AWS IoT.
La chiave privata è ciò di cui hai veramente bisogno per mantenere ... privato , e, se possibile, dovrebbe essere sicuramente memorizzato nella memoria protetta da lettura. La chiave pubblica e il certificato sono progettati per essere condivisi, quindi se stai esaurendo lo spazio, puoi spostarli in sicurezza su un archivio esterno. Puoi ottenere un po 'più di contesto nella pagina Come funziona SSL / TLS? su Information Security Stack Exchange e crittografia a chiave pubblica su Wikipedia. Penso che ti farei un disservizio se non includessi questa immagine per spiegare perché la chiave privata deve essere segreta:
.
Immagine da Wikipedia , rilasciata nel pubblico dominio.
La chiave pubblica del dispositivo è ciò che AWS IoT utilizza per firmare i messaggi da inviare al dispositivo (ma non prova chi sta inviando il messaggio ). Quindi, davvero, non è un enorme disastro se qualcuno ruba la chiave pubblica, perché non è pensato per essere un segreto.
La chiave privata è ciò che il tuo dispositivo utilizza per decrittografare i messaggi, quindi è un problema leggermente più grande se un utente malintenzionato lo ruba.
Hai anche chiesto cosa sarebbe successo se l'attaccante avesse rubato il certificato RootCA. Se qualcuno rubasse la chiave privata di AWS IoT , sarebbe disastroso, ma il certificato RootCA sul tuo dispositivo non è quello . Quello RootCA.crt
che Amazon ti offre è completamente pubblico e lo scopo è quello di poter verificare che non sei stato attaccato in alcun modo (molto probabilmente un man-in-the-middle che finge di essere server AWS IoT).
Che danno potrebbe fare un dispositivo compromesso?
Il dispositivo rubato può eseguire solo le azioni elencate nella politica . Cerca di seguire il principio del privilegio minimo ; concedi al tuo dispositivo solo i privilegi di cui ha assolutamente bisogno , quindi se succede il peggio, non può causare il caos troppo. Per il tuo caso specifico:
La cosa è autorizzata a pubblicare solo 2 canali (il suo nome e un canale di feed di dati) che è collegato a un elaboratore di dati che ignorerà tutti i pacchetti non autorizzati che vi arrivano.
Quello è buono. Qualsiasi attacco dovrebbe essere isolato solo sui due argomenti MQTT su cui il dispositivo può pubblicare, quindi non causerà danni su larga scala.