こんにちは。AndGoのハードウェア担当の片山です。毎週水曜日はAndGoのエンジニアが交代で技術に関するマニアックな記事を皆様にお送りしています。

今回はBluetooth Low Energy (BLE)についてお話していきます。BLEはBluetooth 4.0から追加された規格で,超低消費電力であるため,電池などの電源で長期間動作させる必要があるIoT機器に使用されています。身近な例としてはフィットネスデバイスやスマートキーなどがBLEを採用しています。

ハードウェアウォレットでもLedger Nano XやCoolWallet S,先日ご紹介したSecuX V20などもBLEに対応しています。Trezor Model One/TやLedger Nano Sは通信方法としてUSBを採用していますが,多くのスマートフォンはUSB接続に対応していませんし,BLEでワイヤレスで通信できることで利便性が高まります。一方で,電波で重要な情報を伝えるという意味では盗聴や改ざんなどの不安感も残ります。今回はBLEについて解説していきたいと思います。

BLEで使う電波

BLEは電波を使って通信を行います。様々な周波数の電波がありますが,BLEは2.400〜2483.5GHzの周波数帯を使用しています。この周波数帯はISMバンドといって世界中で比較的自由に使えるもので,Wi-Fiや電子レンジなど多くの電子機器ががこの周波数帯を使っています。

BLEはこの2.400〜2483.5GHzの周波数帯を40チャネル二分割して使っています。このようにすることで,他の電子機器と干渉した場合にはチャネルを切り替えることで干渉を避けることができます。

とくにこの中でも2.402,2.426,2.480GHzを含む3つのチャネルをアドバタイジング・チャネルといって,BLEを使っているデバイスを見つけるためのチャネルとして利用されています。

理論上の通信帯域はBluetooth 5で通信帯域2Mbps実質的にはオーバーヘッドを考慮すると,10kbps程度のスピードになってしまいます。たとえば5MBのファイルをダウンロードするのに1時間程度かかる計算になります。したがって,BLEは大きなファイルのやりとりには向かず,IoT機器で取り扱うような小さなデータのための規格です。もちろん,仮想通貨のトランザクション程度のデータであれば余裕です。

電波の到達距離ですがBluetooth 5で通信速度を押さえれば理論上は400mですが,実際には10m程度でしょう。さらに,設定次第で出力を抑えてしまえば到達距離を短くすることができますので,隣の家から傍受するようなことは物理的に難しいといえるでしょう。

ペアリング

ハードウェアウォレットのような周辺機器とスマートフォンのようなホストが接続する際には,周辺機器側がアドバタイジング・チャネルを使って,周辺機器に関する情報を定期的に発信します。例えば周辺機器の名前や電波の発信強度,サービスの種類を表すIDなどです。

ホスト側はアドバタイジング・チャネルをスキャンして,周辺機器を探します。iOSであればLightBlueのようなアプリをダウンロードすることで,身の回りでどのようなBLEデバイスがあるかスキャンすることができます。2021年10月20日の記事でもLightBlueを利用してSecuXをスキャンしています。実のところ,電波が到達できる範囲内でBLE対応機器があるかどうかそのものはわかってしまいます。

スキャンのあと,適切な情報を発信している周辺機器があればホスト側からペアリングを要求します。この際にパスキーを入力するフェーズがあれば,鍵を交換しその後の通信経路は暗号化されます。そう簡単には解読することはできないものですので,ペアリングが安全に完了してしまえば,その後の通信については心配することはありません。一旦ペアリングもしてしまえば,デバイス同士はその情報を覚えているので,鍵情報さえ盗まれなければ盗聴や改ざんはされることはありません。

デバイス同士の情報通信

ペアリングが完了してしまえば,アプリケーションから見ればBLEは非常にシンプルです。それぞれのデバイスはキャラクタリスティックという最大512bytesの値を保持しています。例えば温湿度を監視するIoTデバイスでされば温度と湿度で2つのキャラクタリスティックを使うことになるでしょう。これらにはread/write/notifyという3種類のアトリビュートというものが設定できて,それぞれ他のデバイスから読み取り専用/読み書き可能/値が変更されたら通知,という役割になっています。イメージとしてはキャラクタリスティックという箱があり,そこにデバイス同士で共有したい情報を書き込んだり読み取ったりしていくイメージになります。このような方法を取ることで,各デバイスが必要なタイミングで情報をやりとりすることができます。さらにnotifyアトリビュートを使うことで,キャラクタリスティックに書き込みがあったときに,アプリケーション側に知らせることもできます。ハードウェアウォレットであれば,command,valueのような2つのキャラクタリスティックを準備しておき,アトリビュートをwriteにしておき,スマートフォンから司令を送るような使い方になります。

BLEのセキュリティ

Bluetooth 4.2以降では鍵交換を楕円曲線ディフィー・ヘルマンで行い,その後の通信経路はAES-CCMで暗号化されています。これはWebにおけるサーバーとブラウザの通信を安全に行うための仕組みと同等ですので,安心して使えるといえます。

万が一通信経路が改ざんされトランザクションの内容が変更されたとしてもハードウェアウォレット上でトランザクションの内容は確認できますし,BLEを介してハードウェアウォレットから秘密鍵を取り出すようなことも(ファームウェアにバックドアが用意されていない限りですが・・・)不可能です。

懸念されるのがBLE対応機器をスマートフォンなどからスキャンすることができてしまうので,電源が入ったハードウェアウォレットが近くにあればその存在が知られてしまう可能性があります。ただし,電波の到達距離は数m程度ですので,部屋の外からスキャンすることは難しいでしょう。もちろん電源が入っていなければその心配はありません。

もしBLE対応のハードウェアウォレットをより安全に使用するのであれば,まず,自宅の周辺に怪しい人がいないか確認し,鉄の壁でできた部屋(もしくは電子レンジの中?)でBLEの通信をすれば,通信が漏れることも,余計な電波が入ってくることもありません。