参加とセキュリティ
OTAA と ABP、デバイスの鍵、そしてゲートウェイがデータを読めない理由。
OTAA と ABP
OTAA(over-the-air activation):デバイスは Join リクエストでネットワークに参加します。必要な値は3つです。
- DevEUI: デバイスごとに世界で一意の番号(16進数 16 文字)、
- JoinEUI(旧称 AppEUI):Join サーバーを識別します、
- AppKey: 秘密鍵(16進数 32 文字)。
これらの値から、参加のたびに新しいセッション鍵が導出されます。推奨されるのは OTAA です。
ABP(activation by personalization):セッション鍵とデバイスアドレスが固定されています。デバイスは参加手続きを行いません。簡単ですが、安全性が低く、フレームカウンターがずれると不具合が起きやすくなります。
暗号化
LoRaWAN は2つのレベルで AES-128 を使います。
- NwkSKey(LoRaWAN 1.1 では複数のネットワーク鍵):メッセージを改ざんから守ります。ネットワークはこの鍵で、メッセージが本物かどうかを確認します。
- AppSKey: ペイロードをエンドツーエンドで暗号化します。ゲートウェイとネットワーク事業者には暗号化されたバイトしか見えず、復号するのはアプリケーションサーバーだけです。
フレームカウンター
各メッセージには連番のカウンター(FCnt)が付いています。ネットワークは、すでに受け取ったカウンター値のメッセージを破棄します。これにより、古いパケットを再送されることを防ぎます。
ABP デバイスが再起動して 0 から数え直すと、ネットワークはそのメッセージを破棄します。OTAA では参加のたびにカウンターが最初から始まり、その場合はそれが正しい動作です。