Seguridad criptográfica en IoT (III)

miércoles, 18 de mayo de 2016

La proliferación de dispositivos y plataformas de servicios IoT está siendo mucho más rápida que la adopción de medidas de seguridad en su ámbito. Ante la apremiante necesidad de mecanismos que garanticen la autenticación, integridad y confidencialidad, tanto de las comunicaciones como de los propios dispositivos, se tiende a trasladar las soluciones criptográficas contrastadas en la IT tradicional, como son los certificados digitales de clave pública sobre protocolos SSL/TLS. Seguimos avanzando en el estado del arte de las soluciones criptográficas para IoT.

Cripto-Autenticación

Dada la larga trayectoria de Atmel desarrollando elementos de seguridad con capacidades criptográficas, como módulos TPM, microcontroladores para SmartCards, aceleradores criptográficos, cripto-memorias, comparadores, etc. resulta natural que el ecosistema del IoT haya comenzado a integrar sus Crypto-Authenticators para añadir capacidades criptográficas. Estos disponen de tres diferentes variantes:

  • SHA204A: autenticador simple basado en MAC/HMAC-SHA-256.
  • AES132A: autenticador y cifrador basado en el algoritmo simétrico AES/CCM con claves de 128 bits.
  • ECCx08A: autenticador y cifrador basado en el algoritmos asimétricos de curva elíptica ECDSA y ECDH, con claves de 256 bits.
Sus características físicas son prácticamente idénticas y resultan por ello compatibles e intercambiables. La elección de uno u otro estará determinada por las necesidades del dispositivo que los albergue y aunque incorporan numerosas características de cierta complejidad, es posible utilizar sus funciones básicas de forma sencilla.

Se pueden usar como elementos muy versátiles de seguridad criptográfica: desde la autenticación simple de un dispositivo, autenticación mutua o recíproca, negociación de claves de sesión para el cifrado íntegro de una comunicación, verificación de autenticidad de código o datos en un arranque seguro (SecureBoot) o actualización de firmware remota (OTA), etc. Todo esto por menos de 1 euro. Si cumplimos los requisitos del programa de "samples", Atmel envía muestras gratuitas sin coste alguno.




Bus I2C

Se producen en diferentes formatos de pequeño tamaño, todos ellos de montaje superficial. Aunque hay una versión de tan solo tres pines que utiliza un protocolo de comunicación SWI, que durante un tiempo fue comercializada por Sparkfun en una minúscula placa, lo habitual son los encapsulados de 8 pines, siendo el SOIC-8 el más manejable. Para las etapas de evaluación y test, es aconsejable utilizar un adaptador a DIP-8; los hay de diferentes tipos, incluido para los populares módulos de GROVE, e incluso puedes hacértelo tu mismo.

Tan solo cuatro de sus pines están uso. Dos para su flexible alimentación, de ínfimo consumo, que puede variar de 2.0 a 5.5 voltios; dos para el bus I2C, lo que le permite conectar con microcontroladores como el popular Arduino, e incluso sistemas de escritorio y servidores mediante adaptadores, generalmente por USB.

El bus I2C es un estándar de comunicación serie, muy utilizado por la industria para la interconexión de circuitos integrados. Usa dos líneas para transmitir la información: una línea de datos (SDA) y una línea de reloj (SCL), ambas con referencia a masa (GND).

En sistemas como BeagleBone y Raspberry PI, el bus I2C es fácilmente accesible tanto físicamente al estar expuesto, como de forma lógica mediante las numerosas herramientas existentes en GNU/Linux.



Si queremos utilizar un sistema convencional, ya sea Windows, Linux o Mac, que no disponga de un bus I2C accesible, lo más sencillo es utilizar un adaptador de USB a I2C. Los hay comerciales, aunque es posible fabricárselo uno mismo gracias al driver estándar i2c-tiny-usb, que permite en cualquier sistema utilizar un microcontrolador Atmel ATtiny 45/85 a modo de interface USB to I2C. Solo algunos valientes se atreverán a utilizar el bus I2C presente en el conector de las tarjetas de video, aunque técnicamente es posible. Sin llegar a disponer de la misma funcionalidad, también es posible utilizar un firmware que hace uso de la librería LUFA en cualquier microcontrolador de Atmel compatible, por ejemplo el ATmega32u4 del Arduino Leonardo, creando una interface "Serial to I2C", accesible desde Python por ejemplo. Con los adaptadores USB incluidos en los kits desarrollo oficiales de Atmel, se pueden utilizar las herramientas para Microsoft Windows que incluyen de forma gratuita.

La comunicación en el bus I2C se realiza de forma "maestro-esclavo". El maestro inicia el diálogo, obteniendo repuesta de los esclavos que se identifican por su dirección I2C de 7 bits. Esta dirección viene determinada de fábrica, aunque muchos dispositivos incorporan mecanismos para modificarla, lo que permite conectar varios dispositivos iguales a un mismo bus I2C.

Los sistemas "host" solo pueden ser maestros del bus I2C, siendo la mayoría de dispositivos I2C siempre esclavos. Algunos microcontroladores, por ejemplo los utilizados en Arduino, pueden ser programados para comportarse como maestros o como esclavos, aunque lo habitual es que actúen como maestros.

Mediante el comando "i2cdetect" en Linux, o con un simple sketch en Arduino, se puede escanear el bus I2C para detectar los dispositivos esclavos conectados.



En este ejemplo de escaneo, realizado tanto en Linux con un adaptador "i2c-tiny-usb", como en Arduino, se obtienen las direcciones I2C reales (en formato 7 bit) de los crypto-devices conectados al bus. Muchos fabricantes, Atmel incluido, suelen indicar en las especificaciones las direcciones I2C en formato de 8 bits, lo que suele dar lugar a ciertas confusiones.

Seguiremos describiendo en la próxima entrada las librerías y el hardware disponible para practicar con la criptografía en IoT.

Seguridad criptográfica en IoT (I)
Seguridad criptográfica en IoT (II)
Seguridad criptográfica en IoT (III)
Seguridad criptográfica en IoT (IV)
Seguridad criptográfica en IoT (V)
* Seguridad criptográfica en IoT (y VI)

Jorge Rivera
jorge.rivera@11paths.com

No hay comentarios:

Publicar un comentario