LoT ラブオーティー

非モテ男の、非モテ男による、【女の子にモテたい】非モテ男のためIT活用ブログ

IoT

LoRaWANネットワークの参加について!(OTAAとABPの違い)

更新日:



今回は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 Request0x001 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


-IoT

Copyright© LoT ラブオーティー , 2020 All Rights Reserved Powered by STINGER.