Estoy tratando de encontrar una forma de autenticar un dispositivo IoT en un servidor. Dado que el dispositivo no está "monitoreado", no puedo esperar que un usuario ingrese una contraseña en el dispositivo cada vez que el dispositivo se inicie o reinicie.
No me preocupa demasiado el robo de dispositivos, pero me preocupa que el dispositivo se clone y que la copia se haga pasar por el original.
El dispositivo ejecutará Android y, según tengo entendido, es difícil copiar el almacén de claves de Android (corríjame si me equivoco). Se puede solicitar al almacén de claves que firme un valor HMAC, sin exponer la clave de firma.
- Si utilizo una clave secreta regular como contraseña de autenticación, esa clave se puede extraer del almacén de claves y copiar al clon.
- Si, por el contrario, uso TOTP, puedo presentar el valor de tiempo actual en el almacén de claves y hacer que HMAC tenga ese valor, luego continuar con el resto del protocolo TOTP, como se define en RFC 6238 .
- Puedo usar el cifrado de clave pública y hacer que el almacén de claves firme algún valor (como "sí, soy yo"), y luego hacer que el servidor verifique que la firma es válida, pero eso sería vulnerable a un administrador. Ataque central seguido de un ataque de repetición. Podría hacer que el dispositivo firme un desafío proporcionado por el servidor, pero eso requiere un viaje de ida y vuelta extra para cada autenticación.
Planeo usar TLS para todas las conexiones.
Vi las respuestas en " ¿Cuáles son las implicaciones de seguridad de usar TOTP para la autenticación de un solo factor? " , pero quiero confirmar que estoy seleccionando un esquema razonable para IoT.
¿Son correctas mis suposiciones? ¿Existe una forma mejor y más segura de autenticar un dispositivo?