Sviluppiamo un protocollo per il controllo remoto da computer di un certo tipo di giocattolo. È fondamentalmente una rete di sensori e attori che di solito è collegata al PC dell'utente tramite porta seriale o USB. Ora alcuni utenti desiderano connettersi tramite Ethernet e vogliamo progettare una sorta di gateway in un dispositivo incorporato.
È previsto che venga utilizzato solo nelle LAN domestiche (ad esempio dai dispositivi mobili tramite un router WiFi), ma non dovrebbero essere considerati sicuri e c'è sempre la possibilità di essere esposti a Internet. I rischi coinvolti sono molteplici:
- quei giocattoli sono costosi e potrebbero essere distrutti dall'abuso
- l'ambiente potrebbe essere danneggiato da problemi con gli alimentatori degli attori
- i dispositivi sono in grado di aggiornamenti del firmware (non protetti) e potrebbero essere rilevati o murati
- disturbo generico dell'operazione di servizio
- intercettazioni su dati privati
Il dispositivo gateway incorporato potrebbe esporre un tipo di server che accetta connessioni, che devono essere limitate a quelle autorizzate. Come fare questo?
Dopo l'idea iniziale di avvolgere il nostro protocollo seriale in pacchetti UDP (per bassa latenza e basso sovraccarico), abbiamo considerato TCP di evitare di occuparsi della perdita di pacchetti nelle reti wireless. TLS è il prossimo passo logico, che fornisce la crittografia 1 . Ma come eseguire l'autenticazione e l'autorizzazione?
Il TLS è applicabile a tutti, se utilizzato in un contesto non web? Non abbiamo necessariamente nomi di host o persino l'accesso a Internet e non so come convalidare i certificati. Non possiamo usare una CA, quindi la nostra PKI sarebbe diversa e non so quali buchi di sicurezza vengano introdotti gestendo manualmente i certificati. Probabilmente è già abbastanza di un problema per ottenere ogni server - ogni dispositivo - il proprio certificato generato casualmente. (Ho anche trovato questi due domande che trattano problemi simili)
Un qualche tipo di processo di accoppiamento (simile a Bluetooth o WPS) risolverebbe il problema con certificati non convalidati? Il dispositivo incorporato sarebbe dotato di un semplice pulsante per accettare un client 2 e il client dovrebbe ricordare ("pin"?) Il certificato del server. Questa prima connessione sarebbe suscettibile a un attacco MITM, ma le connessioni successive non lo farebbero. Suona valido e sicuro? Sono dubbioso sui programmi fatti in casa.
Un'alternativa all'accoppiamento che ho considerato sarebbe uno schema di autorizzazione della password, in cui il client invia una password al server per ottenere l'accesso. 3 Tuttavia, gli utenti tendono a scegliere password deboli, e anche io non ho idea di come (cioè quale protocollo utilizzare) per inviare la password tramite la connessione non protetta - non avendo ancora convalidato alcun certificato -, evitando attacchi MITM o replay.
Per favore aiutami a trovare una buona soluzione - rispondendo alle domande di cui sopra o suggerendo un approccio completamente diverso che mi mancava del tutto. I nostri principali obiettivi / restrizioni sono:
- buona usabilità anche per utenti non tecnici - senza alcuna manutenzione amministrativa
- implementazione semplice con librerie ampiamente disponibili per molti linguaggi di programmazione
- alto livello di sicurezza (se necessario, ignorando la fase di configurazione dove potrebbe essere impossibile)
1: finché usato con le giuste impostazioni, ho raccolto.
2: Suppongo che non dobbiamo dimenticare un modo per rimuovere i client
3: con la password iniziale assegnata in modo casuale a ciascun dispositivo e stampata in basso