Sto cercando di trovare un modo per autenticare un dispositivo IoT su un server. Poiché il dispositivo è "non monitorato", non posso aspettarmi che un utente inserisca una password sul dispositivo ogni volta che il dispositivo si avvia o si riavvia.
Non sono eccessivamente preoccupato per il furto del dispositivo, ma sono preoccupato per il fatto che il dispositivo sia clonato e la copia che impersona l'originale.
Il dispositivo funzionerà con Android e, a quanto ho capito, il keystore Android è difficile da copiare (correggimi se sbaglio). Al keystore può essere richiesto di firmare un valore HMAC senza esporre la chiave di firma.
- Se utilizzo una normale chiave segreta come password di autenticazione, tale chiave può essere estratta dal keystore e copiata nel clone.
- Se invece utilizzo TOTP, posso presentare il valore temporale corrente al keystore e farlo assegnare a HMAC, quindi procedere con il resto del protocollo TOTP, come definito in RFC 6238 .
- Posso usare la crittografia a chiave pubblica e fare in modo che il keystore firmi un certo valore (come "sì, sono io"), e poi fare in modo che il server verifichi che la firma sia valida, ma che sia vulnerabile a un utente attacco centrale seguito da un attacco di replay. Potrei fare in modo che il dispositivo firmi una sfida fornita dal server, ma ciò richiede un round trip aggiuntivo di rete per ogni autenticazione.
Ho intenzione di utilizzare TLS per tutte le connessioni.
Ho visto le risposte fornite in " Quali sono le implicazioni sulla sicurezza dell'uso del TOTP per l'autenticazione a fattore singolo? " , ma voglio confermare che sto selezionando uno schema ragionevole per l'IoT.
Le mie supposizioni sono corrette? C'è un modo migliore e più sicuro per autenticare un dispositivo?