Estoy diseñando el procedimiento de actualización para cámaras IP. Me pregunto si mi diseño actual es lo suficientemente seguro.
Tengo un archivo binario que quiero acceder a un dispositivo. Hago un hash de este archivo binario y cifro el hash con mi clave privada (una firma). Puse este archivo binario y el hash cifrado en un archivo zip. Creo un hash MD5 del archivo zip. Puse la clave pública, el hash MD5 y el archivo zip públicamente disponibles.
Tengo varios dispositivos, algunos de ellos bajo el control hostil del cliente, algunos de ellos bajo el control amigable del cliente.
Los clientes amigables tienen un algoritmo de descarga como este:
Al recibir un comando, que contiene las URL, las URL proporcionadas se utilizan para descargar la clave pública, el hash MD5 y el archivo zip. Se comprueba el archivo zip descargado para ver si coincide con el hash MD5. Luego se extrae. Luego, la clave cifrada se descifra con la clave pública proporcionada. Se hace un hash del archivo binario y se compara con la clave desencriptada.
Si tanto la comprobación de MD5 como la comprobación de hash del archivo binario se realizan correctamente, el binario se ejecuta con acceso de raíz.
Los clientes hostiles tienen acceso a todo el dispositivo, por lo que conocen los secretos almacenados en el dispositivo. Sin embargo, no tienen acceso al sistema en el que almaceno la clave privada.
Por lo que puedo ver, el comando y el tiempo del mismo son potencialmente hostiles, las URL son potencialmente hostiles, por lo que el zip es potencialmente hostil, al igual que el binario y el hash y MD5. El hash MD5 se omite fácilmente, pero solo sirve para verificar la integridad del archivo. El hash encriptado del binario, sin embargo, es mi principal punto de defensa.
Cuando el zip, el binario, el hash cifrado y la clave pública están bajo el control del atacante, mi sistema sigue siendo seguro (es decir, ¿puede un atacante hacer que un cliente amigable ejecute un binario que no se originó en yo)? ¿Es más fácil romper la seguridad ya que se proporcionan el "texto cifrado" y el "texto simple" y la clave pública? Si es más fácil, ¿es más fácil por cualquier magnitud relevante?