Documento Informativo: Análisis de Tecnologías Embebidas y de Radiofrecuencia

Resumen Ejecutivo

Este documento sintetiza un análisis exhaustivo de diversas tecnologías en los campos de sistemas embebidos, seguridad de microcontroladores y comunicaciones por radiofrecuencia. La seguridad en microcontroladores presenta un panorama diverso: dispositivos como el RP2040 ofrecen una protección mínima contra ataques de hardware, centrándose en dificultar la copia en lugar de impedirla. En contraste, el ESP32 implementa un robusto sistema de seguridad basado en eFuse con cifrado de flash y arranque seguro. La programación de bajo nivel, ejemplificada por el flasheo directo del RP2040, revela la complejidad de las interfaces de depuración como SWD, que pueden ser explotadas para aplicaciones personalizadas más allá de su propósito original.

En el ámbito de las comunicaciones, la seguridad de RF es primordial. Investigaciones demuestran que el aprendizaje automático, específicamente el algoritmo Gradient Boosting, puede detectar y clasificar con alta precisión diversos ataques de jamming. Los módulos de comunicación IoT, como el SIM800 y SIM900, ofrecen una amplia gama de funcionalidades ---incluyendo SMS, llamadas y GPRS--- controladas mediante comandos AT, lo que permite el control remoto de dispositivos, la recuperación de datos y servicios como la sincronización horaria y la localización básica. Finalmente, transceptores de RF dedicados como el nRF905 proporcionan soluciones de bajo consumo en un solo chip para la comunicación en la banda ISM, siendo ideales para una multitud de aplicaciones que van desde la domótica hasta los sensores industriales.

1. Seguridad en Microcontroladores: RP2040 vs. ESP32

El análisis de las capacidades de seguridad de los microcontroladores revela diferencias fundamentales en la filosofía de diseño entre el RP2040 de Raspberry Pi y el ESP32 de Espressif, especialmente en lo que respecta a la protección de la propiedad intelectual y la resistencia a la manipulación física.

1.1. Vulnerabilidades y Mitigaciones del RP2040

El RP2040 carece de un “bit de seguridad” de hardware dedicado, similar al que se encuentra en microcontroladores como los de la serie STM32. Su diseño, que depende de una memoria flash QSPI externa, constituye su principal vulnerabilidad de seguridad.

  • Vulnerabilidad de la Flash Externa: Dado que el código se almacena fuera del chip principal, un atacante con acceso físico puede desoldar la memoria flash y leer su contenido utilizando un programador estándar. Esto hace que la protección del firmware contra la copia directa sea extremadamente difícil.

  • Acceso vía Bootloader: Si se puede forzar el dispositivo a entrar en el modo BOOTSEL (generalmente a través de una conexión USB), es posible extraer el programa completo o incluso todo el contenido de la memoria flash utilizando herramientas como picotool save.

  • Interfaz de Depuración SWD: El acceso a los pines de Serial Wire Debug (SWD) otorga un control casi total sobre el procesador, permitiendo la lectura de la memoria y la depuración del código en ejecución.

El objetivo de la seguridad en el RP2040 no es hacer la copia imposible, sino “no trivial”. Se sugieren varias estrategias de mitigación para aumentar la dificultad de un ataque:

  • Desconexión de SWD por Software: Es posible desactivar los pines SWD externamente utilizando el registro DBGFORCE lo antes posible durante el arranque del programa. Sin embargo, esta medida puede ser eludida mediante ataques de “glitching” que omiten la instrucción de desactivación.

  • Ocultación de Interfaces: En un diseño de PCB personalizado, no exponer los pines SWD ni la interfaz USB reduce las vías de ataque obvias.

  • Uso del Pin HOLD de la Flash: Utilizar el pin HOLD de la memoria flash puede impedir lecturas no autorizadas, pero esta técnica limita el rendimiento, ya que no es compatible con el modo Quad SPI de mayor velocidad.

  • Co-procesador Seguro: Una estrategia más robusta consiste en añadir un microcontrolador secundario con mejores características de seguridad (como un STM32G030) para gestionar las funciones críticas.

  • Cifrado por FPGA: Se podría utilizar una FPGA para cifrar y descifrar el contenido de la flash sobre la marcha, aunque esto añade una complejidad significativa y presenta desafíos en el arranque seguro (bootstrap).

  • Ofuscación: Técnicas de software como verificar la ID de un chip de flash específico o buscar valores en áreas remotas de la memoria, y hacer que los fallos se manifiesten como errores de comportamiento inesperados en lugar de un bloqueo explícito, pueden dificultar la ingeniería inversa.

