Utilice un chip criptográfico para agregar un arranque seguro a los diseños de dispositivos IoT

Por Stephen Evanczuk

Colaboración de Editores de Digi-Key de América del Norte

A pesar de hacer su mayor esfuerzo, los desarrolladores pueden dejar los diseños de Internet de las cosas (IoT) expuestos a ataques causados por el mismo código que se espera que mantenga la seguridad. Los hackers a menudo atacan incluso diseños aparentemente seguros al reemplazar el firmware con código comprometido. Los métodos de arranque seguro pueden mitigar estos ataques, pero una implementación adecuada puede ser un desafío.

Los desarrolladores necesitan métodos más simples para implementar el arranque seguro como parte de una estrategia general para garantizar la seguridad del dispositivo IoT.

Este artículo revisa muy brevemente las superficies de ataque comunes en los diseños de dispositivos IoT y el papel de los métodos de seguridad básicos, incluidos el almacenamiento, el cifrado y la autenticación seguros de claves. Luego, el artículo presenta un chip de seguridad que permite a los desarrolladores agregar un arranque seguro, entre otras características necesarias en una estrategia general para garantizar la seguridad del dispositivo IoT.

Vulnerabilidades del dispositivo IoT

Para los hackers, los dispositivos IoT pueden proporcionar cualquier número de puntos de entrada para la interrupción de los propios dispositivos, sus redes e incluso sus aplicaciones finales. Si bien los desarrolladores pueden usar una variedad de técnicas para fortalecer la seguridad de las redes y las aplicaciones, la seguridad del dispositivo IoT sigue siendo un desafío debido a la memoria y los recursos de procesamiento limitados disponibles en estos dispositivos.

Si bien los desarrolladores están empleando métodos de encriptación para proteger los datos, muchos dispositivos están diseñados sin las capacidades de autenticación segura necesarias para evitar que los hackers intercepten las comunicaciones haciéndose pasar por servidores, puertas de enlace u otros dispositivos IoT de autorización. En algunos casos, los dispositivos que usan métodos de autenticación válidos pero débiles pueden seguir siendo vulnerables a engaños sofisticados que interceptan y reutilizan claves de seguridad de otro modo válidas, utilizadas en sesiones de comunicación aparentemente privadas.

Actualización del dispositivo IoT

Una debilidad de seguridad aún más fundamental se relaciona con el uso de capacidades de actualización inalámbrica (OTA) integradas en un número cada vez mayor de dispositivos IoT. Las actualizaciones OTA proporcionan una característica importante en el mercado de cambios permanentes del IoT. Al actualizar el firmware de los dispositivos desplegados, los desarrolladores pueden responder a la demanda cambiante de los clientes de nuevas características (o de corrección de errores). En un proceso de actualización OTA típico, el dispositivo IoT buscará actualizaciones periódicamente, descargará el nuevo código cuando esté disponible y realizará una serie de llamadas al sistema para completar el proceso de actualización.

Para un dispositivo IoT basado en una MCU SAM D21 Microchip Technology, por ejemplo, el firmware del dispositivo incluye un código de actualización OTA que descarga la imagen desde un punto final preestablecido, verifica si hubo éxito y luego cambia al nuevo conjunto de firmware (Listado 1). En este listado del paquete Advanced Software Framework de Microchip, después del inicio (m2m_ota_init()) del firmware OTA, una rutina de devolución de llamada, OtaUpdateCb(), cambia al nuevo conjunto de firmware (m2m_ota_switch_firmware()) después de que el firmware OTA haya descargado la nueva imagen del código, y un reinicio del sistema hace que la MCU se reinicie con el firmware actualizado.

Copiar

static void OtaUpdateCb(uint8 u8OtaUpdateStatusType ,uint8 u8OtaUpdateStatus)

