# LINE Beacon端末の仕様
このトピックでは、LINE Beacon機能のご利用を希望される法人ユーザー様を対象に、LINE Beacon対応のビーコン端末の仕様について説明します。LINE Beacon機能を利用するには、この仕様に準拠するビーコン端末を用意する必要があります。
LINE Simple Beacon (opens new window)と異なり、LINE Beaconのパケットには、セキュリティを保護する仕組みとしてSecure messageが含まれます。
# LINE Beacon対応端末の要件
LINE Beaconに対応するビーコン端末とは、Bluetooth® Low Energy Version 4.0とAppleのiBeacon (opens new window)に対応し、LINE Beaconパケットをアドバタイズできるビーコン端末です。具体的には、以下の条件を満たす必要があります。
- LINE Beaconパケットをアドバタイズする。
- SHA-256とXOR(排他的論理和)の演算でハッシュ化したデータからSecure messageを生成する。
- Secure messageを15秒間隔で更新する。
- 端末固有のHWIDが割り当てられ、端末本体にHWIDが表示されている。
# LINE Beaconパケット
LINEがビーコン端末を迅速に発見できるよう、Generic access profileで規定されるBroadcaster role(BLUETOOTH SPECIFICATION Version 4.0 [Vol 3], Part C Section 2.2.2.1)に従って、ビーコン端末を制御する必要があります。
# アドバタイジングデータのフォーマット
LINE Beaconパケットのアドバタイジングデータは、3つのAD structureから構成されます。
フォーマットと指定する値は以下のとおりです。
オクテット | フィールド | 値 | 説明 |
---|---|---|---|
00 | Length | 0x02 | 第1のAD structureのデータ長(2バイト) |
01 | AD type | 0x01 | AD typeがFlagsであることを示します。 |
02 | AD data | 0x06 | FlagsがLE General Discoverable ModeとBR/EDR Not Supportedであることを示します。 |
03 | Length | 0x03 | 第2のAD structureのデータ長(3バイト) |
04 | AD type | 0x03 | AD typeがComplete list of 16-bit UUIDs availableであることを示します。 |
05 | 16-bit UUID | 0x6F | 次のバイトと合わせてLINEの16ビットUUID(0xFE6F)を示します。 |
06 | 16-bit UUID | 0xFE | 前のバイトと合わせてLINEの16ビットUUID(0xFE6F)を示します。 |
07 | Length | 0x11 | 第3のAD structureのデータ長(17バイト) |
08 | AD type | 0x16 | AD typeがService Data - 16-bit UUIDであることを示します。 |
09 | 16-bit UUID | 0x6F | 次のバイトと合わせてLINEの16ビットUUID(0xFE6F)を示します。 |
10 | 16-bit UUID | 0xFE | 前のバイトと合わせてLINEの16ビットUUID(0xFE6F)を示します。 |
11 | Frame type | 0x02 | フレームタイプがLINE Beaconであることを示します。 |
12-16 | HWID | 端末固有の値 | 端末固有の5バイトのID。詳しくは、「HWID」を参照してください。 |
17 | Measured TxPower | 端末固有の値 | LINEがインストールされているデバイスとビーコン端末の距離が1メートルの場合のRSSI(受信信号強度インジケータ)です。iBeaconパケットと同様の値を設定します。詳しくは、iBeaconのドキュメントを参照してください。 RSSIのデータを利用しない場合は、0x7Fを指定します。 |
18-21 | Message authentication code | 変動値 | 4バイトのメッセージ認証コード。詳しくは、「Secure messageを生成する」を参照してください。 |
22-23 | Masked timestamp | 変動値 | 2バイトのマスクしたタイムスタンプ。詳しくは、「Secure messageを生成する」を参照してください。 |
24 | Battery level | 変動値 | バッテリー残量。詳しくは、「Battery level」を参照してください。 |
25-30 | Non-significant part | 0x00 | 未使用部。すべて0x00を指定します。 |
# パケットの送信間隔
LINE Beaconパケットは、152.5ミリ秒間隔で送信することを強く推奨します。
# Secure message
Secure messageは、Message authentication code、Masked timestamp、およびBattery levelを連結した7バイトのデータで、LINE Beaconパケットの改ざんやリプレイ攻撃を防ぐために使用します。ビーコン端末から発信されたSecure messageは、LINE経由でLINEプラットフォームに送信され、検証されます。
ここでは、Secure messageの生成方法について説明します。
# Secure messageを生成する
Secure messageは、SHA-256で生成したハッシュ値に対して3回XOR(排他的論理和)演算を実行することにより生成します。以下の図は、Secure messageの生成の流れを示します。生成に必要なパラメータについては、「必要なパラメータ」を参照してください。
Secure messageは、以下の手順に従って生成します。
# 1. Message authentication codeを生成する
以下の項目を順に連結し、SHA-256を使って32バイトのハッシュ値を生成します。
ハッシュ値の前半の16バイトと後半の16バイトの排他的論理和を求めます。
前のステップで得た値の前半の8バイトと後半の8バイトの排他的論理和を求めます。
前のステップで得た値の前半の4バイトと後半の4バイトの排他的論理和を求めます。
これで、Message authentication codeが完成します。
# 2. Masked timestampを生成する
タイムスタンプの冒頭から6バイトをマスクして、末尾の2バイトを残します。これがMasked timestampです。
# 3. 項目を連結する
以下の項目を順に連結します。
- ステップ1で生成したMessage authentication code
- ステップ2で生成したMasked timestamp
- Battery level
これで、Secure messageが完成します。
「Secure message生成のサンプルデータとコード」を参照してください。ビーコン端末に組み込むSecure messageの生成機能の開発とテストに役立つ情報が掲載されています。
# 必要なパラメータ
Secure messageの生成には以下のパラメータを使用します。
HWID、Lot key、およびVendor keyは、LINE株式会社が生成し管理するデータです。入手方法については、LINEの貴社担当者までお問い合わせください。
Lot keyとVendor keyを使ったサービスは、法人ユーザーのみご利用いただけます。
# Battery level
バッテリー残量です。バッテリーの交換時期の判断に使用します。以下の表に、各値の意味を示します。
10進数値 | 16進数値 | 説明 |
---|---|---|
0 | 0x00 | 不明、または外部電源に接続されています。 |
1 | 0x01 | 残量0%。完全放電の状態です。 |
2 | 0x02 | 残量10%。 |
… | … | … |
10 | 0x0A | 残量90%。 |
11 | 0x0B | 残量100%。完全充電の状態です。 |
(12-255) | 0x0C-0xFF | 将来の利用のため予約されています。使用しないでください。 |
# HWID
HWIDはビーコン端末のIDです。LINEから送付されるHWIDは16進数表記の10文字の文字列です。これをバイト配列に変換し、5バイトのバイナリデータとして各ビーコン端末に書き込みます。
HWIDはビーコン端末本体に表示してください。
# Lot key
Lot keyはロットごとに割り当てるキーです。LINEから送付されるLot keyは16文字の文字列です。HWIDの場合と同様にバイト配列に変換し、8バイトのバイナリデータとして利用します。
# Timestamp
符号なし64ビット整数型のタイムスタンプです。
- ビーコン端末の電源が初めて入った時点からインクリメントを開始します。
- 0から開始し、15秒ごとにインクリメントします。したがって、電源投入から1分後のタイムスタンプは4になります。
- ビーコン端末の電源を再投入するときにタイムスタンプを0にリセットせず、電源が切れる前の時点のタイムスタンプを引き続きインクリメントしてください。
- 端末のHWIDを新たに発行されたHWIDに書き換える場合、タイムスタンプは再び0から開始するようにリセットしてください。
# Vendor key
Vendor keyは製造者ごとに割り当てるキーです。LINEから送付されるVendor keyは16進数表記の8文字の文字列です。HWIDの場合と同様にバイト配列に変換し、4バイトのバイナリデータとして利用します。
# iBeaconパケット
LINE Beaconデバイスが付近にあることをiOSデバイスに通知するため、iBeaconパケットを必ず送信してください。
iBeaconパケットのAD structureと送信間隔については、『Proximity Beacon Specification』を参照してください。このドキュメントは、Apple DeveloperサイトのiBeaconのセクション (opens new window)からダウンロードできます。
iBeaconパケットに含めるLINE Beacon特有のパラメータは以下のとおりです。
パラメータ | 値 |
---|---|
UUID | D0D2CE24-9EFC-11E5-82C4-1C6A7A17EF38 |
Major | 0x4C49 |
Minor | 0x4E45 |