[dichiarazione di non responsabilità: sono un professionista della sicurezza / crittografia e mi occupo di domande di architettura di sicurezza come questa ogni giorno.]
Ti sei imbattuto nel problema di archiviare le credenziali in modo tale che un processo incustodito possa accedervi, ma un attaccante non può. Questo è un problema ben noto e molto difficile da risolvere.
Se il tuo dispositivo IoT ha un keystore hardware integrato nella scheda madre, come alcuni TPM, o l'equivalente del Keystore supportato da hardware Android o Apple Secure Enclave, puoi usarlo.
Con i server tradizionali è possibile utilizzare HSM o Smart Card, ma l'unica soluzione software di cui sono a conoscenza è derivare una chiave AES da una sorta di "impronta digitale hardware" costruita combinando i numeri di serie di tutti i dispositivi hardware. Quindi utilizzare quella chiave AES per crittografare le credenziali. Un processo in esecuzione sullo stesso server può ricostruire la chiave AES e decrittografare le credenziali, ma una volta estratto il file dal server, è essenzialmente non decodificabile.
IoT lancia una chiave in questo per due motivi:
Il presupposto che i numeri di serie dell'hardware siano univoci probabilmente non regge, e
A differenza dei server, gli aggressori hanno accesso fisico al dispositivo, quindi probabilmente possono ottenere una shell sul dispositivo per eseguire il programma di decodifica.
Sia la crittografia hardware (TPM) sia la crittografia "hardware fingerprint" sono al massimo offuscate perché, fondamentalmente, se un processo locale può decrittografare i dati, anche un utente malintenzionato in grado di eseguire quel processo locale può anche decrittografarlo.
Quindi il trucco standard sembra che non funzioni qui. La prima domanda che devi porsi è:
- Qual è il mio modello di minaccia / dove si colloca questo progetto sulla
Secure <--> Convenient
scala?
In definitiva, penso che sia necessario decidere che security > convenience
e avere un essere umano inserire le credenziali dopo ogni avvio (usando qualcosa come la risposta di @ BenceKaulics ), oppure decidere security < convenience
e mettere le credenziali sul dispositivo, magari usando qualche offuscamento se si sento che fa la differenza.
Questo è un problema difficile reso più difficile dalla natura dei dispositivi IoT.
Per completezza, la soluzione industriale completa a questo problema è:
- Assegna a ciascun dispositivo IoT una chiave pubblica RSA univoca al momento della produzione. Registrare questa chiave pubblica in un db con il numero di serie del dispositivo.
- Memorizza le credenziali sensibili su un server appropriato, chiamiamolo "gateway".
- Quando un dispositivo IoT si autentica sul gateway (utilizzando la sua chiave RSA), il gateway apre una sessione per esso utilizzando le credenziali archiviate e restituisce il token di sessione al dispositivo.
- Per la massima sicurezza, il gateway è un gateway fisico (o VPN) in modo che tutto il traffico dal dispositivo IoT passi attraverso il gateway e si abbia un maggiore controllo sulle regole e sugli elementi del firewall, impedendo idealmente al dispositivo di avere un tunnel diretto (non VPN) accesso a internet.
In questo modo e un utente malintenzionato che compromette un dispositivo può aprire una sessione, ma non ha mai accesso diretto alle credenziali.