Estoy usando un microprocesador: PIC32MZ2048efm144 MCU que recibe comandos encriptados con una clave específica , los descifra y ejecuta el comando. Los comandos encriptados se almacenan sin conexión , por lo que no puedo cambiar la clave cuando lo desee. La clave es FIJA . Los comandos son encriptados por un servidor y descargados por un teléfono . El teléfono envía los comandos cifrados a la MCU en un momento posterior, cuando no está en línea . Los comandos se cifran antes de que el teléfono los comunique a la MCU, por lo que no es posible una clave de sesión.
Puedo conectar un módulo externo de cifrado/descifrado al PIC, pero luego los datos pasarán descifrados en al menos una dirección.
La solución presentada aquí: almacenar una clave segura en la memoria de un dispositivo integrado
usa claves de un solo uso para cifrar, pero necesito almacenar una única clave supersecreta
Lo que requiere Mi empleador es que las claves no sean accesibles, por lo que no se considera protección física además de la que ofrecen los módulos de memoria segura y la MCU.
Suponiendo que no se utilice ningún equipo de grado militar, ¿hay alguna solución que conozcan y puedan recomendar?
¡Gracias por adelantado!
Lo siento, esta respuesta en realidad no resolverá su problema. Pero es demasiado largo para caber en un comentario, y le permitirá repensar su problema de la manera correcta (porque tal como está, creo que tiene fallas).
Este tipo de problemas deben resolverse teniendo en cuenta todos los componentes del sistema y haciendo suposiciones razonables sobre lo que un hacker potencial puede o no puede hacer.
Por ejemplo:
Usted dice: "el PIC32MZ2048efm144 (MCU) recibe comandos encriptados con una clave específica, los desencripta y ejecuta el comando". Supongo que el resultado de la ejecución del comando es alternar algunos GPIO para activar cosas.
Entonces, ¿por qué tiene miedo de que, potencialmente, algunos datos pasen descifrados entre la MCU y un módulo de cifrado/descifrado? Un pirata informático que tenga acceso al hardware para ver los comandos descifrados podría, de todos modos, actuar directamente sobre los GPIO de la MCU y "accionar las cosas" con la misma facilidad.
Segundo ejemplo:
Usar claves puntuales es una idea. Pero como dices, ¿dónde almacenas la clave maestra principal utilizada para generar las claves únicas? Te enfrentarás exactamente a las mismas preguntas que en tu problema original.
En realidad, no hay forma de hacer que su sistema sea seguro si supone que un pirata informático puede colarse potencialmente en cualquier ubicación de su sistema (que es lo que me parece que está asumiendo actualmente).
Entonces, ¿qué hace que un sistema sea seguro?
Una tarjeta inteligente se asegura porque no es razonable suponer que un pirata informático puede sondear las rutas internas dentro del IC, entre la memoria y el bloque de la CPU.
Una cerradura de puerta eléctrica se asegura porque no es razonable suponer que un pirata informático puede alcanzar los cables que activan la cerradura.
Etc... Básicamente, debe comenzar por identificar las cosas que un hacker no podrá hacer y, a partir de ahí, elaborar toda la solución. Por ejemplo, ¿es posible poner todo su sistema en una caja segura y físicamente resistente a la manipulación? En este caso, puede hacer que los comandos descifrados pasen libremente por un bus interno.
No se puede construir un sistema seguro sin saber qué es lo que el hacker no puede hacer razonablemente. No nos dijiste eso. Por lo tanto, no podemos proponer una solución completa.
Este parece un caso clásico en el que el cifrado de clave asimétrica sería útil. En el cifrado de clave asimétrica, tiene dos claves, una privada y una pública. Desea proteger completamente la clave privada, pero la clave pública puede hacerse pública y no necesita protección. es posible que pueda mantener la clave privada en el sistema seguro y la clave pública en el dispositivo integrado.
No explica por qué desea cifrar los comandos (en otras palabras, cuál es su modelo de amenaza). ¿Su propósito es evitar que un adversario en posesión del dispositivo basado en PIC determine cuáles son los comandos que se le envían? ¿O está tratando de evitar que el dispositivo basado en PIC ejecute un conjunto de comandos sustituidos por un adversario y solo le permite ejecutar comandos que se originan en su servidor?
Si es lo primero, se enfrenta a una tarea casi imposible: su dispositivo debe descifrar los comandos para poder ejecutarlos; la posesión del dispositivo PIC significa la posesión de la clave de descifrado. Un adversario puede extraer la clave (almacenada en el dispositivo PIC que posee), o simplemente esperar hasta que su firmware descifre los comandos y luego capturarlos de la memoria.
Si, por otro lado, solo está tratando de asegurarse de que su dispositivo solo ejecute comandos que se originen en su servidor, está de suerte. En este caso, puede utilizar el cifrado de clave pública (p. ej., RSA) o un esquema de firma digital de clave pública (p. ej., DSS). En estos, su dispositivo solo almacena la clave pública: esto es suficiente para descifrar los comandos (o verificar la firma digital), pero no se puede usar para cifrar comandos (o generar una firma digital) que el dispositivo aceptará. Eso requiere la clave privada, que usa para cifrar (o firmar) los comandos antes de enviarlos. La clave privada nunca necesita salir de su servidor. Aún mejor, cifre o firme los comandos en una máquina que no se comunica externamente y solo cópielos en el servidor para que la clave privada nunca se encuentre en un servidor accesible externamente.
keith
Sonia
pjc50
Sean Houlihane
jaskij
Sonia
keith