Problema
Una pequeña empresa está intentando externalizar la fabricación a una pequeña fábrica de terceros. Los productos son dispositivos electrónicos de consumo y no requieren ninguna certificación especial aparte de la CE y la FCC de clase B (aunque no creo que sea relevante para el problema).
La fábrica está obligada a pagar un determinado canon fijo a la empresa por cada aparato fabricado.
Para poder cobrar el canon, la empresa tiene que disponer de un medio fiable para saber cuántos aparatos se han fabricado en un tiempo determinado.
Condiciones
-
Los dispositivos fabricados ejecutan un firmware no trivial proporcionado por la empresa.
-
Los dispositivos también están equipados con un cargador de arranque personalizado trivial.
-
Los dispositivos no tienen ningún medio de comunicación con la empresa por sí mismos (no están conectados a Internet, redes celulares, etc.).
-
Cada dispositivo fabricado se somete a un determinado procedimiento de prueba automatizado, que implica la conexión del dispositivo a un PC que ejecuta un software de propósito especial desarrollado por la empresa. Este software también actualiza el firmware.
-
Los microcontroladores del dispositivo tienen un ID global único de 96/128 bits. En realidad, los microcontroladores son STM32F0, STM32F1, STM32F4 y LPC11C24, si eso ayuda.
-
Las cantidades previstas son de hasta 500 dispositivos mensuales en total.
-
El envío de cualquier hardware entre la empresa y la fábrica no es factible.
Supuestos
-
La fábrica es un negocio legal y razonablemente honesto, no van a ir a lo grande para explotar el proceso en su beneficio.
-
El número de dispositivos fabricados es igual al número de dispositivos vendidos; la cantidad de productos defectuosos es insignificante.
Solución
Una de las primeras soluciones que se me ocurren es ampliar el software de pruebas mencionado anteriormente para que siga el siguiente algoritmo:
- Una vez conectado el dispositivo y antes de flashear el firmware principal, la aplicación solicita la API web de la empresa (posiblemente a través de un protocolo seguro), enviándole el ID único del dispositivo.
- Al recibir dicha solicitud, el servidor de la empresa almacena el identificador único en una base de datos (con algunos metadatos como la fecha/hora, etc.).
- Una vez recibida la confirmación, se cargará el firmware.
Esto parece proporcionar a la empresa los datos necesarios.
Los inconvenientes son obvios: la aplicación puede ser parcheada de muchas maneras, el PC anfitrión puede redirigir las consultas a un servidor de terceros, la fábrica puede ignorar por completo la aplicación de pruebas e implementar su propia alternativa en su lugar, etc. Por no hablar de que la fabricación se detendrá si la API web de la empresa se cae, aunque no debería ser un problema frecuente hoy en día.
Preguntas
-
¿Qué enfoques del problema existen en la industria?
-
Se puede implementar una solución más fiable con la memoria OTP (algunos de los MCU de la lista la tienen, otros productos pueden estar equipados con un chip OTP dedicado, aunque no es deseable por razones de eficiencia de costes).
-
Dejando de lado la OTP/criptografía, ¿hay alguna forma obvia de mejorar la solución descrita que se me haya escapado?