En resumen, el Cortex-M0+ y el diseño de Execute-In-Place (XIP) del RP2040 no están concebidos para altos niveles de seguridad o protección de la propiedad intelectual frente a un atacante con acceso al hardware.

1.2. Arquitectura de Seguridad del ESP32

A diferencia del RP2040, el ESP32 fue diseñado con características de seguridad robustas integradas en el hardware, basadas en memoria eFuse (One-Time Programmable).

  • Arranque Seguro (Secure Boot): Cuando está activado, el bootloader de la ROM verifica una firma digital en la imagen del firmware antes de ejecutarla. La clave pública para esta verificación se almacena de forma permanente en la eFuse. Esto asegura que solo se pueda ejecutar código auténtico y firmado por el desarrollador.

  • Cifrado de Flash (Flash Encryption): Esta función protege el firmware de ser leído directamente desde el chip de memoria flash. La clave de cifrado es generada por el hardware y se almacena en una sección de la eFuse que es inaccesible para el software de la aplicación. El motor de descifrado de flash carga esta clave directamente desde la eFuse y descifra el código sobre la marcha a medida que se lee en la caché de instrucciones, sin penalización de rendimiento para la ejecución del código.

  • Implementación Segura: Para que el sistema sea completamente seguro, no basta con activar estas funciones. También es crucial desactivar permanentemente el bootloader de UART mediante un bit en la eFuse. De lo contrario, un atacante podría usar este bootloader para cargar código no firmado en la IRAM y potencialmente comprometer el sistema.

  • Proceso de Cifrado en el Primer Arranque: Para facilitar la producción en masa, los chips de flash se pueden programar con firmware en texto plano. En el primer arranque, si el bit de cifrado está activado en la eFuse, el bootloader de segunda etapa cifra el firmware “in-place” antes de ejecutarlo.

1.3. Tabla Comparativa de Seguridad

Característica RP2040 ESP32


Bit de Seguridad de Hardware No disponible. Sí, a través de bits de control en la eFuse. Almacenamiento de Firmware Flash QSPI externa. Flash externa, pero con soporte de hardware para cifrado. Protección contra Lectura de Flash Vulnerable a la extracción física. Protegido mediante Cifrado de Flash. Autenticidad del Código No hay verificación de firma por hardware. Asegurada mediante Arranque Seguro. Gestión de Claves No aplicable (sin cifrado de hardware). Almacenadas en eFuse. La clave de cifrado es generada por HW y no es legible por software. Principal Vulnerabilidad Acceso físico a la memoria flash externa y a las interfaces de depuración/USB. Si no se configura correctamente, el bootloader de UART puede ser un vector de ataque. Filosofía de Seguridad Dificultar la copia (“hacerla no trivial”). Impedir la ejecución de código no autorizado y la lectura de la flash.

2. Programación de Bajo Nivel: El Proceso de Flasheo del RP2040

El flasheo del RP2040 se realiza a través de su interfaz de depuración, un proceso que revela la arquitectura subyacente del ARM CoreSight. Es posible controlar este proceso sin herramientas estándar como OpenOCD, utilizando cualquier microcontrolador capaz de manejar dos pines GPIO.

2.1. Interfaz Serial Wire Debug (SWD)

El RP2040 utiliza un puerto de depuración de dos hilos (SWD) para la programación.

  • Pines: SWCLK (reloj, siempre impulsado por el master/programador) y SWDIO (datos, bidireccional).

  • Hardware Subyacente: La interfaz se comunica con un Debug Access Port (DAP) compatible con ARM CoreSight. Este sistema de depuración es casi completamente independiente de los núcleos del procesador Cortex-M0+, lo que permite la depuración incluso si los núcleos están detenidos, bloqueados o reiniciándose.

