XBeeモジュールの使い方(AES暗号化)


 今回は、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ではメッセージ整合性チェックなしで暗号化が可能です。

レベル名称暗号化メッセージ整合性チェックオーバーヘッドのパケット長
0NA×0 (no check)0
4ENC0 (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:0123456789ABCDEF0123456789ABCDEFKY:0123456789ABCDEF0123456789ABCDEF
AP:[1]AP:[1]
D1:ADC[2]
IR:0x3E8(1000ms)

 この設定により暗号化された通信が可能になります。今回は暗号化キーとして以下の16バイトを使用しました。

KY: 0x0123456789ABCDEF0123456789ABCDEF (16バイト=128ビット)