[descargo de responsabilidad: soy un profesional de seguridad / criptografía y trato con preguntas de arquitectura de seguridad como esta todos los días].
Te has topado con el problema de almacenar credenciales de tal manera que un proceso desatendido puede acceder a ellas, pero un atacante no puede. Este es un problema bien conocido y muy difícil de resolver.
Si su dispositivo IoT tiene un almacén de claves de hardware integrado en la placa base, como algunos TPM, o el equivalente al Keystore con respaldo de hardware de Android o Apple Secure Enclave, puede usarlo.
Con los servidores tradicionales, puede usar HSM o tarjetas inteligentes, pero la única solución de software completa que conozco es derivar una clave AES de algún tipo de "huella digital de hardware" creada combinando números de serie de todos los dispositivos de hardware. Luego use esa clave AES para cifrar las credenciales. Un proceso que se ejecuta en el mismo servidor puede reconstruir la clave AES y descifrar las credenciales, pero una vez que extrae el archivo del servidor, esencialmente no se puede descifrar.
IoT arroja una llave en eso por dos razones:
La suposición de que los números de serie del hardware son únicos probablemente no se cumple, y
A diferencia de los servidores, los atacantes tienen acceso físico al dispositivo, por lo tanto, probablemente puedan obtener un shell en el dispositivo para ejecutar el programa de descifrado.
Tanto el cifrado de hardware (TPM) como el cifrado de "huella digital de hardware" son ofuscación en el mejor de los casos porque, fundamentalmente, si un proceso local puede descifrar los datos, un atacante capaz de ejecutar ese proceso local también puede descifrarlos.
Así que el truco estándar parece que no funciona aquí. La primera pregunta que debe hacerse es:
- ¿Cuál es mi modelo de amenaza / dónde se ubica este proyecto en la
Secure <--> Convenient
escala?
En última instancia, creo que debe decidir eso security > convenience
y hacer que un humano ingrese las credenciales después de cada arranque (usando algo como la respuesta de @ BenceKaulics ), o decide eso security < convenience
y simplemente coloca las credenciales en el dispositivo, tal vez usando algo de ofuscación si Siento que eso hace la diferencia.
Este es un problema difícil que se hace más difícil por la naturaleza de los dispositivos IoT.
Para completar, la solución industrial completa a este problema es:
- Dele a cada dispositivo IoT una clave pública RSA única en el momento de la fabricación. Registre esta clave pública en una base de datos contra el número de serie del dispositivo.
- Almacene las credenciales confidenciales en un servidor adecuado, llamémosle una "puerta de enlace".
- Cuando un dispositivo IoT se autentica en la puerta de enlace (usando su clave RSA), la puerta de enlace abre una sesión para él usando las credenciales almacenadas y devuelve el token de sesión al dispositivo.
- Para una mejor seguridad, la puerta de enlace es una puerta de enlace física (o VPN) para que todo el tráfico del dispositivo IoT pase a través de la puerta de enlace y usted tenga más control sobre las reglas del firewall y otras cosas, idealmente evitando que el dispositivo tenga acceso directo (sin túnel VPN) acceso a Internet.
De esta manera, un atacante que comprometa un dispositivo puede abrir una sesión, pero nunca tiene acceso directo a las credenciales.