Módulo 9

Proyecto: transmisión segura de datos a la nube

Seguridad y Protocolos Avanzados

ESP32 Mecatrónica IoT UNAM

Introducción Teórica

Fundamentos de Transmisión Segura de Datos a la Nube con ESP32

Desafíos de Seguridad en IoT

La transmisión segura de datos a la nube representa uno de los desafíos más críticos en la era del Internet de las Cosas (IoT). En aplicaciones de mecatrónica industrial, la protección de datos no es solo una recomendación, sino un requisito fundamental para mantener la confidencialidad, integridad y disponibilidad de la información crítica.

Pilares de la Seguridad de Datos:
Confidencialidad

Solo entidades autorizadas pueden acceder a los datos

Integridad

Los datos no han sido alterados durante la transmisión

Disponibilidad

Los sistemas están accesibles cuando se necesitan

ESP32: Ventajas de Seguridad
Conectividad Dual: Wi-Fi + Bluetooth integrados
Encriptación AES: Aceleración criptográfica por hardware
Secure Boot: Verificación de integridad del firmware
Flash Encryption: Protección de código almacenado
True RNG: Generador de números aleatorios

Aplicación Industrial Real

Sistema de Monitoreo de Condiciones de Maquinaria

En entornos industriales modernos, los sensores IoT distribuidos recopilan continuamente datos críticos sobre el estado operacional de la maquinaria. Esta información incluye:

  • Vibraciones: Detección temprana de desbalances y desgaste
  • Temperatura: Prevención de sobrecalentamientos críticos
  • Presión: Monitoreo de sistemas hidráulicos/neumáticos
  • Corriente eléctrica: Análisis de eficiencia energética
  • Emisiones acústicas: Detección de fricción anormal
Flujo Seguro de Datos
1
Sensores ESP32
⬇️
2
Encriptación AES
⬇️
3
Transmisión TLS
⬇️
4
Cloud Analytics
Impacto en el Negocio
85% Reducción en fallas no planificadas
$2.3M Ahorro anual en mantenimiento
99.7% Uptime de sistemas críticos

Explicación Técnica Detallada

Motor de Aceleración Criptográfica ESP32 y Implementación AES-GCM

Motor Criptográfico Hardware

El ESP32 incorpora un motor de aceleración criptográfica dedicado que proporciona implementaciones optimizadas y seguras de algoritmos estándar de la industria.

🔐 Algoritmos Soportados:
AES
Advanced Encryption Standard
SHA-2
Secure Hash Algorithm
RSA
Rivest-Shamir-Adleman
ECC
Elliptic Curve Cryptography
RNG
Random Number Generator
HMAC
Hash-based MAC
Registros de Control Criptográfico
AES_MODE_REG Control del modo de operación AES (ECB/CBC/CFB/OFB/CTR)
AES_KEY_WRITE_VALUE_REG Escritura de claves de encriptación (128/192/256 bits)
AES_TEXT_IN_REG Datos de entrada para cifrado/descifrado
AES_TEXT_OUT_REG Datos de salida procesados
AES_START_REG Trigger para iniciar operación criptográfica

Implementación Completa de Cifrado AES-GCM

Sistema de Cifrado AES-256-GCM para Cloud Transmission
#include "mbedtls/aes.h"
#include "mbedtls/gcm.h"
#include "esp_system.h"
#include "esp_log.h"
#include 
#include 
#include 

// ==================== CONFIGURACIÓN DE SEGURIDAD ====================
static const char* TAG = "SECURE_CLOUD";
static const char* CLOUD_ENDPOINT = "https://api.industrial-iot.aws.com/data";

// Clave maestra AES-256 (EN PRODUCCIÓN: usar secure storage)
static const uint8_t MASTER_KEY[32] = {
    0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
    0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c,
    0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
    0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c
};

// ==================== FUNCIONES DE CIFRADO ====================
esp_err_t encrypt_sensor_data(const sensor_data_t* sensor_data, 
                              encrypted_payload_t* encrypted_payload) {
    mbedtls_gcm_context gcm_ctx;
    int ret;
    
    mbedtls_gcm_init(&gcm_ctx);
    ret = mbedtls_gcm_setkey(&gcm_ctx, MBEDTLS_CIPHER_ID_AES, 
                             MASTER_KEY, 256);
    
    if (ret == 0) {
        // Generar IV único y realizar cifrado AES-GCM
        generate_random_iv(encrypted_payload->iv, 12);
        
        ret = mbedtls_gcm_crypt_and_tag(&gcm_ctx,
                                        MBEDTLS_GCM_ENCRYPT,
                                        sizeof(sensor_data_t),
                                        encrypted_payload->iv, 12,
                                        NULL, 0,
                                        (const unsigned char*)sensor_data,
                                        encrypted_payload->encrypted_data,
                                        16, encrypted_payload->tag);
    }
    
    mbedtls_gcm_free(&gcm_ctx);
    return (ret == 0) ? ESP_OK : ESP_FAIL;
}