El flasheo a través de SWD es posible gracias a tres características clave del RP2040:

  1. La capacidad de leer y escribir en cualquier ubicación del espacio de direcciones del RP2040.

  2. La capacidad de ordenar al procesador que ejecute funciones arbitrarias.

  3. La disponibilidad del firmware del controlador de la flash QSPI en la ROM de fábrica del chip.

2.2. Protocolo y Transacciones SWD

La comunicación SWD comienza con una secuencia de inicialización (handshake) para establecer una conexión fiable y poner el DAP en un estado conocido.

  • Secuencia de Handshake: Incluye pasos como el envío de una “Alerta de Selección” de 128 bits, un código de activación, un reinicio de línea (64 unos consecutivos), la selección del núcleo del procesador a través del registro DP SELECT, la lectura del IDCODE del chip (debería ser 0x0BC12477) y la configuración y encendido de los circuitos de depuración.

  • Componentes CoreSight: La comunicación se dirige a dos componentes principales: el Debug Port (DP) y el Access Port (AP). El MEM-AP se utiliza para acceder a la memoria del procesador.

  • Transacciones de Lectura/Escritura: Una vez inicializada, la comunicación se estructura en transacciones estandarizadas de lectura y escritura de 32 bits. Cada transacción incluye un bit de inicio, selección de AP/DP, dirección del registro, paridad, un reconocimiento de 3 bits por parte del objetivo, y la fase de transferencia de datos de 32 bits.

2.3. Control del Procesador y Funciones de la ROM

El control total sobre el procesador y el uso de sus recursos internos es fundamental para el proceso de flasheo.

  • Acceso a Registros del Núcleo: Los registros del procesador (PC, LR, R0-R12) no están mapeados en memoria. Se accede a ellos indirectamente a través de registros mapeados en memoria como DCRSR (para seleccionar el registro del núcleo) y DCRDR (para leer/escribir los datos). El registro DHCSR se utiliza para controlar el estado de detención (halt) y para comprobar cuándo se ha completado una operación de registro.

  • Llamada a Funciones (Debug Trampoline): Para ejecutar código en el chip objetivo (como las funciones de borrado/escritura de la flash), se utiliza una técnica llamada “debug trampoline”. El proceso implica:

    1. Detener el procesador.

    2. Cargar los argumentos de la función en los registros r0-r3.

    3. Escribir la dirección de la función deseada en el registro r7.

    4. Apuntar el Program Counter (PC) a la dirección de una función “trampolín” especial en la ROM.

    5. Reanudar la ejecución.

    6. La función trampolín llama a la función en r7 y, a su regreso, ejecuta una instrucción BKPT que detiene inmediatamente el procesador, devolviendo el control al depurador de forma determinista.

  • Funciones de la ROM: El RP2040 incluye una ROM de 16KB que contiene rutinas de bajo nivel esenciales, incluyendo los controladores para la flash QSPI y funciones matemáticas. Estas funciones no se llaman por dirección fija, sino a través de un identificador de dos caracteres (p. ej., “RE” para flash_range_erase). Una tabla de búsqueda en la ROM, cuya dirección se encuentra en la ubicación fija 0x00000014, mapea estos códigos a las direcciones de las funciones.

2.4. Resumen del Proceso de Flasheo

