ネットを検索すると「Bluetooth LE」はペアリングの必要がないので…」という記述にちょくちょく出くわします。これは間違いではないのですが、必ずしも正しい既述でもありません。今回はBluetoothのセキュリティーの話です。

Bluetoothのセキュリティー

 Bluetoothのセキュリティー機構はWi-Fiと似ているところもあり、違うところもあります。Wi-Fiのセキュリティーは原則としてアクセスポイントと子機の間で設定されますが注1)、Bluetoothではマスター(親機)とスレーブ(子機)の間で設定されます。セキュリティーを成立させるため、Bluetoothの親機と子機は相互に登録して秘密鍵を交換・保存する必要があり、この手順を「ペアリング」と呼んでいます。ペアリングはBluetoothにおけるセキュリティーの中核をなす概念となります。

注1)ただしWi-Fiエンタープライズセキュリティーを使用する場合は、セキュリティーの管理はアクセスポイント外のRADIUSサーバーに集約されることが普通です。Bluetoothにはエンタープライズに相当するセキュリティーの概念はありません。

 Wi-Fiの場合、古いWEPでは「アクセスポイントごと」に暗号鍵を設定していました。しかし全ての子機が同じ暗号鍵で通信することは暗号の解読を容易にする欠陥があり、後のWPA/WPA2ではアクセスポイントごとに設定された秘密鍵(PSK、あるいはパスフレーズ)を元情報として、子機ごとに異なる暗号鍵(PTK)を動的生成し使用するよう改められています。

 Bluetoothの暗号化でもWi-Fi WPA同様、マスターデバイス間ごとに異なる暗号鍵が使われます。Bluetooth Classicの場合これを「リンクキー」と呼び、Bluetooth LEでは「LTK(Long Term Key)」と呼びます。BluetoothにはWi-Fi WPAのPSKに相当する「ユーザーが設定するパスワード」はなく、ペアリング設定時にマスターとデバイス間で鍵の動的生成を行います注2)。場合によってはこのとき「交換された鍵の正しさ(通信経路上で第三者によって鍵が差し替えられていないこと)」の検証(認証)も行います。この「ペアリング操作によって暗号鍵の交換を行う」「ペアリング時にオプションで認証を行う」という基本概念はClassicでもBluetooth LEでも共通です。

注2)実は古いPINモードのペアリングでは「Unit Key」と「Combination Key」の2方式が定義されており、このうちUnit Keyではペアリング時に疑似乱数交換を行わないため、暗号鍵は静的に近いものになります(Core Spec 4.2 Vol.2 Part.H 3.2.3)。もっともPINモードは既にObsoletedとされており、Unit Keyはさらに遡ってDeprecated宣言されているため、「過去にはそういう物もあった」という程度の話です。

 ペアリングが成立すると、通常はマスター=スレーブ間の秘密鍵(リンクキー)は外部から読み出しにくい(と考えられる)領域に保存されます。次回電源投入時には保存されたリンクキーを読み出して通信するので、一度ペアリング成立したデバイスは(設定消去しない限り)次回は電源投入するだけで接続・使用できる理屈になっています。

 実はBluetoothの仕様書において、ペアリングという用語は「鍵交換プロトコルの実行」を指し、「交換した鍵の保存」は「ボンディング(Bonding)」という用語で区別されることになっています(Core Spec 4.2 Vol.3 Part.C 16.5)。しかしこの区別はあくまで仕様書の中でプロトコルや手順の解説に使い分けられているだけであり、製品を操作してBondingを実施する行為は一般的に「ペアリング」と呼ばれます。Bluetoothの仕様書中でもコンテキストによって「ペアリング」という言葉が「ボンディング」の意味を兼ねていることがあり、仕様書を読むうえで混乱しやすいところです。本コラムにおいては原則として、ボンディングの意味も含めて(よりなじみの深い)「ペアリング」という用語を使っています。