void setup() {
    Serial.begin(115200);
    ESP_LOGI(TAG, "🔐 Sistema de Transmisión Segura v3.0");
    
    // Test de cifrado
    sensor_data_t test_data = {
        .temperature = 25.6,
        .vibration_x = 0.15,
        .timestamp = millis()
    };
    
    encrypted_payload_t encrypted;
    if (encrypt_sensor_data(&test_data, &encrypted) == ESP_OK) {
        ESP_LOGI(TAG, "✅ Cifrado AES-256-GCM exitoso");
        // Transmitir a la nube...
    }
}

void loop() {
    // Lectura continua de sensores y transmisión segura
    delay(30000);
}
Análisis de Seguridad Implementada
🔐 Características de Cifrado:
  • AES-256-GCM: Cifrado autenticado
  • IV único: Previene ataques de repetición
  • Tag de autenticación: Integridad garantizada
  • Hardware RNG: Números aleatorios seguros
🌐 Transmisión Segura:
  • HTTPS/TLS: Canal de comunicación cifrado
  • Base64: Codificación de datos binarios
  • JSON estructurado: Metadatos organizados
  • Headers HTTP: Autenticación API

Ejercicios Prácticos Visuales

Implementaciones paso a paso de cifrado y transmisión segura a la nube

Cifrado y Descifrado AES-256

Básico 30-45 min Hardware Crypto

Objetivo: Familiarizarse con la implementación de encriptación AES-256 usando el motor criptográfico por hardware del ESP32.

Materiales Requeridos:
  • ESP32 DevKit V1
  • Arduino IDE con ESP32 Core
  • Librería mbedTLS (incluida)
  • Cable USB para programación
  • Monitor serie habilitado
Especificaciones Técnicas:
  • Algoritmo: AES-256 en modo ECB/CBC
  • Clave: 256 bits (32 bytes)
  • Aceleración: Hardware ESP32
  • Performance: >10MB/s cifrado
  • Verificación: Ciclo completo encrypt/decrypt
Resultados Esperados:

Implementación exitosa de cifrado y descifrado de texto plano, mostrando datos originales, cifrados y recuperados en el monitor serie con verificación de integridad.

Transmisión Segura AWS IoT Core

Intermedio 60-90 min MQTT + TLS

Objetivo: Configurar y implementar transmisión segura de datos cifrados desde ESP32 hacia AWS IoT Core usando MQTT sobre TLS con autenticación mutua.

Requisitos AWS:
  • Cuenta AWS activa
  • AWS IoT Core habilitado
  • Device Certificate generado
  • Policy de IoT configurada
  • Endpoint: Regional IoT Core
  • Puerto: 8883 (MQTT/TLS)
  • Auth: X.509 certificados
  • QoS: Nivel 1 (at least once)
Arquitectura de Solución:
ESP32 → Cifrado AES
MQTT/TLS → AWS IoT
Lambda → DynamoDB

Integración Sensores + Cloud Analytics

Avanzado 90-120 min Full Stack

Objetivo: Desarrollar un sistema completo de IoT que integre sensores físicos, cifrado local, transmisión segura y analítica en tiempo real en la nube.

Hardware Stack:
  • 📡 ESP32 + antena Wi-Fi
  • 🌡️ DHT22 (Temp/Humedad)
  • 📊 MPU6050 (Acelerómetro)
  • 🔋 Gestión de energía
  • 💾 Storage SD opcional
Cloud Stack:
  • ☁️ AWS IoT Core (MQTT)
  • ⚡ Lambda Functions
  • 🗄️ DynamoDB + TimeStream
  • 📊 CloudWatch Dashboards
  • 📱 SNS Notifications
Capacidades en Tiempo Real:
Streaming Analytics
Anomaly Detection
Mobile Dashboards
Historical Analytics

Proyecto Aplicado

Sistema Integral de Monitoreo Industrial con Transmisión Segura

Sistema de Monitoreo de Condiciones de Maquinaria

Implementación completa de una solución IoT industrial que combina sensores críticos de vibración y temperatura con transmisión cifrada end-to-end hacia plataformas de analítica en la nube. El sistema proporciona capacidades de mantenimiento predictivo y alertas tempranas.