{

if(u8OtaUpdateStatusType == DL_STATUS) {

if(u8OtaUpdateStatus == OTA_STATUS_SUCSESS) {

//cambiar al firmware actualizado

m2m_ota_switch_firmware();

}

}

else if(u8OtaUpdateStatusType == SW_STATUS) {

if(u8OtaUpdateStatus == OTA_STATUS_SUCSESS) {

M2M_INFO (”La OTA se realizó ahora con éxito");

//iniciar la actualización del SW (software) de host luego se requiere reiniciar el sistema (reiniciar el controlador)

}

}

}

 

void wifi_event_cb(uint8 u8WiFiEvent, void * pvMsg)

{

case M2M_WIFI_REQ_DHCP_CONF:

{

//después de una conexión exitosa, iniciar la actualización inalámbrica

m2m_ota_start_update(OTA_URL);

}

break;

default:

break;

}

 

int main (void)

{

tstrWifiInitParam param;

tstr1xAuthCredentials gstrCred1x    = AUTH_CREDENTIALS;

nm_bsp_init();

m2m_memset((uint8*)&param, 0, sizeof(param));

param.pfAppWifiCb = wifi_event_cb;

//Iniciar el controlador WINC

ret = m2m_wifi_init(&param);

if (M2M_SUCCESS != ret)

{

M2M_ERR(”Inicio fallido del controlador <%d>\n",ret);

while(1);

}

//Iniciar el módulo OTA

m2m_ota_init(OtaUpdateCb,NULL);

//conectarse al AP (procesador de aplicaciones) que proporciona conexión al servidor OTA

m2m_wifi_default_connect();

 

while(1)

{

//Manejar la máquina de estado de la aplicación más el controlador de eventos WINC

while(m2m_wifi_handle_events(NULL) != M2M_SUCCESS) {

}

}

}

Listado 1: En esta muestra de código OTA del paquete Advanced Software Framework de Microchip, una devolución de llamada del controlador de eventos Wi-Fi wifi_event_cb() inicia la actualización OTA m2m_ota_start_update(OTA_URL) con la URL especificada y cambia al nuevo firmware m2m_ota_switch_firmware() al completar con éxito OtaUpdateCb(). (Fuente del código: Microchip Technology)

Para verificar que el código descargado sea válido, los desarrolladores han confiado durante mucho tiempo en los certificados de firma de código emitidos por una autoridad de certificación reconocida. Aun así, las debilidades en el almacenamiento seguro de datos, la implementación de la técnica de validación y la protección certificada proporcionan a los hackers múltiples vías para apoderarse de un dispositivo IoT.

Incluso con las técnicas de seguridad convencionales, el propio proceso de actualización de firmware de un dispositivo se puede modificar para que reemplace el código válido con código comprometido. Al reiniciarse, el dispositivo se convierte en una herramienta que el hacker puede usar para penetrar más profundamente en la red IoT, la aplicación IoT e incluso los recursos internos de la empresa.

En este escenario, la capacidad de iniciar de forma segura el dispositivo IoT sirve como una línea de defensa crítica. Sin embargo, para el desarrollador, la implementación de un arranque seguro conlleva múltiples requisitos de mecanismos seguros de almacenamiento, cifrado, autenticación y validación de códigos.

La implementación en el software de un arranque seguro deja el proceso de actualización expuesto a métodos de ataque enfocados en recuperar claves seguras del almacenamiento del dispositivo, interceptar datos encriptados, falsificar mecanismos de autenticación y poner en peligro los algoritmos de validación del código. En la práctica, los diseños IoT generalmente carecen de la memoria extra y la potencia de procesamiento que se requerirían para una solución de software en cualquier caso. Aun así, una implementación de hardware no siempre puede prometer seguridad.

Para implementar el arranque seguro en el hardware, hasta hace poco los dispositivos IoT requerían una serie de dispositivos especializados que aumentarían significativamente la complejidad y el costo del diseño. Incluso si los desarrolladores integraran estos distintos dispositivos, los hackers decididos podrían adquirir fácilmente una muestra del dispositivo IoT que es su objetivo y atacar los dispositivos de seguridad individuales a través de su interconexión de bus y señal. Por el contrario, ATECC608A de Microchip Technology es una solución de un solo chip que permite a los desarrolladores agregar un arranque seguro sin exponer los secretos o mecanismos de seguridad subyacentes.

IC de seguridad

El ATECC608A es un dispositivo de seguridad de 8 pines diseñado para admitir una MCU host con un complemento sofisticado de características de seguridad a través de una interfaz en serie simple (Figura 1).

Imagen de ATECC608A de Microchip Technology, que es un coprocesador criptográfico de 8 pines

Figura 1: ATECC608A es un coprocesador criptográfico de 8 pines con almacenamiento seguro de claves basado en hardware. (Fuente de la imagen: Microchip Technology)

El dispositivo proporciona una solución de seguridad basada en hardware completa que combina sus aceleradores criptográficos integrados con almacenamiento seguro en el chip para admitir una variedad de algoritmos de encriptación que incluyen SHA-256, AES-128 y algoritmos de curva elíptica robustos que incluyen: Firma digital de curva elíptica (ECDSA), Curva elíptica Diffie-Hellman (ECDH) y Curva NIST P-256. Más allá de estos mecanismos criptográficos, el dispositivo admite protocolos de Seguridad de nivel de transporte (TLS) de nivel superior, incluido el TLS 1.3. A diferencia de los dispositivos anteriores, el ATECC608A puede generar y almacenar claves de sesión de forma segura, lo que ayuda a mitigar una fuente común de amenazas encontradas cuando se utiliza de la autenticación TLS.

Estas características desempeñan un papel fundamental en la seguridad de las operaciones normales de un dispositivo IoT, pero el soporte del ATECC608A para un arranque seguro extiende la cobertura de seguridad al proceso fundamental de actualización del firmware. Aquí, el ATECC608A valida el nuevo conjunto de códigos y devuelve un mensaje a la MCU que indica el éxito o el fracaso. En ese momento, dependiendo de las políticas de seguridad existentes, la MCU puede volver a intentar la actualización, enviar un mensaje de advertencia a una terminal de monitor de seguridad, detener o ignorar la actualización y reiniciar con el código original.

Integración de hardware

Para el desarrollador, el ATECC608A agrega relativamente pocos requisitos adicionales para el agregado de un arranque seguro y las otras características de seguridad, a un diseño basado en MCU. En cuanto al hardware, el diseñador necesita tratar con, como máximo, cuatro conexiones; VCC, GND, entrada de reloj en serie (SCL) y datos en serie (SDA). Los cuatro pines restantes no se conectan. Además de conectar el VCC (emisor seguidor) a una fuente de alimentación de 2.0 V a 5.5 V, la única decisión restante es la conexión en serie a la MCU.

Los diseñadores pueden conectar los pines SCL y SDA del dispositivo a la MCU para la conectividad I2C convencional. Alternativamente, los diseñadores pueden aprovechar la compatibilidad del dispositivo con la interfaz de 1 cable de Microchip. Aquí, los desarrolladores conectan el puerto SDA del dispositivo a un pin MCU GPIO (entrada y salida de uso general) y usan el protocolo de sincronización de 1 cable de Microchip para transmitir valores lógicos 0 y 1 (Figura 2).

Diagrama de protocolo serie de 1 cable de Microchip

Figura 2: En el protocolo en serie de 1 cable de Microchip, una secuencia de transiciones de forma de onda de duración específica señala un 0 lógico o un 1 lógico. (Fuente de la imagen: Microchip Technology)

En este protocolo, una transmisión de valores lógicos entre el ATECC608A y la MCU comienza con un impulso de inicio (tSTART) de una duración especificada. Después del impulso de inicio, el protocolo define un 0 lógico como un ciclo de un pulso alto de transmisión cero (tZHI) seguido por un pulso bajo de transmisión cero (tZLO) de duración especificada. De manera similar, un nivel alto sostenido significa una transmisión lógica 1.

En cualquier caso, el protocolo espera que una señal disminuya dentro de un tiempo de bit especificado (tBIT). Después de una serie de transmisiones de bits, si la línea de serie se desactiva después de una duración específica de tiempo de espera de IO, el dispositivo se puede programar para entrar automáticamente en el modo de suspensión. Sin embargo, para trabajar con ATECC608A, los desarrolladores rara vez deben preocuparse por los detalles de tiempo de este protocolo: Microchip definió los parámetros clave de temporización para que sean compatibles con un transmisor receptor asíncrono universal (UART) estándar que funciona a 230.4 Kbaud.

Configuración del dispositivo

Al nivel del dispositivo, el ATECC608A requiere una configuración mínima. Utilizando la interfaz en serie de I2C o de 1 cable, los desarrolladores pueden cargar configuraciones como la dirección I2C o establecer algunas funciones nuevas, como la autocomprobación al activarse o encenderse. El dispositivo proporciona una configuración que podría ser particularmente relevante para diseños IoT de potencia muy baja.

En estos diseños, el ATECC608A agrega relativamente poco al presupuesto total de energía en sus modos inactivo o de reposo, probablemente los estados más comunes en un diseño IoT típico. En modo inactivo, el dispositivo consume aproximadamente 800 microamperios (μA); en modo de suspensión, el consumo de energía es de 150 nanoamperios (nA) o menos, según la configuración. Cuando la MCU activa el dispositivo para ejecutar algún proceso de seguridad, el consumo de energía del dispositivo aún alcanza solo los 14 miliamperios (mA) durante la operación activa. Aun así, los diseños con presupuestos de energía muy ajustados pueden llegar a requerir niveles de potencia activa incluso más bajos.

Para respaldar estos diseños, el dispositivo proporciona una opción de configuración que permite a los desarrolladores seleccionar tres modos de operación diferentes que cambian la velocidad de ejecución para un menor consumo de energía. Por lo tanto, los desarrolladores pueden reducir el consumo activo de energía de 14 mA a una velocidad de ejecución máxima a 6 mA o 3 mA con velocidades de ejecución correspondientemente más bajas.

Además de varios elementos de configuración de bajo nivel, un dispositivo de seguridad como el ATECC608A es más efectivo cuando su información segura ya está en funcionamiento mucho antes del desarrollo. Los errores o engaños de claves seguras y certificados realizados durante el desarrollo pueden obviar incluso los mejores esfuerzos de seguridad. Para abordar esta posible amenaza, el servicio de aprovisionamiento de confianza de Microchip carga datos seguros que incluyen claves y certificados como parte del proceso de fabricación.

Después de que la información segura se carga en un entorno seguro en la fábrica, permanece protegida contra el descubrimiento accidental o intencional incluso cuando el dispositivo pasa por los procesos normales de manejo en la cadena de suministro. El ATECC608A incluye una función especial de bloqueo de transporte que desactiva el uso del dispositivo hasta que se habilita criptográficamente utilizando una clave conocida transmitida desde la eventual MCU del host.

Una vez habilitado por la MCU del host, el ATECC608A genera al azar una clave secreta llamada la clave de protección IO que comparte con la MCU. Las comunicaciones posteriores entre el ATECC608A y la MCU se cifran con esta clave de protección IO, un mecanismo que proporciona autenticación adicional durante el arranque seguro y otros procesos seguros.

Si los hackers esperan falsificar el proceso de validación cortando la conexión con el ATECC608A y alimentando su propia señal de "éxito" a la MCU, este mecanismo de la clave de protección IO haría que la MCU ignore la señal falsa. Incluso si un hacker de alguna manera pusiera en peligro un dispositivo ATECC608A y tratara de usarlo en un sistema diferente, el mecanismo de la clave de protección IO evitaría su uso de manera efectiva.

Integración de software

Por todas sus características sofisticadas y mecanismos de protección, el ATECC608A sigue siendo sencillo de aplicar a un diseño basado en MCU. Además de implementar la interfaz de hardware simple y la configuración mencionada anteriormente, los desarrolladores trabajan con una interfaz de programación de aplicaciones (API) que abstrae los detalles de las operaciones de seguridad. La biblioteca de autenticación criptográfica CryptoAuthLib de Microchip proporciona un paquete de software completo con definiciones, estructuras y llamadas API necesarias para aprovechar al máximo las características ATECC608A. La biblioteca sirve como una capa independiente del hardware, que trabaja en toda la API de la capa de abstracción de hardware (HAL) y los controladores para objetivos de hardware específicos (Figura 3).

Imagen de la biblioteca CryptoAuthLib de Microchip

Figura 3: La biblioteca CryptoAuthLib de Microchip proporciona una capa de servicios de criptografía entre una aplicación y el hardware subyacente al que se accede a través de una capa de abstracción de hardware por encima de los controladores específicos del hardware, lo que proporciona portabilidad con diferentes conjuntos de hardware. (Fuente de la imagen: Microchip Technology)

Los desarrolladores usan rutinas API (Interfaz de programación de aplicaciones) CryptoAuthLib, tales como io_protection_set_key(), para crear una clave de protección IO, y atcab_secureboot() para ejecutar el mecanismo de validación de arranque seguro de ATECC608A contra el resumen del código o la firma incluida en los parámetros de la llamada.

Aunque los comandos API son sencillos, los pasos específicos de configuración, administrativos y operativos necesarios para implementar la seguridad pueden ser un desafío. Los mismos mecanismos de seguridad que los desarrolladores están tratando de implementar pueden causar retrasos si faltan pasos clave o estos se realizan fuera de secuencia.

Con la utilización del kit de desarrollo ATSAMD21-XPRO SAM D21 basado en MCU de Microchip y su placa adicional ATCRYPTOAUTH-XPRO-B equipada con ATECC608A, los desarrolladores pueden adquirir experiencia rápidamente trabajando con estos mecanismos generales y con las capacidades específicas del ATECC608A. Microchip ofrece un extenso paquete de software de arranque seguro diseñado para ejecutarse en ATSAMD21-XPRO y ATCRYPTOAUTH-XPRO-B, utilizando un Microchip ATOLED1-XPRO para proporcionar una interfaz de pantalla básica para aplicaciones de muestra (Figura 4).

Imagen de kit de desarrollo ATSAMD21-XPRO basado en la MCU SAM D21 de Microchip

Figura 4: Los desarrolladores pueden evaluar rápidamente el proceso de arranque seguro utilizando el software Microchip y el kit de desarrollo ATSAMD21-XPRO basado en la MCU SAM D21 en combinación con el complemento ATCRYPTOAUTH-XPRO-B equipado con ATECC608A y el complemento de pantalla ATOLED1-XPRO. (Fuente de la imagen: Microchip Technology)

Incluida en el paquete de demostración SAM D21, una rutina completa de arranque seguro ilustra los patrones clave de diseño de software utilizados para configurar, ejecutar y verificar el estado de una operación de arranque seguro (Listado 2). Usando esta plataforma de hardware y el paquete de software de demostración, los desarrolladores pueden evaluar rápidamente el uso del ATECC608A para arranque remoto y modificar el software de muestra según sea necesario para cumplir con sus propios requisitos.

Copiar

/** \brief Maneja la funcionalidad del arranque seguro durante el inicio, ejecución

*         y desinicialización.

*  \return ATCA_SUCCESS on success, otherwise an error code.

*/

ATCA_STATUS secure_boot_process(void)

{

ATCA_STATUS status;

secure_boot_parameters secure_boot_params;

uint8_t secure_boot_mode;

bool secure_boot_app_valid = false;

 

/*Iniciar arranque seguro*/

if ((status = secure_boot_init(&secure_boot_params)) != ATCA_SUCCESS)

{

return status;

}

 

do

{

.

.

.

#if SECURE_BOOT_DIGEST_ENCRYPT_ENABLED

.

.

.

/*Obtener clave de protección IO*/

if ((status = io_protection_get_key(secure_boot_params.io_protection_key)) != ATCA_SUCCESS)

{

return status;

}

 

if ((status = atcab_secureboot_mac(secure_boot_mode,

(const uint8_t*)&secure_boot_params.app_digest,

(const uint8_t*)&secure_boot_params.memory_params.signature,

(const uint8_t*)secure_boot_params.randomnum,

(const uint8_t*)secure_boot_params.io_protection_key,

&secure_boot_app_valid)) != ATCA_SUCCESS)

{

break;

}

#else

if ((status = atcab_secureboot(secure_boot_mode,

0,

(const uint8_t*)&secure_boot_params.app_digest,

(const uint8_t*)&secure_boot_params.memory_params.signature,

NULL)) != ATCA_SUCCESS)

{

break;

}

secure_boot_app_valid = true;

#endif

 

/*Verificar si el comando de arranque seguro se ejecutó correctamente con el MAC de retorno correcto  */

if (!secure_boot_app_valid)

{

break;

}

.

.

.

}

while (0);

 

/*Desinicializar la interfaz de memoria y liberar los recursos*/

secure_boot_deinit_memory(&secure_boot_params.memory_params);

 

return status;

}

Listado 2: Este fragmento del paquete de demostración SAM D21 de Microchip demuestra los patrones de diseño clave para el arranque seguro, incluida la comprobación de una clave de protección IO (io_protection_get_key()) y la validación del firmware utilizando su compendio, firma y otros parámetros (atcab_secureboot_mac() o atcab_secureboot() dependiendo de la configuración seleccionada). (Fuente del código: Microchip Technology)

Conclusión

Los dispositivos IoT presentan múltiples superficies de amenaza para los hackers que intentan utilizar dispositivos comprometidos como una entrada a las redes, aplicaciones y recursos empresariales IoT. Entre las técnicas para mitigar esto, el arranque seguro surge como un elemento crítico en una estrategia de seguridad más amplia. Sin embargo, la implementación de un arranque seguro trae consigo su propio conjunto de requisitos que pueden dejar el sistema expuesto si no se manejan correctamente.

El IC de seguridad ATECC608A de Microchip Technology proporciona una solución integral en un solo paquete que los desarrolladores pueden agregar fácilmente a cualquier diseño basado en MCU. Con ATECC608A, los desarrolladores pueden mejorar sustancialmente la seguridad y garantizar un arranque seguro en sus diseños IoT.

Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de Digi-Key Electronics o de las políticas oficiales de Digi-Key Electronics.

Acerca de este autor

Stephen Evanczuk

Stephen Evanczuk tiene más de 20 años de experiencia escribiendo para y sobre la industria de electrónica en un amplio rango de temas, entre ellos hardware, software, sistemas y aplicaciones, que incluyen IoT. Se doctoróen neurociencias (redes neuronales) y trabajó en la industria aeroespacial en sistemas seguros con distribución masiva y métodos de aceleración de algoritmos. Actualmente, cuando no escribe artículos sobre tecnología e ingeniería, trabaja en aplicaciones de aprendizaje profundo sobre sistemas de reconocimiento y recomendaciones.

Acerca de este editor

Editores de Digi-Key de América del Norte