Autor Tema: Dudas sobre las actualizaciones remotas en PIC  (Leído 3125 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Dudas sobre las actualizaciones remotas en PIC
« en: 23 de Junio de 2018, 13:13:05 »
Hola compaler@s.
Tengo una duda sobre las actualizaciones de firmware de los productos electrónicos, he visto muchos fabricantes que sacan un producto y al tiempo lanzan una actualización de firmware con mejoras, hasta ahí todo correcto.
Mi pregunta es. ¿Ese firmware es todo el código completo del funcionamiento del dispositivo?, me refiero a que si alguien copia el hardware y le carga ese firmware en el chip podrá hacer una copia exacta del producto?, o ¿es un firmware protegido de alguna manera que evite que alguien te pueda copiar tu invento, y si fuera un firmware protegido ¿como se podría hacer eso?.
Es que si yo fabrico un dispositivo no me gustaría que me lo copiaran pero si poder sacar firmwares de mejoras y que no me lo copien
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Dudas sobre las actualizaciones remotas en PIC
« Respuesta #1 en: 23 de Junio de 2018, 17:33:01 »
Citar
¿Ese firmware es todo el código completo del funcionamiento del dispositivo?

Usualmente no, provees solo el firmware del producto, pero el bootloader normalmente no lo deberias tocar, esto es por seguridad, ya que si no funciona el bootloader, lo podes usar de pisa papeles.

Citar
¿es un firmware protegido de alguna manera que evite que alguien te pueda copiar tu invento

Una encriptacion, se envia encriptado, en la cual ya tu micro en su bootloader (protegido contra lectura) posee la clave para desencriptarlo. Asi mientras recibe, desencripta y graba.


De todas formas si es demasiado rentable y mucho volumne, siempre hay un chino que te va a hacer un clon o su propia version a la mitad del precio :P jeje

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Dudas sobre las actualizaciones remotas en PIC
« Respuesta #2 en: 24 de Junio de 2018, 18:44:29 »
De todas formas si es demasiado rentable y mucho volumne, siempre hay un chino que te va a hacer un clon o su propia version a la mitad del precio :P jeje

Jajaja ojalá llegue a ese nivel.
¿Entonces cómo funcionaría eso?, es que nunca he hecho nada con bootloader y no sé muy bien como funciona, entonces si yo cargo un bootloader en un micro y pillo la actualización que libera el fabricante no lo podría cargar en mi chip? y si es así, y yo me invento un desarrollo como le indico a mi proyecto que encriptación tengo que poner en mi frimware?
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Dudas sobre las actualizaciones remotas en PIC
« Respuesta #3 en: 24 de Junio de 2018, 20:25:40 »
Citar
¿Entonces cómo funcionaría eso?, es que nunca he hecho nada con bootloader y no sé muy bien como funciona, entonces si yo cargo un bootloader en un micro y pillo la actualización que libera el fabricante no lo podría cargar en mi chip?

El bootloader "simplificandolo" a un absurdo es esto:

if(actualizar)
{
     Recibo_y_actualizo();
}
else
{
     ProgramaPrincipal();
}


Entonces si debe actualizar, ya sea seteado por el programa antes o por un pin externo, preparas desde donde vas a leer tus datos (UART,USB,SD,etc) y actualizas el Programa principal que va a estar ubicado desde una posicion exacta en la FLASH, suponete que el bootloader ocupa desde 0x0000 a 0x01FF, y luego comienza tu programa principal.

Cuando programes tu programa principal, vas a tener que decirle al linker que esta ubicado en 0x0200, nunca lo hice con microchip, los demas poseen un archivo linker mas accesible.
Al compilarlo, te va a dar un .hex supongamos. Si lo queres enviar sin encriptar, envias eso y vas grabando acorde a lo que llega.
Ahora si lo queres encriptar podes hacerlo con lo que te guste, y de alli al recibirlo proceder a desencriptarlo ANTES de grabarlo en la FLASH.


Citar
omo le indico a mi proyecto que encriptación tengo que poner en mi frimware?

Si vos sos el creador del bootloader, como del programa principal, tenes que saber que funcion de encriptacion en el programa principal, para luego aplicarlo al bootloader.

Citar
si yo cargo un bootloader en un micro y pillo la actualización que libera el fabricante no lo podría cargar en mi chip?

Si el programa no es tuyo, a no ser que hagas un bootloader especifico ( direcciones de memoria correctas, vectores, encriptacion si es que tiene) no vas a poder cargar nada de otra persona. Cuando haces el bootloader, la idea es para que lo uses vos.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Dudas sobre las actualizaciones remotas en PIC
« Respuesta #4 en: 25 de Junio de 2018, 04:22:16 »
Vale entendido, ¿entonces según leo también se podrías decidir que hardware quieres actualizar?.
Imaginemos que saco un producto al mercado con un funcionamiento básico y que por medio de un firmware pases el producto de un funcionamiento básico a uno pro, y el que compre la versión pro solo le funcione en su equipo y aunque se lo pase a otro compañero este no lo pueda actualizar. ¿este caso también sería factible?, sé que sería un coñazo ya que tendrías que hacer un bootloader por hardware y si lanzar 2000 unidades al mercado sería hacer un bootloader por cada una de ellas y el firmware a actualizar sería personalizado ¿o habría otra manera mas fácil de hacerlo?
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Dudas sobre las actualizaciones remotas en PIC
« Respuesta #5 en: 25 de Junio de 2018, 04:36:05 »
 
Para actualizaciones personalizadas, tienes que usar un número de serie único que identifique a esa placa. Hay microcontroladores que llevan grabado de fábrica un ID único por chip, por ejemplo lo tienen los STM32, los Kinetis y seguramente todos los ARM. En los PIC lo desconozco, yo cuando hice mi bootloader encriptado para PIC32, tuve que grabarle en la flash del PIC mi número de serie único a cada placa, porque el micro no lo tenía.

La clave de encriptación, o del código de producto, solo tiene que ser diferente para productos diferentes. Para productos personalizados, también podrías usar una combinación con un fichero de activación (almacenado por ejemplo en una tarjeta micro SD) que contenga una clave para ese producto y placa (con ID único), de manera que active unas u otras funciones del firmware.

Yo no tengo productos personalizados, pero si estoy preparando una actualización de firmware con nuevas prestaciones, y esa actualización será de pago, para quien quiera añadirlas al producto. Para ese caso probablemente usaré el archivo que he comentado, con una clave única basada en el identíficador único del microcontrolador, para que se activen las nuevas prestaciones si el usuario ha comprado esa versión. El firmware será siempre el mismo, para el mismo hardware.

Para productos distintos, conviene que la clave de encriptación o el código de producto sean distintos, para evitar que por error o deliberadamente el usuario cargue el firmware de un producto en otro.
« Última modificación: 25 de Junio de 2018, 08:22:17 por planeta9999 »

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Dudas sobre las actualizaciones remotas en PIC
« Respuesta #6 en: 25 de Junio de 2018, 07:37:47 »
Vale, entiendo, ya tengo por donde empezar a investigar de como puedo hacer eso en mis proyectos.
Pensando un poco me he dado cuenta de un par de dudas:
Se supone que se le tiene que poner un ID o número de serie a cada micro, entonces si comercializas 1000 unidades tendrías que generar un firmware con el número de serie de cada cliente que te solicite la ampliación, ¿y si un cliente vende su equipo a otro usuario y este último quiere actualizar, cómo sabría yo que número de serie es el del equipo?, ¿se le serigrafía el número de ID en la PCB o cómo sería? y si es así ¿alguien no podría pillar el firmware que va dirigido a otro usuario y por medio de un editor Hex cambiar ese número de serie por el de su equipo?
Muchas gracias de verdad
« Última modificación: 25 de Junio de 2018, 07:48:29 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Dudas sobre las actualizaciones remotas en PIC
« Respuesta #7 en: 25 de Junio de 2018, 08:27:42 »
Se supone que se le tiene que poner un ID o número de serie a cada micro, entonces si comercializas 1000 unidades tendrías que generar un firmware con el número de serie de cada cliente que te solicite la ampliación,

No, el firmware siempre es el mismo, no cambia. Lo que se hace es darle al cliente un fichero de texto o binario con una clave de activación personalizada para su placa, basada en el numero de serie del microcontrolador de su placa, que es único. Ese archivo (almacenado en una tarjeta micro SD), el firmware lo lee al arrancar, comprueba la clave y activa las funciones que el cliente haya comprado.

En cuanto al numero de seríe único, lo mejor es trabajar con microcontroladores, que ya lo lleven grabado de fábrica, practicamente todos los ARM llevan su ID único.

Si optas por micros que no lleven número de serie, lo tienes un poco más complicado. En mi bootloader para PIC32, el firmware del bootloader lo grababa en todas las placas en estado "virgen", sin número de serie ni de producto, tampoco permitía cargar la aplicación de usuario hasta inicializarlo. Al arrancar cada placa por primera vez, le ponía al producto una tarjeta SD con un fichero master de inicialización que contenía una clave y un contador, el bootloader leía ese archivo, cogía el numero de serie (contador), lo grababa en la flash del micro y actualizaba el archivo master incrementando en uno el contado de número de serie. Así usaba ese mismo archivo para inicializar todas las placas con un identificador único que se iba incrementando automáticamente.

Citar
¿y si un cliente vende su equipo a otro usuario y este último quiere actualizar, cómo sabría yo que número de serie es el del equipo?, ¿se le serigrafía el número de ID en la PCB o cómo sería? y si es así ¿alguien no podría pillar el firmware que va dirigido a otro usuario y por medio de un editor Hex cambiar ese número de serie por el de su equipo?

Para saber el número de serie del equipo, pues hay varias formas. Por ejemplo en uno de mis productos, como es una pantalla con displays a leds, al arrancar se muestra el número de serie del producto en la pantalla.

Si el producto no tienen ningún tipo de pantalla, en mi bootloader para PIC32, lo que hice es que al arrancar, el firmware graba un fichero de texto en la tarjeta SD con el numero de serie de esa placa, así el cliente puede mirarlo y decírmelo para que le cree el archivo clave de activación para su placa.

El firmware va encriptado, no puedes editar ni cambiar nada, si lo intentas solo verás basura, por eso precisamente todas las actualizaciones de firmware se dan encriptadas, para que nadie pueda copiar, desensamblar o parchear nada.

Está todo muy bien atado a nivel de firmware, el único punto débil en todo sistema basado en un microcontrolador, es que te lo revienten a nivel de hardware. En eso los chinos son expertos, por unos cientos o miles de dólares te pueden abrir casi cualquier micro, queman el encapsulado con acído, meten el chip al microscopio y buscan donde está el fuse de protección de lectura para desactivarlo y volcar el contenido del micro. Los fabricantes de micros ya van añadiendo protecciones para evitar esos ataques, pero muchos micros siguen siendo todavía vulnerables, y en ese sentido los PIC son los más fáciles de reventar según los chinos.

Precisamente ahora estoy probando el RT1020 de NXP, y este micro como lleva la flash externa, en principio parece que deja al descubierto el firmware para que cualquiera lo copie. Pero no es así, porque está encriptado en la flash y se desencripta en tiempo de ejecución en el propio micro con una clave única, que me parece va grabada de fábrica. Una maravilla de bicho, espectacular. Este micro es prácticamente invulnerable a los ataques por hardware, salvo que los chinos ideen un sistema para leer la clave de encriptación de la ROM del micro y sepan además que fórmula se usa para encriptar y desencriptar. Lo que nunca van a poder hacer es sacar directamente el objeto listo para desensamblar o copiarlo a una versión pirata de producto.
« Última modificación: 25 de Junio de 2018, 09:04:31 por planeta9999 »

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Dudas sobre las actualizaciones remotas en PIC
« Respuesta #8 en: 25 de Junio de 2018, 09:16:30 »
Vale, voy entendiendo, jo me falta todavía aprender mucho, pero cuando llegue el momento si llega algún día ya me meteré con todo esto, por ahora ya tengo una idea.
Y claro viendo la potencia de los ARM mi idea es hacer mis desarrollos en ese micro, por ahora no me ha llegado placa STM32F4 discovery y por eso sigo programando con PIC, luego será migrar el código.
En fin, como medio novato que soy voy poco a poco y si algún día sale algo pues para adelante jajajaj.
Gracias
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...