El proceso completo de flasheo de un binario en el RP2040 a través de SWD es el siguiente:

  1. Inicialización: Se establece la comunicación SWD con el chip objetivo.

  2. Reinicio: Se reinicia el procesador directamente en modo de depuración para asegurar un estado limpio y conocido.

  3. Lectura de la Tabla de la ROM: Se lee la tabla de búsqueda de funciones de la ROM para obtener las direcciones de las rutinas de flasheo necesarias (ej. connect_internal_flash, flash_exit_xip, flash_range_erase, flash_range_program).

  4. Borrado de la Flash: Se llama a la función flash_range_erase (“RE”) de la ROM para borrar las secciones necesarias de la memoria flash.

  5. Programación por Páginas: El proceso se repite para cada página (ej. 4KB) del binario: a. Se escribe la página de datos en un área de trabajo en la RAM del RP2040 mediante escrituras de memoria a través de SWD. b. Se llama a la función flash_range_program (“RP”) de la ROM, pasándole las direcciones de origen (en RAM) y destino (en flash) para que el propio RP2040 copie los datos de la RAM a la flash.

  6. Rehabilitación de XIP: Se llama a la función flash_enter_cmd_xip (“CX”) para que la flash vuelva a ser legible por el procesador en modo Execute-In-Place.

  7. Verificación (Opcional): Se leen los datos de la flash para compararlos con el binario original y verificar que la escritura fue correcta.

  8. Reinicio Final: Se sale del modo de depuración y se reinicia el procesador, que comenzará a ejecutar el nuevo firmware recién flasheado.

3. Seguridad en Redes Inalámbricas: Detección de Ataques de Jamming por RF

Los ataques de interferencia por radiofrecuencia (RF Jamming) son una amenaza grave para las redes inalámbricas, especialmente en aplicaciones críticas como las redes vehiculares (VANETs). Se ha demostrado que las técnicas de aprendizaje automático (Machine Learning) son un método eficaz para no solo detectar la presencia de estos ataques, sino también para clasificarlos.

3.1. Tipos de Ataques de Jamming

El jamming es un ataque de denegación de servicio (DoS) que consiste en transmitir una señal de radio para interferir con las comunicaciones legítimas, reduciendo la relación señal-ruido (SNR) e impidiendo que el receptor decodifique los mensajes. Los tipos de jammers estudiados son:

  • Jammer Constante: Emite continuamente ruido de alta potencia o bits aleatorios, bloqueando el canal de comunicación independientemente del tráfico existente. No sigue ningún protocolo MAC.

  • Jammer Reactivo: Es más inteligente. Escucha el canal y solo se activa cuando detecta una transmisión en curso. Su objetivo es corromper unos pocos bits del paquete legítimo, lo suficiente para que falle la comprobación de checksum en el receptor y el paquete sea descartado.

  • Jammer Aleatorio: Alterna entre un estado de reposo (sleep) y un estado de jamming a intervalos aleatorios. Cuando está activo, puede comportarse como un jammer constante o reactivo.

3.2. Metodología de Detección Basada en Machine Learning

El enfoque propuesto utiliza un modelo de ML entrenado con datos generados a partir de simulaciones de red.

  • Simulación: Se utiliza el simulador de red ns-3 para crear escenarios de una red ad-hoc inalámbrica bajo condiciones normales y bajo los tres tipos de ataques de jamming. Se varían parámetros como la distancia entre nodos y la potencia de transmisión para generar un conjunto de datos diverso.

  • Métricas Clave: Se recopilan dos métricas en el nodo receptor, ya que no requieren información del emisor y son fáciles de obtener con el hardware existente:

    1. Packet Delivery Ratio (PDR): La relación entre el número de paquetes recibidos correctamente y el total de paquetes enviados.

    2. Received Signal Strength (RSS): La potencia de la señal recibida.

  • Análisis de Datos: El análisis muestra que es relativamente sencillo distinguir entre una situación con jamming y una sin jamming. Durante un ataque, el RSS tiende a aumentar, ya que el receptor capta la suma de la señal original y la señal de interferencia. Sin embargo, clasificar el tipo de jammer es más difícil, ya que los valores de PDR y RSS para los diferentes ataques se solapan considerablemente.

3.3. Algoritmos y Resultados

