🛠 Canal sécurisé : OTAA, MIC et élément ATECC508
Objetivos
No hay TLS en esta tarjeta (no hay Wi-Fi, por lo tanto, no hay WiFiSSLClient). El equivalente de "canal seguro" es la seguridad de LoRaWAN: unión OTAA con derivación de claves, integridad MIC (AES-128) en cada trama y protección de las claves en el ecosistema MKR (elemento ATECC508 integrado). Este tutorial cubre las mejores prácticas de claves y la verificación del enlace.
Material
- 1 Arduino MKR WAN 1300 (elemento seguro ATECC508 integrado)
- Servidor LoRaWAN con una App Key fuerte (128 bits aleatorios, única por dispositivo)
- > NO VERIFICADO: biblioteca Arduino para el acceso al ATECC508 en el lado del 1300 (chip confirmado, API de software no verificada aquí)
Código completo
#include <MKRWAN.h>
LoRaModem modem;
// En production : NE JAMAIS laisser les cles en clair dans le depot.
// Les stocker hors du code (zone config, element securise) et les regenerer.
String appEui = "0080000000000001";
String appKey = "GENEREE_PAR_TON_SERVEUR_32_HEX";
void setup {
Serial.begin(115200);
if (!modem.begin(EU868)) while (1) {}
// OTAA (mode 1) : derive NwkSKey/AppKey par session, prefere a ABP (mode 0)
if (!modem.joinOTAA(appEui, appKey)) {
Serial.println("Join refuse : verifier AppEUI/AppKey et couverture");
while (1) {}
}
modem.minPollInterval(60);
modem.linkAdaptiveDataRate(true); // ADR : monte la DR quand le lien est bon
}
void loop {
modem.beginPacket;
modem.print("secure");
// uplink confirmee = ACK signe MIC : preuve de reception integre
bool ok = modem.endPacket(true) > 0;
Serial.print(ok ? "MIC OK " : "MIC ECHEC ");
Serial.print("rssi="); Serial.print(modem.readRSSI);
Serial.print(" snr="); Serial.println(modem.readSNR);
delay(120000);
}
Verificación esperada
La unión OTAA crea una sesión nueva (las claves de sesión nunca viajan en claro); los uplinks confirmados reciben un ACK cuyo MIC valida la integridad. En el lado del servidor, la sesión cambia después de cada rejoin.
Errores frecuentes
- Usar ABP en lugar de OTAA: claves estáticas reutilizables (regresión conocida de joinABP entre MKRWAN 1.0.14 y 1.0.15, issue #85).
- App Key débil o compartida entre dispositivos: cada dispositivo debe tener su clave única.
- Creer que el ATECC508 se utiliza automáticamente: sin código dedicado, las claves permanecen en claro en el sketch.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
emission-p2p.inoArduinoreception-p2p.inoArduinoreglage-sp.inoArduinometeo-lora.inoArduinotrame-crc.inoArduinorelais-radio.inoArduino