今回はLoRaWANのネットワークに
参加するために必要なアクティベーション
について説明します。
LoRaWANのアクティベーションは、
2種類の用語で手順化されています。
次の2つがあります。
OTAA : Over The Air Activation
ABP : Activation By Personalization
違いの"イメージ"は 動的 or 静的 かの違いです。
この説明に入る前に、理解しやすくするために
6つの用語について確認しましょう。
KeyとEUI
LoRaWANのセキュリティや
ネットワークアソシエーションに関する
資料を読んでいると、
○○Keyと○○EUIというのが
しばしば出てきます。
以下にまとめました。
AppKey | AppEUI |
AppSKey | DevEUI |
NwkSKey | DecAddr |
AppKey :
この鍵は128bits(AES)で、
エンドデバイス毎に固有の鍵です。
これは、双方向通信を実現するための
AppSKeyとNwkSKeyの生成に使われます。
AppSKey :
Application Session Keyの略。
この鍵は128bits(AES)で、
エンドデバイスとゲートウェイ間が
通信する際に、フレームペイロードを
暗号化するために使用します。
NwkSKey :
Network Session Keyの略。
この鍵は128bits(AES)で、
データの完全性を保証するための
MICの計算に使用されます。
ちなみに完全性を保証するために、
AppSKeyによる暗号化を行った後に、
MICの計算が行われます。
AppSKeyとNwkSKeyの関係は、
次のようになっています。

EUIは、IEEEによって定められている
64ビットのユニークな識別子のことです。
IEEEが業者に対して一意になるように、
64ビットのアドレス空間を割り当てます。
そのうちの上位24ビットはOUIで、
残りの下位40ビットは業者が
重複のないように管理・割り当てを行います。
AppEUI :
グローバルユニークなアプリケーションIDです。
例えば、LoRaWANサービスを提供している
TTN社のサービスに申し込みをすると、
TTN社からAppEUIが割り当てられます。
(TTN : The Things Network)
DevEUI :
TCP/IPで言うところのMACアドレスです。
エンドデバイスを識別するアドレスです。
DevAddr :
TCP/IPで言うところのIPアドレスです。
アクティベーションの過程で、
ネットワーク側から4バイトの
一意なグローバルアドレスがもらえます。
エンドデバイスはアクティベーション時に、
AppKey、AppEUI、DevEUIの3つを
ネットワーク側に送信する必要があります。
ではこれらの用語を踏まえて、
実際のアクティベーション手順を
みていきましょう。
OTAA : Over The Air Activation とは
※ネットワークサーバとの表記がありますが、
これはゲートウェイよりバックボーン側に
存在しています。個人でネットワークを
運営するような場合は、ゲートウェイと
ネットワークサーバを兼用してる場合が多いです。
それではOTAAについてです。
OTAAは実際にJoinフレームを交換して、
アクティベーション・ネットワーク参加します。
確認ですがMACヘッダーの
Mac Typeフィールドには、
以下の値を指定することで、
フレーム種別を示します。
Message Type | Description |
---|---|
000 | Join Request |
001 | Join Accept |
010 | Unconfirmed Data Up |
011 | Unconfirmed Data Dowm |
100 | Confirmed Data Up |
101 | Confirmed Data Down |
110 | RFU |
111 | Proprietary |
OTAAのアクティベーションには、
0x000 Join Request と 0x001 Join Accept
の2つを使用します。
アクティベーションは常に、
エンドデバイスがJoin Requestを
送信することで開始します。
MTpyeにJoin Requestが指定されたら、
ペイロードには次のフォーマットに
沿って値が格納されます。
8bytes | 8bytes | 2bytes |
AppEUI | DevEUI | DevNonce |
DevNonceは、2バイトの乱数です。
悪者からの攻撃を防ぐメカニズムを
実現するために必要だそうです。
また、Join Requestは暗号化されません。
エンドデバイスからのJoin Requestを
受け取ったネットワークサーバは、
エンドデバイスの参加を許可する場合は、
Join Acceptを返信します。
ちなみに許可されない場合は、
エンドデバイスには何も返されません。
3bytes | 3bytes | 4bytes | 1byte | 1byte | 16bytes(Optional) |
AppNonce | NetID | DevAddr | DLSettings | RxDelay | CFList |
AppNonce :
乱数もしくは、
ネットワークサーバから渡される一意なID
のどちらかが入ります。
そしてエンドデバイスは、
この値を用いてAppSKeyとNwkSKey
2つのセッションキーを生成します。
CFList :
Channel Frequency List の略。
地域(国)ごとに異なる値が入ります。
Join Acceptは、AppKeyにて
暗号化して返信します。
以上のJoin Request & Join Accept
この2つのフレームのやり取りを通して、
アクティベーションは完了します。
最後にOTAAではない方の
アクティベーション方式についてです。
ABP : Activation By Personalization とは
例えば個人でLoRaWANネットワークを
運営しようとした場合は、
こちらの方式を使用します。
この方式はアクティベーションを
直接行う方式で、OTAAのような
Joinフレームのやり取りは行いません。
Join Acceptを経ることで取得した
DevAddr、AppSKey、NwkSKeyは
直接手動で、エンドデバイスに設定します。
LoRaWANのアクティベーションは以上です。
最後まで読んでいただきありがとうございました。
参考資料:
・LoRaWAN Security
https://lora-alliance.org/sites/default/files/2019-05/lorawan_security_whitepaper.pdf
・LoRaWAN Specification v1.1
https://lora-alliance.org/resource-hub/lorawanr-specification-v11