
今回は、XBee3モジュールを用いて、セキュア通信によってセンサデータを安全に送信する方法を解説します。XBee 3 RFモジュールは、AES(Advanced Encryption Standard)による128ビット暗号化に対応しています。この暗号化では16バイトのキーを使用し、データを正しく送信するためにはネットワーク内のすべてのデバイスが同じ暗号化キーを設定する必要があります。ここでいう「128ビット暗号化」とは、KYコマンドで入力する暗号化キーの長さ(128ビット=16バイト)を指します。
1.Securityのパラメータ
以下にXCTUのConfigurationのSecurityの部分を示します。

以下にこのSecurityの中の各パラメータについてまとめます。
項目 | 内容 |
EE (AES Encryption Enable) | AES暗号化を有効/無効を設定します。 |
KY (AES Encryption Key) | 暗号化と復号化に使用するキーを設定します。このパラメータは書き込み専用であり、読み取りはできません。 |
DM (Disable Device Functionality) | 無効化可能な機能のビットフィールド。 ビットフィールドのオプション: Bit 0 – 予約済み Bit 1 – 予約済み Bit 2 – OTAファームウェアアップデートを無効化。設定されている場合、デバイスはOTAアップデートを受信できません。 Bit 3 – 接続のクライアント側でのSRP(Secure Remote Password)認証を無効化 Bit 4 – 接続のサーバー側でのSRP認証を無効化 予約済みおよび未使用のオプションビットはすべて0に設定する必要があります。 |
US (OTA Update Server) | デバイスがOTAアップグレードに使用するサーバーの64ビットアドレスを指定します。 0: すべてのデバイスからのOTAアップグレードを受け入れます 0x1-0xFFFFFFFFFFFFFFFE: 指定された64ビットアドレスを持つサーバーからのOTAアップグレードのみを受け入れます 0xFFFFFFFFFFFFFFFF: 予約済み |
SA (Secure Access Option) | 不正アクセスから保護される機能のビットフィールド ビットフィールドオプション: Bit 0 – 予約済み Bit 1 – リモートATコマンド Bit 2 – シリアルデータ 予約済みおよび未使用のオプションビットはすべて0に設定する必要があります |
Secure Session Authentication | パスワードまたは SRP(ソルト/検証)を使用したセキュアセッション認証を構成します。 |
セキュア通信を行う場合はパラメータEE (AES Encryption Enable)とKY (AES Encryption Key)を設定する必要があります。SA (Secure Access Option)のBit 2はシリアルデータを暗号化するためのスイッチではなく、「安全なセッションで届かなかったシリアルデータは出力しない」というアクセス制御です。Bit 2 を有効化( 1)すると、安全なセッションを張っていない限りモジュールはシリアル出力が抑止されます。他のパラーメータはデフォルトのままで暗号化可能です。
2.EE (AES Encryption Enable)パラメータ
XBeeモジュールは以下の表に示すようにセキュリティレベル0と4をサポートしており、レベル4ではメッセージ整合性チェックなしで暗号化が可能です。
レベル | 名称 | 暗号化 | メッセージ整合性チェック | オーバーヘッドのパケット長 |
0 | NA | × | 0 (no check) | 0 |
4 | ENC | 〇 | 0 (no check) | 5 |
ここで、EE= 0はセキュリティレベル0に対応し、EE= 1はセキュリティレベル4に対応します。EEパラメータが一致しないと、受信デバイスは受信データを出力できません。
また、最大パケットサイズは116バイトですが、その他のオプションを使用すると、最大パケットサイズがさらに 101 バイト、99 バイト、または 95 バイトに削減される場合があります。
3.設定方法
XBee3モジュールの802.15.4ファームウェアを使用した場合の設定例を以下に示します。送信元XBeeのDIO1のACDから1秒感覚で受診先XBeeにAPIフレームを送信する場合を想定しています。各XBeeのCHやIDは一致しているもとのとします。
送信元XBee | 受信先XBee |
DL:1 (送信先のMY) | MY=1 |
EE:[1] | EE:[1] |
KY:0123456789ABCDEF0123456789ABCDEF | KY:0123456789ABCDEF0123456789ABCDEF |
AP:[1] | AP:[1] |
D1:ADC[2] | - |
IR:0x3E8(1000ms) | - |
この設定により暗号化された通信が可能になります。今回は暗号化キーとして以下の16バイトを使用しました。
KY: 0x0123456789ABCDEF0123456789ABCDEF (16バイト=128ビット)