¿Cómo implementar la protección de lectura Flash?

Nuestro cliente solicita que se añada un mecanismo externo de protección de lectura para la zona de código (code flash).

En el manual TRM solo veo protección de escritura de flash.

¿Cómo se debe implementar la protección de lectura?

La protección de lectura del área de código puede lograrse combinando mecanismos de nivel de hardware con tecnologías de cifrado. Tomando la serie STM32 como ejemplo, se puede establecer mediante la configuración del nivel de protección de lectura (RDP) en los bytes de opción. Por ejemplo:

  1. Nivel 1 de RDP: deshabilita la interfaz de depuración (JTAG/SWD), prohíbe el acceso a Flash cuando se arranca desde SRAM o memoria del sistema, y solo permite la lectura por el propio programa del chip.

  2. Nivel 2 de RDP: quema además la interfaz de depuración, impide completamente cualquier acceso externo y es irreversible.

    Al mismo tiempo, se pueden deshabilitar las interfaces de programación mediante bits de fusible (como el bit SPIEN en AVR) para evitar la lectura de Flash vía ISP. Si se requiere una seguridad mayor, puede integrarse un módulo de cifrado hardware (por ejemplo, HSM) que proteja el contenido de Flash con algoritmos AES/SM4, almacenando la clave en un chip de seguridad externo.

Para requisitos de protección de lectura externa, se puede adoptar el siguiente esquema:

  1. Protección física: deshabilitar permanentemente la interfaz de depuración quemando bits de fusible (como la protección de lectura permanente del Nordic nRF52); borrar el chip requiere destrucción física.
  2. Verificación dinámica con cifrado: al arrancar, generar un valor de comprobación mediante número aleatorio + algoritmo DES, combinar con operación HASH (p. ej. SHA-256) para verificar la integridad del código; tras 3 fallos se dispara un mecanismo de autodestrucción que borra datos críticos.
  3. Arranque seguro (Secure Boot): establecer una cadena de confianza con un módulo de seguridad hardware (HSM) y verificar la firma del firmware nivel a nivel. Por ejemplo, la serie Infineon TC3xx descifra el código de arranque con la clave integrada en el HSM y, tras la verificación, transfiere el control al CPU principal.
  4. Motor de cifrado hardware: elegir un MCU con módulo criptográfico integrado (como CSEc del NXP S32K o HSM del Xindida IM94xx) para cifrar el contenido de Flash a nivel hardware e impedir su lectura directa.

Los métodos anteriores deben combinarse según el modelo concreto de MCU y los requisitos de seguridad; se recomienda consultar el capítulo de seguridad del TRM del fabricante (por ejemplo, el proceso de configuración de Option Bytes en STM32).