Arquitectura del Sistema
Capa de Sensores
Vibración (MPU9250) Temperatura (DS18B20) Corriente AC (SCT-013)
⬇️
Capa de Procesamiento
ESP32 Dual-Core Cifrado AES-256 Compresión LZ4
⬇️
Capa de Transmisión
MQTT/TLS 1.3 Buffer Local Retry Logic
⬇️
Capa de Analítica
Time-Series DB ML Predictive Real-time Alerts
Métricas del Proyecto
12 Sensores por Máquina
1ms Latencia de Cifrado
99.8% Confiabilidad Transmisión
30 días Autonomía Energética
BOM (Bill of Materials)
Componentes Core:
  • ESP32-WROOM-32D - $12
  • MPU9250 9-DOF - $18
  • DS18B20 Industrial - $8
  • SCT-013 Current - $15
Power & Connectivity:
  • Li-Ion 18650 3400mAh - $25
  • TP4056 Charger - $3
  • PCB Custom - $20
💰 Total: $101 USD

Procedimiento de Implementación

1
Setup Hardware y Calibración

Ensamblaje del hardware, configuración de sensores, calibración de línea base y verificación de conectividad Wi-Fi industrial.

✓ Esquemas de conexión ✓ Código de calibración ✓ Checklist de QA
2
Desarrollo Firmware Seguro

Implementación del stack completo de cifrado, protocolos de comunicación seguros y sistema de logging distribuido con tolerancia a fallos.

✓ Código fuente completo ✓ Unit tests ✓ OTA updates
3
Configuración Cloud Infrastructure

Deploy de servicios AWS, configuración de pipelines de datos, setup de dashboards y configuración de alertas automáticas.

✓ Terraform scripts ✓ CloudFormation ✓ Monitoring setup
4
Validación y Producción

Testing integral en ambiente de producción, documentación técnica completa y capacitación del equipo de mantenimiento.

✓ Test reports ✓ User manual ✓ Training materials

Evaluación y Troubleshooting

Diagnóstico avanzado y criterios de evaluación para sistemas de transmisión segura

Problemas Comunes y Soluciones Expertas

Fallo en Encriptación/Desencriptación AES
CRÍTICO

Síntomas: mbedtls_aes_setkey_enc() retorna error, datos corruptos

🔧 Diagnóstico Sistemático:
  1. Verificar longitud de clave:
    if (keylen != 128 && keylen != 192 && keylen != 256) {
        ESP_LOGE(TAG, "Invalid key length: %d", keylen);
    }
  2. Validar memoria heap disponible:
    ESP_LOGI(TAG, "Free heap: %d bytes", ESP.getFreeHeap());
  3. Test de hardware crypto:
    esp_crypto_aes_test(); // Test interno ESP32
Error de Transmisión a AWS IoT Core
ALTO

Síntomas: Connection timeout, certificado rechazado, MQTT disconnect

🔍 Verificaciones de Red:
  • Endpoint regional correcto
  • Puerto 8883 accessible
  • Firewall corporativo
  • DNS resolution funcionando
🛠️ Debug Tools:
// Habilitar debug SSL
WiFiClientSecure client;
client.setDebugLevel(SSL_INFO);

// Test de conectividad
if (client.connect(aws_endpoint, 8883)) {
    ESP_LOGI(TAG, "SSL connection OK");
}
Lecturas de Sensores Inconsistentes
MEDIO

Síntomas: Valores fuera de rango, ruido en lecturas, timeouts I2C

⚡ Optimizaciones de Sensores:
Filtrado Digital:
float filtered = alpha * current + (1-alpha) * previous;
Calibración Automática:
offset = (sum_readings / N) - expected_value;
Timeout I2C:
Wire.setTimeOut(1000); // 1 segundo
Retry Logic:
for(int i=0; i<3; i++) { if(readSensor()) break; }
Criterios de Evaluación
🔐 Seguridad (45%)
20% Implementación AES-256 correcta
15% Manejo seguro de claves
10% Validación de integridad
☁️ Transmisión (30%)
20% Conectividad AWS IoT estable
10% Manejo de reconexiones
🔧 Hardware (25%)
15% Configuración correcta sensores
10% Optimización energética
📊 Cálculo Final:
Score = (Sec×0.45) + (Cloud×0.30) + (HW×0.25)
✅ Requisitos Mínimos:
  • Score total: ≥75%
  • Seguridad: ≥80%
  • Demo funcional