Se evaluaron varios algoritmos de clasificación, demostrando la superioridad de las técnicas de ensamblado (ensemble).

  • Algoritmos Comparados: Se probaron K-Nearest Neighbours (KNN), Decision Tree, Multi-layer Perceptron (MLP), y dos algoritmos de ensamblado: Random Forest y Gradient Boosting.

  • Técnicas de Ensamblado:

    • Bagging (Random Forest): Entrena múltiples predictores (árboles de decisión) de forma independiente y en paralelo. La predicción final es una combinación (ej. voto mayoritario) de todos ellos. Reduce la varianza.

    • Boosting (Gradient Boosting Technique - GBT): Entrena los predictores de forma secuencial. Cada nuevo predictor aprende de los errores de su predecesor, corrigiéndolos progresivamente. Reduce tanto el sesgo como la varianza.

  • Resultados de Precisión: El algoritmo Gradient Boosting (GBT) demostró ser el más eficaz, superando a Random Forest, que anteriormente se consideraba el mejor para esta tarea.

    Algoritmo Precisión (Potencia y Distancia Variables)


    Multi-Layer Perceptron (MLP) 67.5% K-Nearest Neighbours (KNN) 72.3% Decision Tree 88.7% Random Forest 92.6% Gradient Boosting (Propuesto) 94.2%

El GBT logra una precisión superior al 90% en todos los escenarios probados, demostrando ser una solución robusta y de alta fiabilidad para la detección y clasificación de ataques de jamming.

4. Módulos de Comunicación Celular: Funcionalidad del SIM800/SIM900

Los módulos GSM/GPRS como el SIM800L y el SIM900 son componentes versátiles que permiten añadir conectividad celular a proyectos con microcontroladores como Arduino o Raspberry Pi. Su funcionalidad se controla mediante un conjunto estandarizado de comandos AT enviados a través de una interfaz serie.

4.1. Interacción Mediante Comandos AT

La comunicación con el módulo se realiza a través de una conexión serie (RX/TX).

  • Comandos AT (ATtention): Son cadenas de texto que instruyen al módulo para que realice acciones específicas, como realizar una llamada, enviar un SMS o consultar su estado.

  • Requisitos de Alimentación: Un aspecto crítico de estos módulos es su consumo de energía. Requieren un voltaje de alimentación específico (típicamente entre 3.4V y 4.4V para el SIM800L) y pueden experimentar picos de corriente de hasta 2 amperios, especialmente al registrarse en la red o iniciar una transmisión. Por esta razón, no pueden ser alimentados directamente desde los pines de un microcontrolador y requieren una fuente de alimentación externa dedicada.

  • Tarjeta SIM: Se necesita una tarjeta SIM (Micro-SIM para el SIM800L) con un plan de servicio 2G para operar.

4.2. Capacidades Principales: SMS y Llamadas

Las funciones de telefonía y mensajería son las más comunes.

  • Envío y Recepción de SMS:

    • AT+CMGF=1: Configura el módulo en modo texto para SMS.

    • AT+CMGS=”+[numero_destino]”: Inicia el envío de un SMS. Tras este comando, se introduce el texto del mensaje y se finaliza con el carácter Ctrl+Z (código ASCII 26).

    • AT+CMGL=“ALL”: Lista todos los mensajes SMS almacenados en el módulo. Se pueden usar otros parámetros como “REC UNREAD” para leer solo los no leídos.

    • AT+CNMI: Configura cómo se notifican los SMS entrantes. Por ejemplo, AT+CNMI=1,2 hace que el contenido del SMS se envíe directamente al puerto serie.

  • Realización y Gestión de Llamadas:

    • ATD+[numero_destino];: Realiza una llamada de voz. El punto y coma al final es importante.

    • RING: Respuesta del módulo cuando recibe una llamada entrante.

    • ATA: Responde (acepta) una llamada entrante.

    • ATH: Cuelga una llamada en curso o rechaza una llamada entrante.

  • Control Remoto y Seguridad: Estas funciones permiten controlar un microcontrolador a distancia, por ejemplo, encendiendo un LED al recibir un SMS con un comando específico o al detectar una llamada entrante. Para evitar el acceso no autorizado, se puede configurar una lista blanca (whitelist) con el comando AT+CWHITELIST, que permite definir los únicos números de teléfono autorizados para interactuar con el módulo.

4.3. Servicios Adicionales: Sincronización de Hora y Localización

