大半の BLEタグ 製品は広告(アドバタイズ)専用のビーコンとして出荷される。スマホがスキャンしてペイロードを読み、そのまま離脱する。しかし設定変更、鳴動(リング)、ファームウェア更新、センサバッファの読み出しが必要になると、本物の GATT 接続が要り、接続管理が難所になる。本稿ではペアリング、ボンディング、LE Secure Connections、GATT 構成、接続パラメータ、そして実際に出荷を妨げる iOS/Android の癖まで、マーケティングを抜きにして解説する。
ペアリングとボンディング
ペアリングは LTK を生成するライブな鍵交換ハンドシェイクだ。ボンディングはペアリング「+」その LTK(および IRK/CSRK)をフラッシュに永続化し、次セッションを再ペアリングなしで暗号化再開する仕組み。ボンディングしないタグはアプリを切るたび再ペアリングを強いる。これは消費者向け検知タグとして許容できない。
Legacy Pairing と LE Secure Connections
Legacy Pairing(4.0 to 4.1)は一時鍵から LTK を派生し、受動傍受に弱い。交換を一度キャプチャすれば LTK を導出できる。LE Secure Connections(4.2+)は先に ECDH P-256 ハンドシェイクを行うため、LTK は空上に出ない。位置情報や識別子を担うタグは Secure Connections が唯一の妥当なベースラインだ。
| 項目 | Legacy Pairing | LE Secure Connections |
|---|---|---|
| 鍵合意 | Temporary Key | ECDH P-256 |
| 受動傍受 | LTK 復元可 | 安全 |
| MITM(数値照合) | 不可 | 可 |
| 最低バージョン | 4.0 | 4.2 |
アソシエーションモデル
アソシエーションモデルはリンクをユーザがどう確認するかを決める。Just Works は無音だが MITM 保護なし。検知タグには可、錠前には危険。Numeric Comparison(Secure Connections のみ)は両端に 6 桁コードを表示する。
| モデル | ユーザ操作 | MITM | 用途例 |
|---|---|---|---|
| Just Works | なし | 否 | 検知タグ、低価値 |
| Passkey Entry | 6 桁入力 | 是 | 工業設定 |
| Numeric Comparison | コード確認 | 是 | セキュアタグ |
| OOB | タップ/NFC | 是 | プロビジョニング |
鍵階層
ペアリング後、スタックは LTK(128bit リンク暗号化)、IRK(解決可能私有アドレス生成)、CSRK(署名付き書き込み認証)、および ER/DHK ルート種を保存する。IRK があってこそタグがアドレスをローテーションした後もボンディング済スマホが認識できる。
GATT サービス構成
実用的な検知・追跡タグの GATT:
| UUID | サービス/特性 | プロパティ |
|---|---|---|
| 0x180F | Battery Service | Read |
| 0x180A | Device Information | Read |
| 0x2A06 | Alert Level(Find Me) | Write |
| Fxxx | Config(間隔・TX 電力) | Read/Write |
| Fxxx | Button / 最終押下 | Notify |
| Fxxx | Firmware revision | Read |
Config 特性はボンディング背後で書き込み制限すること。そうしないと範囲内の誰もが TX 電力を書き換え、到達距離制限を無効化できる。
接続パラメータ
全接続を支配する 3 値:
- Connection Interval:7.5 ms to 4000 ms。iOS は実効で交渉下限を約 20 ms に制限する。
- Slave Latency:タグがスキップ可な 0 to 499 イベント。
- Supervision Timeout:100 ms to 32000 ms。(1 + latency) x interval x 2 を超える必要がある。
低電力プロファイル:interval 1000 ms、latency 9、timeout 11 s は、タグが 10 回中 9 回をスキップし、約 1 秒ごとに目覚める。平均電流は接続(30 ms 間隔)の mA 帯から数十 uA へ下がる。
電池を食わずに再接続
広告専用タグは静的または乱数アドレスを放送し、ボンディング済スマホはアドレスローテーション後に確実に見つけられない。IRK から生成する 解決可能私有アドレス(RPA) を使い、White List を有効にして広告し、ボンディング済スマホに RPA を解決させる。汎用 SoC の White List サイズは 8 to 32 エントリ。スマホ+数台のゲートウェイに十分。
出荷を台無しにする iOS/Android の癖
- iOS:CoreBluetooth のバックグラウンドスキャンは、広告に UUID が含まれるサービスのみにマッチする。タグがサービス UUID を隠すとアプリはバックグラウンドで起きない。20 ms 未満の接続間隔は拒否される。ANCS はアラート配信にボンディング接続を要する。
- Android 12+:BLUETOOTH_CONNECT と BLUETOOTH_SCAN は実行時権限。なしではスキャンは空を返す。「近くのデバイスを検出」システムプロンプトの処理と、キャッシュアプリへのバックグラウンドスキャン絞り(約 1 回/時)が必要。
- 共通:接続を常時保持すると CR2032 を数日で枯渇させる。オンデマンドで接続し、終わったら切断。
電力トレードオフ
| モード | 概算電流 | CR2032 寿命 |
|---|---|---|
| 広告専用(200 ms) | 約 5 to 15 uA | 1 to 3 年 |
| 接続(30 ms 間隔) | 1 to 3 mA バースト | 日 to 週 |
| オンデマンド接続 | 数十 uA 平均 | 1 to 2 年 |
原則:標準は広告専用。設定・鳴動・OTA のみ接続を開き、終わったら閉じる。
陥り穴
- ペアリングのみでボンディングせず → 起動ごと再ペアリングループ。
- 位置タグで Legacy Pairing → LTK 復元可。
- 静的乱数アドレス+IRK なし → ボンディング済スマホがタグを見つけられない。
- 「一応」接続保持 → 電池死。
- iOS でサービス UUID を隠す → バックグラウンド起動なし。
接続管理を正しく行うことが、デモタグと実際に出荷できる製品の違いだ。Secure Connections と健全な GATT を実装済みのリファレンス設計には、当社の Bluetooth module ラインと、より広範な BLEタグ ファミリーを参照されたい。