DÍA 268 DE 365

Fase 5: Diseño Industrial y Proyecto Final

📖 Teoría a Estudiar

La Interfaz de Depuración (SWD / JTAG)

Todos los microcontroladores ARM modernos tienen una puerta trasera llamada SWD (Serial Wire Debug). Está diseñada para que tú, el desarrollador, puedas detener el código, leer las variables en RAM y grabar la memoria Flash. Es indispensable para la ingeniería, pero es el vector de ataque número uno para los clonadores de placas.

Los Tres Niveles de RDP (Readout Protection)

STMicroelectronics soluciona este problema incorporando un "cerrojo" físico en la zona de los Option Bytes (los mismos registros acorazados donde configuramos el Brown-Out Reset en el Día 253). Este cerrojo tiene tres estados:

ARQUITECTURA DE PROTECCIÓN CONTRA LECTURA (RDP OPTION BYTES) EXTERIOR ST-Link / JTAG Debugger Físico SWD Intento 1: Leer Firmware Intento 2: Forzar a Level 0 CORTEX-M FIREWALL OPTION BYTES RDP = LEVEL 1 (Memory Locked) X Acceso DENEGADO Trigger MASS ERASE FLASH / RAM / EEPROM Algoritmo Metrología API 54 Certificados AWS IoT (Private Key) Modelo TinyML Mantenimiento Si el Hacker exige Level 0... TODO SE CONVIERTE EN 0xFF

⚙️ Ejercicios Prácticos

Autocuración de Seguridad (Self-Hardening): Al igual que hicimos con el detector de apagones (BOD) en el Día 253, no vamos a configurar el RDP a mano con la computadora antes de ensamblar. Programaremos el firmware para que audite sus propias defensas en el instante de encenderse. Si el chip es "virgen" (Nivel 0), el propio firmware se bloqueará a sí mismo a Nivel 1 para toda la eternidad.

Ejercicio 1: Blindaje Criptográfico en Arranque. Este código debe ir en el main(), muy temprano en la secuencia de inicialización. Es una operación crítica; una vez ejecutada, jamás podrás debugear el chip con *Breakpoints* o leer sus variables en tiempo real.


/**
 * @file hardware_security_rdp.c
 * @brief Gestión del Readout Protection (Option Bytes RDP)
 */

#include "stm32f401xe.h"
#include <stdint.h>

// =========================================================================
// AUDITORÍA Y BLINDAJE DE PROPIEDAD INTELECTUAL
// =========================================================================
/**
 * @brief Revisa si el silicio tiene la puerta de depuración abierta.
 *        Si está en Nivel 0, la cierra a Nivel 1 permanentemente.
 * @note  ADVERTENCIA: JAMÁS USAR OB_RDP_LEVEL_2.
 */
void Asegurar_Blindaje_RDP_Nivel_1(void) {
    
    FLASH_OBProgramInitTypeDef OptionBytesConfig;
    
    // 1. Extraer la configuración actual de los Option Bytes (Capa Física)
    HAL_FLASHEx_OBGetConfig(&OptionBytesConfig);
    
    // 2. Verificar Vulnerabilidad
    if (OptionBytesConfig.RDPLevel == OB_RDP_LEVEL_0) {
        
        // ¡LA PUERTA TRASERA ESTÁ ABIERTA! (Modo Fábrica/Desarrollo)
        // Iniciamos la rutina de acorazamiento.
        
        // Quitar seguros de software a los registros de control Flash
        HAL_FLASH_Unlock();
        HAL_FLASH_OB_Unlock();
        
        // Preparar la estructura de la inyección de Option Bytes
        OptionBytesConfig.OptionType = OPTIONBYTE_RDP;
        OptionBytesConfig.RDPLevel   = OB_RDP_LEVEL_1; 
        
        // -----------------------------------------------------------------
        // PELIGRO LETAL: 
        // Si por error escribes 'OB_RDP_LEVEL_2', el procesador destruirá los 
        // fusibles JTAG/SWD físicos. El chip quedará permanentemente sordo y 
        // ciego a programadores externos. Jamás podrá recuperarse.
        // -----------------------------------------------------------------
        
        // 3. Quemar el cambio permanentemente en el silicio
        if (HAL_FLASHEx_OBProgram(&OptionBytesConfig) == HAL_OK) {
            
            // 4. Lanzar los nuevos Option Bytes.
            // Esta función obliga al hardware a reiniciar el procesador
            // para que los nuevos fusibles lógicos surtan efecto.
            // Al despertar, el puerto SWD estará bloqueado para lecturas.
            HAL_FLASH_OB_Launch();
        }
        
        // Si llegamos aquí, la programación de Flash falló (Ruido/Voltaje)
        HAL_FLASH_OB_Lock();
        HAL_FLASH_Lock();
        
        // FSM_Disparar_Alarma_Hardware_Corrupto();
    }
    // Si ya es Level 1, el hardware es seguro. No hacer nada.
}

// =========================================================================
// INTEGRACIÓN EN EL BOOT SEQUENCE (main.c)
// =========================================================================
/*
int main(void) {
    HAL_Init();
    SystemClock_Config();
    
    // 1. Auditoría de Muerte por Apagón (Día 253)
    Asegurar_Blindaje_BrownOut();
    
    // 2. Auditoría de Propiedad Intelectual
    // Esta función eleva la seguridad de Level 0 a Level 1.
    // Si conectas el ST-Link después de esta línea, dará error "Read Out Protection Active".
    Asegurar_Blindaje_RDP_Nivel_1();
    
    // ... Resto de inicializaciones
}
*/
        

🚀 Avance del Proyecto Tesis: Despachador de Gas LP

Objetivo del día: Protección de Propiedad Intelectual (IP) y Anti-Tampering de Código.

La piratería de hardware es una industria multimillonaria. En China existen laboratorios dedicados exclusivamente a decapar microcontroladores con ácido para leer sus memorias al microscopio. Sin embargo, para el 99% de los clonadores comerciales, un chip con el puerto de depuración bloqueado es una pared de titanio infranqueable.

Al implementar el **RDP Nivel 1 (Readout Protection)**, acabas de blindar el valor comercial de tu startup. Dentro de la Flash de ese STM32F401 viven tus llaves privadas de Amazon Web Services y el algoritmo de inferencia TinyML que tardaste meses en entrenar. Si un competidor desleal compra tu Despachador e intenta usar el software oficial de STMicroelectronics (STM32CubeProgrammer) para descargar tu código, la computadora le arrojará un error de seguridad. Si el pirata se desespera y forza un "Downgrade a Level 0" para abrir la memoria, el procesador activará su rutina de tierra arrasada (Mass Erase), reduciendo tu valioso código fuente, las llaves de encriptación y el historial contable a polvo digital (`0xFFFFFFFF`). Conservas tu monopolio tecnológico absoluto.

📝 Resumen del Día