🛠 Canal sécurisé : OTAA, MIC et élément ATECC508

Arduino MKR WAN 1300 · avance · Schéma : IMG-mkr-wan-1300-avance-1-mkrwan-lien-securise.svg — lien sécurisé OTAA/AES avec élément ATECC508 en évidence

Objectifs

Il n'y a pas de TLS sur cette carte (pas de Wi-Fi, donc pas de WiFiSSLClient). L'équivalent « canal sécurisé » est la sécurité LoRaWAN : jointure OTAA avec dérivation de clés, intégrité MIC (AES-128) sur chaque trame, et protection des clés dans l'écosystème MKR (élément ATECC508 embarqué). Ce tuto couvre les bonnes pratiques de clés et la vérification du lien.

Matériel

Code complet

#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 : vérifier 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);
}

Vérification attendue

La jointure OTAA crée une session fraîche (les clés de session ne circulent jamais en clair) ; les uplinks confirmées reçoivent un ACK dont le MIC valide l'intégrité. Côté serveur, la session change après chaque rejoin.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels