🛠 Sécurité industrielle : élément sécurisé SE050C2 (EAL6+), PSA Certified et Parsec
Objetivos
La X8 se vende como «uno de los primeros productos Cassini» del mercado: una cadena de seguridad completa integrada. Mapeo: NXP SE050C2 en un bus dedicado (I²C esclavo hasta 3,4 MHz) — Common Criteria EAL 6+ (hasta el nivel de SO), generación de claves, criptografía acelerada, almacenamiento seguro, «protege la memoria flash de usuario hasta 50 kB»; plataforma PSA Certified y Arm SystemReady IR certificadas; servicios Parsec integrados para exponer la raíz de confianza a los contenedores; OTA firmada en fábrica. Este tutorial: entender dónde residen las claves, cómo un contenedor delega la seguridad sin tocarlas y cómo la OTA firmada protege el despliegue.
Material
- 1 × Arduino Portenta X8 + cable USB-C de datos
- adb + acceso sudo
- Un contenedor de prueba (el puente Python del tutorial RPC es suficiente para experimentar)
- Documentación: SE050-DATASHEET.pdf en docs.arduino.cc; documentación de Parsec (parsec-tools)
- Para el lado del MCU: el SE050C2 está en un bus dedicado — los dos mundos (Linux y M4) deben compartir la tarjeta con criterio
Código completo
# 1. Verifier la presence des services de securite dans l'image
adb shell
fio@portenta-x8:~$ sudo -i
fio@portenta-x8:~$ ls /sys/class/misc/ | grep -i se050 # trace du SE ?
fio@portenta-x8:~$ systemctl list-units | grep -iE "parsec|m4-proxy"
# 2. Un conteneur consigne Parsec (racine de confiance) sans jamais
# voir les cles : montage du socket dans l'app conteneurisee.
# >
# d'usine — verifie avec systemctl status parsec sur ta carte.
docker run -d --name app-securisee \
-v /run/parsec:/run/parsec \
-p 5002-5020:5002-5020 \
--device /dev/ttyGS0 \
arduino/python-rpc-serial
# 3. Principes a respecter (pas de code magic) :
# - les cles privees sont generees et restent DANS le SE050C2 ;
# - l'OTA de la factory est signee : une image falsifiee n'est
# pas installee ; les cles de provisioning sont par appareil ;
# - le M4 (Arduino) n'a pas besoin des secrets reseau : garde
# l'authentification MQTT/TLS dans le conteneur, adossee au SE.
Verificación esperada
La tarjeta expone las trazas de los componentes de seguridad (servicio Parsec, acceso al SE) y un contenedor puede delegar el servicio sin que ninguna clave aparezca en su sistema de archivos — ese es todo el interés del modelo: el SE050C2 firma/descifra para la aplicación, los secretos nunca atraviesan el contenedor. En cuanto al despliegue, solo pasa una imagen firmada por tu fábrica — una imagen falsificada en tránsito es rechazada.
Errores frecuentes
- Almacenar los secretos MQTT/TLS en la imagen Docker o en el sketch: es exactamente lo que el SE050C2 evita — claves en el elemento seguro (o en el keystore del servicio de seguridad), nunca en el binario versionado.
- Confundir los mundos: el SE050C2 está en un bus dedicado; antes de usarlo desde el M4, verifica quién, Linux o el MCU, controla este bus — no pueden tenerlo simultáneamente.
- Creer que «secure element» = aplicación transparente: sin el servicio de acceso (Parsec o equivalente) expuesto al contenedor, la aplicación no tiene ninguna ruta hacia el chip — verifica el servicio antes de escribir el código.
- Reutilizar la clave de aprovisionamiento de la fábrica en varios dispositivos: el modelo Portenta X8 Manager se basa precisamente en la clave individual por dispositivo — una clave compartida convierte un robo en una compromisión de la flota.
- Confiar en el cifrado para la disponibilidad: la OTA firmada protege la integridad, no la disponibilidad — mantén un slot de imagen anterior válida (A/B) y no cortes la alimentación durante un intercambio.
- >
- >
Otros tutoriales para esta placa
- Premiers pas : comprendre le monstre à 9 cœurs et entrer dans Linux via ADB
- Premier sketch sur le cœur M4 : le blink qui se flash par ADB
- Docker dès la sortie de l'emballage : premier conteneur sur le Linux embarqué
- Pont Linux ↔ Arduino : appeler des fonctions du sketch M4 depuis Python (RPC)
- Mettre la X8 en réseau : Wi-Fi du Murata 1DX et Gigabit Ethernet sur porteuse
- Nœud IoT de datalogging : capteurs sur le M4, stockage et transport en conteneur
Ejemplos de código para esta placa
etat-systeme.shBashgpio-libgpiod.shBashpython-gpio.pyPythondocker-hello.shBashflasher-core-arduino.shBashwifi-nmcli.shBash