Los módulos GSM ofrecen servicios de red adicionales.

  • Sincronización Horaria: El módulo puede funcionar como un reloj en tiempo real (RTC).

    • AT+CCLK?: Consulta la hora y fecha actuales del módulo.

    • Se puede sincronizar de tres maneras:

      1. Manual: AT+CCLK=“YY/MM/DD,hh:mm:ss±tz”.

      2. Desde un Host: Utilizando la hora del sistema de un ordenador conectado.

      3. Servidor NTP: A través de una conexión GPRS, se pueden usar los comandos AT+SAPBR (para configurar la conexión GPRS) y AT+CNTP (para sincronizar con un servidor NTP).

  • Servicios de Localización:

    • Método Obsoleto: El comando AT+CIPGSMLOC dependía de un servicio de Google que ha sido descontinuado y ya no funciona.

    • Método por Firmware: Comandos más nuevos como AT+CLBS (Location Based Service) pueden proporcionar la ubicación, pero a menudo requieren una actualización del firmware del módulo, y su éxito no está garantizado, pudiendo devolver un error de “Location Failed”.

    • Método por ID de Celda: El comando AT+CNETSCAN (en el SIM800) permite escanear las torres de telefonía cercanas y obtener su Cell ID, código de país y código de operador. Esta información puede ser enviada a una API externa (como cell-id.info) para obtener una estimación de la ubicación geográfica.

5. Transceptores de RF para la Banda ISM: El nRF905

El nRF905 de Nordic Semiconductor es un transceptor de radio en un solo chip diseñado para la comunicación inalámbrica de bajo consumo en las bandas de frecuencia ISM (Industrial, Scientific and Medical).

5.1. Características Técnicas

  • Frecuencias de Operación: Es un transceptor multibanda que opera en las bandas de 433, 868 y 915 MHz, lo que lo hace compatible con las regulaciones de ETSI en Europa y FCC en América.

  • Modulación: Utiliza modulación GFSK (Gaussian Frequency-Shift Keying).

  • Bajo Consumo: Está optimizado para aplicaciones de baja potencia. Su consumo de corriente es muy bajo:

    • Transmisión (TX): 9 mA (con una potencia de salida de -10dBm).

    • Recepción (RX): 12.5 mA.

    • Modo de bajo consumo (Power Down): 2.5 µA.

  • Tensión de Alimentación: Funciona en un rango de voltaje de 1.9V a 3.6V, lo que lo hace ideal para dispositivos alimentados por batería.

  • Interfaz: Se configura y controla a través de una interfaz SPI (Serial Peripheral Interface) estándar.

  • Integración: Es una solución de un solo chip (“single chip”) que integra un sintetizador de frecuencia, cadena de recepción, amplificador de potencia y modulador, reduciendo la necesidad de componentes externos y el costo total (BOM).

5.2. Funcionalidad y Aplicaciones

El nRF905 incorpora características que simplifican el diseño de protocolos de comunicación inalámbrica.

  • Modo ShockBurst™: Es una característica clave que automatiza gran parte del proceso de comunicación. Gestiona automáticamente la generación de preámbulo, la adición de una dirección de paquete, el cálculo y la comprobación de CRC (Cyclic Redundancy Check) y la retransmisión automática de paquetes, liberando al microcontrolador anfitrión de estas tareas.

  • Funciones Adicionales:

    • Address Match: El chip puede filtrar paquetes entrantes y notificar al microcontrolador solo cuando recibe un paquete dirigido a su dirección.

    • Carrier Detect: Permite implementar protocolos de “escuchar antes de transmitir” (Listen Before Transmit) para evitar colisiones.

  • Aplicaciones Típicas: Gracias a su bajo consumo y facilidad de uso, el nRF905 es adecuado para una amplia gama de aplicaciones:

    • Sistemas de alarma y seguridad.

    • Domótica (Home Automation).

    • Control remoto.

    • Telemetría y sensores industriales.

    • Sistemas de entrada sin llave (Keyless entry) para automoción.

    • Juguetes y vigilancia.