Bluetoothのセキュリティは、調べれば調べるほど複雑です。なので、ここでスペックに記載されているBluetoothのセキュリティ(特にペアリング)について、勉強したことを纏めてみたいと思います。
大事なこと
Bluetoothには、BR/EDR(Classic)とLE(Low Energy)の二種類の無線規格が存在します。ClassicとLEではセキュリティについてもそれぞれに異なる仕様が規定されています。ClassicとLEで似たような用語が出ますが、同じ意味の場合や異なる意味の場合があるので混乱すること間違いありません。
なお、この記事では、Bluetooth Classicのセキュリティについて紹介します。BLEのセキュリティについては、Bluetoothのセキュリティ (LE編)に纏める予定です。
基本的なこと
Bluetoothのセキュリティは2段構えになっています。
- 一段目:ペアリングを実行してリンクキーを生成する
- 二段目:プロファイル接続時にリンクキーを使い、無線の暗号化を行う
まずは、ペアリングについて解説します。
ペアリングとは
ペアリングとは、一般的にはBluetooth機器を使用するための最初に実行する接続手順として知られているとおもいます。Bluetoothスペック上は「リンクキー」と呼ばれる共通鍵を生成する処理です。つまり、ペアリングとはどのような手順・方法でリンクキーを生成するかを定めたもの、ということになります。
ペアリング方式
ペアリングには、Bluetoothのバージョンにより大きく2種類の方式が存在します。
| ペアリング方式 | バージョン | 説明 |
|---|---|---|
| PINコードペアリング | Bluetooth 2.0+EDR以前 | ペアリングする機器同士が、共通の"PINコード"と呼ばれる数字を入力する方式です。一般的に"0000"など、4桁の数字を入力するあれです。Bluetoothスペック上は0x00~0x7Fまでの値を16桁まで使用可能です。最新のBluetoothスペックでは「Legacy pairing」と呼ばれています。 |
| Secure Simple Pairing | Bluetooth 2.1+EDR以降 | いわゆる「SSP」と呼ばれる方式です。スマホとBluetooth機器をペアリングする際に、6桁の番号が表示されて数値が合っていることを確認してペアリングするあれです。ペアリングの実施過程にECDH(楕円曲線ディフィー・ヘルマン鍵共有)などの仕組みを取り入れ、Legacy pairingからセキュリティ強度を高めています。 |
なお、Bluetoothスペック (Vol 3, Part C, 5) には「Security mode 1~ mode 4」が存在しますが、Security mode 1~3が「Legacy Pairing」、Security mode 4が「Secure Simple Pairing (SSP)」を指します。
これ以降のペアリングは、特に断りがない限り「Secure Simple Pairing (SSP)」について説明します。
ペアリングの実行方式
Secure Simple Pairing (SSP)では、「Association models」として4つのペアリング方式が定義されています。
| Association models | 内容 |
|---|---|
| Numeric Comparison | ペアリングする2つのデバイスで6桁の番号表示し、一致している場合にペアリングを成立させる実行方式 |
| Passkey Entry | 一方のデバイスが6桁の数値を表示してもう一方のデバイスで6桁の番号を入力、またはどちらにも任意の6桁の番号を入力し、ペアリングを成立させる実行方式 |
| Out of Band (OOB) | ペアリングする2つのデバイスが、ペアリングに必要な情報をBluetooth通信以外の方法で交換し、ペアリングを成立させる実行方式 |
| Just Works | 番号の表示・入力装置を持たないデバイス向けの実行方式 |
どの実行方式でペアリングするかは、ペアリングするデバイス同士のI/O能力などの情報により決定されます。
ペアリングを実行するにあたり
まず、ペアリングを実行するためには、Bluetooth機器において以下の3つの情報を決める必要があります。
- Bluetooth機器のI/O能力を決める
- MITMプロテクションの有効・無効を決める
- OOBを使うか決める
Bluetooth機器のI/O能力
Bluetooth機器が持つInput/Output装置から、ペアリングを実行するための能力(IO Capabilities)を決定します。スペックでは次の4つのIO能力が定義されています。
| IO Capabilities | 内容 |
|---|---|
| DisplayOnly | 6桁の数値を表示可能なディスプレイ装置を持つ(Input装置なし) |
| DisplayYesNo | 6桁の数値を表示可能なディスプレイ装置と"Yes"/"No"の確認入力機能を持つ |
| KeyboardOnly | '0'~'9'の数値の入力機能を持つ(Output装置なし) |
| NoInputNoOutput | 一切のInput装置、Output装置を持たない |
Bluetooth機器がどの能力を具備しているかは、次のルールで決定します。
1. Input能力を確認する
Bluetooth機器に備わるInput(入力)装置を確認し、以下の3つからInput能力を決定します。
| Input能力 | 説明 |
|---|---|
| No input | "Yes"/"No"の入力装置を持たない |
| Yes/No | "Yes"/"No"を入力できる装置を持つ |
| Keyboard | '0'~'9'の数値を入力できる装置を持つ |
2. Output能力を確認する
Bluetooth機器に備わるOutput(出力)装置を確認し、以下の2つからOutput能力を決定します。
| Output能力 | 説明 |
|---|---|
| No output | 6桁の数値を表示する装置を持たない |
| Numeric output | 6桁の数値を表示(ユーザに通知)可能な装置を持つ |
3. I/O能力を決定する
ここまでに確認したInput能力、Output能力を以下のマッピングに当てはめ、Bluetooth機器のI/O能力(IO Capabilities)を決定します。
| No output | Numeric output | |
|---|---|---|
| No input | NoInputNoOutput | DisplayOnly |
| Yes/No | NoInputNoOutput | DisplayYesNo |
| Keyboard | KeyboardOnly | DisplayYesNo |
※指摘を受けて、上記の表を修正しました(ご迷惑お掛けしました)。
MITMプロテクションの有効・無効を決める
Bluetooth 2.1にてSSPが採用された1つの理由は、MITM攻撃(Man-in-the middle attack)からの防御です。このため、MITMプロテクションの有効・無効はSSPにおける1つのパラメータとして存在します。MITMプロテクションが有効になると、ペアリング処理に必ず人の手を介在させることになるため、より高いセキュリティが担保できます。ただし、MITMプロテクションを有効としながら人の手を介在させることができない場合、ペアリングに失敗する場合もあります。例えばスマートフォンにBluetoothヘッドフォンをペアリングさせる場合を想定します。通常ヘッドフォンにはInput装置もOutput装置が存在せず、Bluetooth機器のI/O能力としてはNoInputNoOutputを選択せざるを得ません。この状況でMITMプロテクションを有効とした場合、スマートフォンとヘッドフォンのペアリングでは6桁の番号を確認する方法も、6桁の番号表示や入力処理することもできません。つまり、ペアリングの設定的に矛盾が生じてしまうため、Blueototh機器の実装によってはペアリングに失敗する可能性があります。一方でMITMプロテクションを有効とすることで、人の手を介在できないデバイスとはペアリングしない(させない)ことも可能です。このあたりは、Bluetooth機器としてどのようなセキュリティポリシーとするかをしっかり検討する必要があります。
OOBを使うか決める
Out of Band (OOB)では、ペアリング中のデータ交換の一部をBluetooth無線上以外の通信で実行します。Bluetooth無線以外の通信に何を用いるかはスペックに定義はありません。USBやNFCなどを使用するのが一般的ですが、データを手書きメモで交換しても、問題はありません。なお、OOBを使ったペアリングは基本的に2つのデバイスどちらも対応している必要があるため、特定のBluetooth接続ユースケースのみで使用されているようです。
NFCにタッチすると簡単にペアリングできるBluetoothスピーカなどが存在しますが、ほとんどの場合はBluetoothスペック上のOOBは実装されていません。BluetoothスピーカのNFCにBluetoothアドレスが埋め込まれており、それをスマホのNFCリーダ機能で読み取り、自動接続している(ペアリングはJust worksで実行)が一般的です。
※このあたりは、NFCの"Static Handover"の仕組みを参照して下さい。
ペアリングの手順
ここからは、SSPにおけるペアリング(開始からリンクキー生成まで)の手順を説明します。
Step.1:認証処理を開始する (Start Simple Pairing)
ペアリングを実行する機器同士は、Bluetooth無線を接続後、どちらかが認証処理の開始を実行します。この場合の認証とは、共通鍵であるリンクキーを持っているかの確認となります。要するに「認証しましょう」→「リンクキーある?」→「持ってない」→「リンクキー作ろう」という流れで、ペアリングが実行されることになります。この「認証しましょう」は、サービス接続(プロファイル用のL2CAP接続)を契機に、ホストが指示します。
Note
スペック上、HFPなどのL2CAP接続の際には、必ず認証が必要です。認証にはリンクキーを必要とします。ペアリング未実施の場合、認証処理を実行できないので、ペアリングしてリンクキーを生成することになります。ちなみに、SDPは認証不要でL2CAPを接続し実行することが可能です。
Step.2:ペアリング情報の交換 (IO Capability Exchange)
ペアリングを実行する機器同士で、I/O能力などペアリングに必要な情報を交換します。この交換した情報を元に、今後のペアリングの方式が決定されることになります。なお、交換する情報は以下の通りです。
- I/O能力 (IO Capabilities)
- MITMプロテクションの有効・無効
- OOBの有無
- ボンディング情報
上記パラメータは、ホストがコントローラに設定します。ボンディングとは、リンクキーを生成後、保存するかどうかです。ペアリングした機器同士がリンクキーを保存し続けることを「ボンディング状態」と言います。また、この先OOBでペアリングするためには、Step.1の前にOOBのデータを交換しておく必要があります。
Step.3:公開鍵の交換 (Public Key Exchange)
ここでの公開鍵(Public Key)とは、ECDHの公開鍵のことを指します。この鍵はコントローラが生成し、ペアリングを実行するコントローラ同士で交換されます。ここはホストは介在しません。
Step.4:Numeric Comparison
Step.3以降は、Step.2で交換した情報を基に、3つのパターンでリンクキーを生成していきます。その1つがNumeric Comparisonです。ペアリングするときに、機器同士に同じ6桁の番号が表示され、どちらも「OK」を押すとペアリング完了となるアレです。
なお、「JustWorks」と呼ばれるペアリング(ユーザが確認せずにペアリングする方式)は、厳密にはNumeric Comparisonで動作しています。
Step.4-B:Passkey Entry
2つ目のパターンはPasskey Entryです。PCとキーボードデバイスのように、一方に6桁の番号、もう一方でそれを入力する方式です。
Step.4-C:Out of Band
3つ目のパターンはOut of Band (OOB)です。Step.1の前に交換した情報を使用してペアリングします。
Step.5:DHKey check
Step.4のいずれかの方式でペアリング機器の確認が済むと、DHKey checkを実行します。
Step.6:Calculate Link Key
Step.5も無事にクリアすると、やっとリンクキーが生成されます。コントローラがリンクキーを生成し、ホストに通知します。