各種暗号化
Bluetooth meshネットワークのほとんどのセキュリティ機能は、業界標準の暗号化アルゴリズムと手続に基づいています。これらについては本シリーズの他のセキュリティ関連記事でも触れますが、最も重要なものについて、ここで解説します。
Bluetooth meshのスタックで使用されるセキュリティ関数には、主にAES-CMACとAES-CCMの2つがあります。この2つが基本的な暗号化・認証関数であり、キー生成に使用する他の全ての関数がこれらに基づいています。
AES-CMAC
CMAC(Cipher-based Message Authentication Code)は、どのような長さの入力からでも、固定長128ビットの認証値を生成します。AES-CMACアルゴリズムを使用してたMAC(メッセージ認証コード)生成式は、次のように表せます。
MAC = AES-CMACk(m)
この式で、AES-CMACへの入力は次の通りです。
AES-CMACは優れたエラー検出能力を持っています。チェックサムやエラー検出コードなどの検証方法では、データの偶発的な変更しか検出できない可能性がありますが、AES-CMACは偶発的な変更に加え、許可なく意図的に行われたデータ変更をも検出するよう設計されています。この関数について詳しくは、その仕様であるRFC4493を参照してください。
AES-CCM
AES-CCMは、汎用的な認証付き暗号化アルゴリズムで、ブロック暗号での使用を意図したものです。Bluetooth meshの仕様では、全ての場合にAES-CCMを基本的な暗号化・認証関数として使用しています。AES-CCMを使用するための式は次のようになります。
ciphertext, MIC = AES-CCMk (n,m,a)
AES-CCMへの入力は4つあります。
AES-CCMの出力は2つあります。
図3は、Bluetooth meshのネットワーク層またはその上のトランスポート層からの平文のペイロードがAES-CCMで処理される様子を示しています。入力は暗号化キー、nonce、平文のペイロードです。暗号化されたペイロードとMICが出力されます。
ソルトの生成
Bluetooth meshのセキュリティでは、AES-CMACを使用する「s1」というソルト生成関数が用意されています。先述したように、AES-CMACにはkとmという2つの入力パラメータがあります。ただし、ソルト生成の場合は入力パラメータmだけが変動値になります。kは常に128ビットの値「0x0000 0000 0000 0000 0000 0000 0000 0000」に設定されます。これはBluetooth meshの仕様では「ゼロ」として示されています。
ソルト生成関数への入力は次の通りです。
m - 0でない8ビット配列またはASCII文字列
出力は128ビットのMAC値です。s1の生成式は次のようになります。
s1(m) = AES-CMACZERO(m)
その他のセキュリティ関数
各種キー生成等に使用されるその他のセキュリティ関数の定義については、Bluetooth meshネットワーク仕様のセクション3.8.2「Security Toolbox」を参照してください。その全てが、AES-CMACおよびソルト生成関数s1に基づいています(ソルト生成関数もAES-CMACに基づいています)。
特別監修:アリオン株式会社
アリオンは、IT/IoT製品の品質検証や規格ロゴ認証、相互接続・互換性、性能評価、比較試験といった総合的な第三者検証ソリューションを提供する製品品質検証および技術コンサルティング企業です。アリオンにはBluetooth SIGから認定を受けた、製品認証をサポートするBQC(Bluetooth認証コンサルタント)が在籍しています。
Copyright © ITmedia, Inc. All Rights Reserved.