# LINE Beacon端末の仕様

このトピックでは、LINE Beacon機能のご利用を希望される法人ユーザー様を対象に、LINE Beacon対応のビーコン端末の仕様について説明します。LINE Beacon機能を利用するには、この仕様に準拠するビーコン端末を用意する必要があります。

LINE Simple Beaconと異なり、LINE Beaconのパケットには、セキュリティを保護する仕組みとしてSecure messageが含まれます。

# LINE Beacon対応端末の要件

LINE Beaconに対応するビーコン端末とは、Bluetooth® Low Energy Version 4.0とAppleのiBeaconに対応し、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から構成されます。

LINE Beaconパケット

フォーマットと指定する値は以下のとおりです。

オクテット フィールド 説明
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-31 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の生成アルゴリズム

Secure messageは、以下の手順に従って生成します。

# 1. Message authentication codeを生成する
  1. 以下の項目を順に連結し、SHA-256を使って32バイトのハッシュ値を生成します。

  2. ハッシュ値の前半の16バイトと後半の16バイトの排他的論理和を求めます。

  3. 前のステップで得た値の前半の8バイトと後半の8バイトの排他的論理和を求めます。

  4. 前のステップで得た値の前半の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は10文字の文字列です。これをバイト配列に変換し、5バイトのバイナリデータとして各ビーコン端末に書き込みます。

HWIDはビーコン端末本体に表示してください。

# Lot key

Lot keyはロットごとに割り当てるキーです。LINEから送付されるLot keyは16文字の文字列です。HWIDの場合と同様にバイト配列に変換し、8バイトのバイナリデータとして利用します。

# Timestamp

符号なし64ビット整数型のタイムスタンプです。

  • ビーコン端末の電源が初めて入った時点からインクリメントを開始します。
  • 0から開始し、15秒ごとにインクリメントします。したがって、電源投入から1分後のタイムスタンプは4になります。
  • ビーコン端末の電源を再投入するときにタイムスタンプを0にリセットせず、電源が切れる前の時点のタイムスタンプを引き続きインクリメントしてください。
# Vendor key

Vendor keyは製造者ごとに割り当てるキーです。LINEから送付されるVendor keyは8文字の文字列です。HWIDの場合と同様にバイト配列に変換し、4バイトのバイナリデータとして利用します。

# iBeaconパケット

LINE Beaconデバイスが付近にあることをiOSデバイスに通知するため、iBeaconパケットを送信することを推奨します。

iBeaconパケットのAD structureと送信間隔については、『Proximity Beacon Specification』を参照してください。このドキュメントは、Apple DeveloperサイトのiBeaconのセクションからダウンロードできます。

iBeaconパケットに含めるLINE Beacon特有のパラメータは以下のとおりです。

パラメータ
UUID D0D2CE24-9EFC-11E5-82C4-1C6A7A17EF38
Major 0x4C49
Minor 0x4E45