La mia azienda sviluppa un prodotto IoT connesso a WiFi. Voglio assicurarmi che il processo di acquisizione delle credenziali WiFi dell'utente nel dispositivo sia il più sicuro possibile. Al momento, il prodotto è in una fase di prototipo, quindi possiamo (e lo faremo) apportare ulteriori modifiche prima che colpisca il mercato.
Al momento, il processo è il seguente:
- Il dispositivo crea il proprio hotspot WiFi. Le credenziali per questo hotspot sono stampate su un'etichetta sul dispositivo stesso.
- L'utente visita un determinato URL (una pagina Web servita da un server Web incorporato sul prodotto, utilizzando un semplice HTTP)
- L'utente inserisce le sue credenziali WiFi in un modulo su quella pagina
- Il dispositivo salva quelle credenziali e le usa per connettersi al WiFi dell'utente
Diversi ragazzi della compagnia pensano che sia sicuro. Un utente malintenzionato dovrebbe entrare nell'hotspot per individuare le credenziali WiFi dell'utente.
Non sono d'accordo poiché penso che entrare nel WiFi sia un ostacolo piuttosto basso. L'utente malintenzionato avrebbe potuto dare un'occhiata alle credenziali dell'etichetta durante una visita, forzare brutemente l'accesso all'hotspot WiFi o sfruttare un punto debole dell'autenticazione dell'hotspot WiFi ( non inaudito ). Suggerisco di cambiare il processo in modo che appaia come segue:
- La società crea un certificato radice SSL autofirmato.
- Utilizziamo questo certificato radice per firmare i singoli certificati univoci per ogni prodotto venduto. Il certificato del prodotto e la chiave privata sono incorporati nella memoria flash durante la produzione.
- L'utente visita il nostro sito Web e scarica il certificato di root e lo installa nel suo sistema operativo.
- Il dispositivo crea il proprio hotspot WiFi. Le credenziali per questo hotspot sono stampate su un'etichetta sul dispositivo stesso.
- L'utente visita un determinato URL (una pagina Web servita da un server Web incorporato sul prodotto, utilizzando HTTPS e il certificato univoco del dispositivo. Il browser si fida del certificato poiché il nostro certificato radice è installato.)
- L'utente inserisce le sue credenziali WiFi in un modulo su quella pagina. Le informazioni vengono inviate al dispositivo tramite il canale crittografato TLS.
- Il dispositivo salva quelle credenziali e le usa per connettersi al WiFi dell'utente
Penso che questo processo sia molto sicuro. Ma impone altri problemi:
- Come possiamo aggiornare il certificato di un dispositivo? Possibile, ma molto ingombrante e molto impegnativo.
- L'utente deve installare manualmente un certificato. Questo non è molto user-friendly e gli utenti meno esperti di tecnologia potrebbero non riuscire a farlo correttamente anche se forniamo istruzioni molto dettagliate.
Le mie domande:
- Il processo suggerito è sufficientemente sicuro per un prodotto IoT (immaginalo come una sorta di misuratore di energia intelligente che misura il tuo consumo di elettricità)?
- C'è un modo per migliorare l'esperienza utente del processo (ad esempio, aggirando la necessità di installare il nostro certificato)?
- C'è un modo per migliorare il processo in termini di complessità di implementazione per noi (senza compromettere la sicurezza dell'utente)?
- Esistono modi alternativi per ottenere le credenziali WiFi sul nostro dispositivo? Non possiamo utilizzare il Bluetooth e il dispositivo non ha né schermo né tastiera.