一部の高度な機能は、ターゲット ハードウェア プラットフォームでサポートされているかどうかに応じてオプションです。
自動フレーム待ち
IEEE 802.15.4 では、直接送信と間接送信の 2 種類のデータ送信方法が親と子の間で定義されています。後者は主に、ほとんどの時間スリープするスリープ状態のエンドデバイス(SED)向けに設計され、定期的にキューに格納されたデータを親にポーリングします。
Direct Transmission - 親はデータフレームをエンドデバイスに直接送信します。
間接的な伝送 - 親は、意図されたエンドデバイスによって要求されるまでデータを保持します。
間接的な場合、まず、子エンドデバイスが親にポーリングして、そのデバイスで利用可能なデータがあるかどうかを判断する必要があります。これを行うために、子はデータ リクエストを送信し、これが親で確認されます。親は、子デバイスのデータがあるかどうかを判断します。送信されている場合、データパケットを子デバイスに送信し、そこでデータの受信を確認します。
無線通信が SED への送信確認応答のフレーム保留ビットを動的に設定することをサポートしている場合、ドライバは送信元アドレスの照合 API を実装して、この機能を有効にする必要があります。OpenThread はこの API を使用して、Frame Pending ビットを設定する SED をラジオに通知します。
無線が Frame Pending ビットの設定を動的にサポートしていない場合、無線は送信元アドレス一致 API をスタブアウトして OT_ERROR_NOT_IMPLEMENTED
を返すことがあります。
無線でのエネルギー スキャン/検出
Energy Scan/Detect 機能では、選択したチャネルに存在するエネルギーをサンプリングし、検出されたエネルギー値を上位レイヤに返す無線チップが必要です。
この機能が実装されていない場合、IEEE 802.15.4 MAC レイヤはビーコン リクエスト / レスポンス パケットを送受信して、チャネルの現在のエネルギー値を評価します。
無線チップが Energy Scan/Detect をサポートしている場合は、マクロ OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0
を設定してソフトウェアのエネルギー スキャン ロジックを必ず無効にしてください。
mbedTLS のハードウェア アクセラレーション
mbedTLS は、ユーザーが AES、SHA1、SHA2、その他のモジュールの代替実装を有効にできるように、メイン構成ヘッダー ファイル(mbedtls-config.h
)でいくつかのマクロを定義します。また、GF(p) モジュールの over 円曲線暗号(ECC)の個々の関数にも対応しています。詳しくは、mbedTLS ハードウェア アクセラレーションをご覧ください。
OpenThread ではこれらのマクロを有効にしていないため、対称暗号アルゴリズム、ハッシュ アルゴリズム、ECC 関数はすべて、デフォルトでソフトウェア実装を利用します。これらの実装には、かなりのメモリと計算リソースが必要です。最適なパフォーマンスとユーザー エクスペリエンスの向上を実現するため、上記のオペレーションを実装するには、ソフトウェアではなくハードウェア アクセラレーションを有効にすることをおすすめします。
OpenThread 内でハードウェア アクセラレーションを有効にするには、プラットフォームの CMake ファイルで、次の mbedTLS 構成ヘッダー ファイルを ot-config
コンパイル定義に追加する必要があります。
- OpenThread で使用されるすべての必要なマクロを定義するメイン構成:
/openthread/third-party/mbedtls/mbedtls-config.h
- モジュールと関数の代替実装を定義するユーザー固有の構成:
src/platform-name-mbedtls-config.h
nrf52811.cmake
の例:
target_compile_definitions(ot-config INTERFACE "MBEDTLS_USER_CONFIG_FILE=\"nrf52811-mbedtls-config.h\"" )
mbedtls-config.h
のコメント付きマクロは必須ではなく、ユーザー固有の設定ヘッダー ファイルで有効にしてハードウェア アクセラレーションを有効にできます。
ユーザー固有の構成の完全な例については、ot-efr32
の mbedtls_config_autogen.h
ファイルをご覧ください。
AES モジュール
OpenThread セキュリティは、IEEE 802.15.4 または MLE メッセージの暗号化/復号に AES CCM(Counter with CBC-MAC)暗号を適用して、メッセージ統合コードを検証します。ハードウェア アクセラレーションでは、少なくとも AES CCM の基本的な機能呼び出しに基本的な AES ECB(Electronic Codebook Book)モードをサポートする必要があります。
別の AES モジュール実装を利用するには:
- ユーザー固有の mbedTLS 構成ヘッダー ファイルで
MBEDTLS_AES_ALT
マクロを定義する MBEDTLS_CPPFLAGS
変数を使用してaes_alt.h
ファイルのパスを指定します。
SHA256 モジュール
OpenThread セキュリティは、HMAC および SHA256 ハッシュ アルゴリズムを適用して、スレッド仕様に従ってネットワーク キー管理と PSKc 生成のハッシュ値を計算します。
別の基本的な SHA256 モジュールの実装を利用するには:
- ユーザー固有の mbedTLS 構成ヘッダー ファイルで
MBEDTLS_SHA256_ALT
マクロを定義する MBEDTLS_CPPFLAGS
変数を使用してsha256_alt.h
ファイルのパスを指定します。
ECC 関数
mbedTLS は現在、モジュール全体ではなく、ECC 関数の一部に対してのみハードウェア アクセラレーションをサポートしているため、path-to-mbedtls/library/ecp.c
で定義された関数を実装して ECC ポイント乗算を高速化できます。
曲線 secp256r1 は、ECJPAKE ドラフトの鍵交換アルゴリズムで使用されます。したがって、ハードウェア アクセラレーションでは、少なくとも secp256r1 の短いワイヤストラス曲線操作をサポートする必要があります。SiLabs CRYPTO Hardware Acceleration for mbedTLS の例をご覧ください。