本番環境でのBluetoothビーコンの展開は、多くのBLEプロトコル解説が見落としている攻撃面をもたらします。本記事では、実用的な脅威—アドレススプーフィング、ADVパケット盗聴、リプレイ攻撃—を分析し、定量的なセキュリティ余裕度を持つエンジニアリング対策を提供します。対象読者は、小売・産業・資産追跡シナリオでビーコンを展開するRFエンジニアおよび組込みセキュリティ実務者です。
脅威モデル:攻撃者が実際に実行できること
BLEは暗号学的な要塞ではなく、低消費電力の利便性のために設計されています。現実的な脅威の状況を理解することが、あらゆる展開の出発点です:
| 攻撃種別 | 層 | 必要機材 | 難易度 | 影響 |
|---|---|---|---|---|
| MACアドレススプーフィング | Link Layer | USBドングル($20)+hcitool | 低 | 偽の存在通知 |
| ADVパケット盗聴 | Link Layer | Ubertooth / nRF Sniffer($50) | 低〜中 | 位置追跡、資産ID漏洩 |
| リプレイ攻撃 | Application | キャプチャ+再送 | 中 | 不正なゾーン侵入 |
| MitM(接続) | L2CAP | 2個のドングル+BT VS HCIコマンド | 高 | データ傍受 |
| ジャミング | PHY | SDR($300以上)または改変ファームウェア | 中 | ビーコンのDoS |
MACアドレススプーフィング:検出と緩和
BLEアドレスには4つのタイプがあります(Public、Random Static、Random Private Resolvable(RPA)、Random Private Non-Resolvable)。ほとんどの本番ビーコンはPublicまたはRandom Staticアドレスを使用します—いずれも容易にスプーフィング可能です。$20のUSBドングルを持つ攻撃者は、ビーコンのMACをクローンし、偽のADVパケットを注入できます:
# Attacker: spoofing a beacon's MAC
sudo hciconfig hci0 down
sudo hciconfig hci0 leadrand # or set static BD_ADDR
sudo hciconfig hci0 up
hcitool -i hci0 cmd 0x08 0x0008 # set ADV data
hcitool -i hci0 cmd 0x08 0x000a # enable ADV
検出戦略:RSSIフィンガープリンティングを相互参照します。同一のMACが3秒以内にゾーンAで-45 dBm、ゾーンBで-82 dBmとして現れた場合、それはスプーフィングです。サーバー側の実装:
MAX_SPEED_MS = 30 # m/s (human running)
MIN_RSSI_DELTA = 25 # dBm for physically distinct positions
def detect_spoofing(mac, rssi, gateway_id, timestamp):
prev = db.get_last_seen(mac)
if prev:
time_delta = timestamp - prev['ts']
rssi_delta = abs(rssi - prev['rssi'])
# Physical impossibilty: RSSI jump >25dBm in <2s
if time_delta < 2.0 and rssi_delta > MIN_RSSI_DELTA:
return "SPOOF_DETECTED"
return "OK"
ADVパケット盗聴:情報漏洩解析
ADVパケットは平文でブロードキャストされます。範囲内の任意のパッシブリスナーは以下をキャプチャします:
- ビーコンのMACアドレス(デバイス識別情報)
- ADVデータペイロード(カスタムメーカーデータを含む)
- RSSI(暗黙的に、受信側で)
リスク定量化:nRF52840スニファは、40メートル以内のビーコンからのADVパケットを100%キャプチャします(屋外、0 dBm TX電力)。攻撃者は資産ID、ファームウェアバージョン、および—存在する場合—非暗号化の位置タグを抽出します。
対策1:ADVペイロードから識別子を除去する。 共有秘密を用いて毎日ローテーションする短命ID(EID)を使用します:
# Beacon: daily EID rotation
import hmac, hashlib, time
DAILY_KEY = hmac.new(SECRET, str(int(time.time())//86400).encode(), hashlib.sha256).digest()[:8]
# ADV manufacturer data = DAILY_KEY[:4] + rotating_counter[:4]
# Server resolves: lookup table of EID -> asset_id
対策2:ADVペイロードを最小化する。 ADVデータに資産のシリアル番号、ファームウェアバージョン、または人間可読な文字列を含めないでください。ローテーションするナンスを用いたコンパクトなバイナリ符号化を使用します。
リプレイ攻撃:不正なゾーン侵入の防止
近接ベースのアクセス制御(例:「ID Xのビーコンが1メートル以内にある場合にドアを解錠」)では、攻撃者は有効なADVパケットをキャプチャし、後でそれをリプレイします。時間制約付きのチャレンジレスポンスがない場合、システムはアクセスを許可してしまいます。
緩和策:署名付きチャレンジレスポンス。 パッシブなADVのみの検出ではなく、ゲートウェイが接続を開始し、署名付き応答を要求します:
| 方式 | セキュリティレベル | 消費電力(イベントあたりの追加μAh) | 遅延 |
|---|---|---|---|
| ADVのみ(認証なし) | なし(スプーフィング可能) | 0 | 0 ms |
| ADV+接続+署名付きキャラクタ読取り | 中(ECDSA P-256) | ~180 μAh | ~120 ms |
| 暗号化ADV(LE Secure Connections OOB) | 高 | ~60 μAh(接続不要) | ~15 ms |
Out-of-Band(OOB)ペアリングを用いたLE Secure Connectionsは、NFCまたは事前共有鍵を通じて共有秘密を配布します。ビーコンはローリングIVを用いてAES-CCMでADVを暗号化します。ゲートウェイは復号し、±500 ms以内のタイムスタンプを検証してリプレイを防止します。
暗号化広告:LE Secure Connectionsおよびその先
Bluetooth 5.4はEncrypted Advertising Data(EAD)を導入しました。ビーコンとゲートウェイは秘密鍵を共有します(セキュアペアリング後にGATT経由で配布)。ADVパケットはAES-128-CCMで暗号化されたペイロードを運びます。スニフされたとしても、鍵なしではペイロードを解読できません。
実装(nRF52、SoftDevice S140):
// Configure EAD in SoftDevice
ble_ead_config_t ead_config = {
.p_key = pre_shared_key_16byte,
.key_id = 1,
.nonce_mode = BLE_EAD_NONCE_INCREMENTING
};
sd_ble_ead_enable(&ead_config);
// ADV data now encrypted
ble_advdata_t advdata = { .p_ead_data = &encrypted_payload };
性能への影響:EADはADVパケットあたり約8バイトのオーバーヘッドを追加します。31バイトのADV上限では、実ペイロードに23バイトが残ります。ペイロードがこれを超える場合はメッセージの断片化を計画してください。
物理セキュリティ:改ざん検知
RF攻撃に加えて、物理的なビーコン改ざんは小売・倉庫展開における現実的な脅威です。対策:
- 筐体侵入スイッチ:磁気リードスイッチがMCUワイプをトリガー(GPIO割込み → flash内のBLE鍵を消去)
- UV消去エポキシ:PCBを封止;物理的除去によりダイがUVに曝露され、格納された鍵が破損する
- アクティブハートビート:ビーコンは15分ごとに署名付き「生存」メッセージを送信;連続3回のハートビート欠落でアラートをトリガー
セキュリティ対消費電力:定量的なトレードオフ
| セキュリティレベル | ADV間隔 | TX電力 | 電池寿命(CR2477) | スプーフィング可能? |
|---|---|---|---|---|
| なし(平文ADV) | 100 ms | 0 dBm | 14ヶ月 | はい |
| 基本(EIDローテーション) | 500 ms | 0 dBm | 28ヶ月 | 困難(鍵漏洩が必要) |
| 中(ECDSA署名接続) | 1000 ms | 0 dBm | 18ヶ月 | いいえ(秘密鍵が必要) |
| 高(EAD+セキュアペアリング) | 500 ms | -8 dBm | 36ヶ月 | いいえ(AES-CCM暗号化) |
最適な本番バランスは、500 msのADV間隔によるEIDローテーション+EAD暗号化です。これによりCR2477で28ヶ月以上の電池寿命と強力なセキュリティを両立できます。
展開チェックリスト
- ✅ OTA経由でEID鍵を毎日ローテーション(または90日間の鍵ウィンドウを事前プロビジョニング)
- ✅ 機密ペイロードにEAD(Bluetooth 5.4以上)を有効化
- ✅ MACスプーフィング検出のためサーバー側でRSSI一貫性を検証
- ✅ 15分間隔でローテーションするランダムMACアドレス(解決可能なプライベートアドレス)を使用
- ✅ アクセス制御では:署名付きチャレンジレスポンス(ADVのみの存在ではなく)を要求
- ✅ ビーコンを物理的に保護(改ざんスイッチ+UV消去エポキシ)
2026年において、Bluetooth Beacon展開のセキュリティは任意ではありません—それは設計要件です。上記の手法(EIDローテーション、EAD暗号化、RSSIフィンガープリンティング、署名付きチャレンジレスポンス)は、最も一般的な攻撃ベクトルに対する多層防御を提供します。当社のエンジニアリングチームは、セキュアなビーコンファームウェア実装および展開アーキテクチャのセキュリティレビューを支援できます。貴社の用途に関するBluetooth Beaconについての技術的な詳細検討についてぜひお問い合わせください。
