プロバイダの広告シグナル

広告: 検出可能な場合

プロバイダ デバイスが BR/EDR で検出可能(ペア設定モード)の場合、 は BLE 経由でファスト ペアリングのモデル ID データをアドバタイズし、BLE アドレスは 回転することはできません。

広告掲載間隔: 検出可能な場合

アドバタイズメントの間隔は 100 ミリ秒(10 Hz)以下でなければなりません。 高速通信速度により、シーカーはスキャン中でもプロバイダをすばやく見つけることができます。 低消費電力モードに切り替わります。

アドバタイジング ペイロード: ファスト ペアリングのモデル ID データ

広告にはサービスデータデータタイプ(前掲書)を§ 1.11.「 UUID は、0xFE2C のファスト ペアリング サービスの UUID になります。サービスデータは 次の内容が含まれます。

オクテット データ型 説明
0~2 uint24 24 ビットモデル ID 場合によって異なる

広告: 検出できない場合

検出できない場合(すなわちペアリングモードでない場合)、本提供者デバイスは 次のガイドラインに従って、ファスト ペアリングのアカウント データをアドバタイズする。

アカウントのデータを広告することで、近くにいる求職者はプロバイダがいつ 自動的にペア設定を開始できるため、 最初にペア設定モードに戻します。これは、 ユーザーが無視できる機会が与えられます。 プロバイダとのペア設定待ちがない場合や、このブロードキャストが ブロードキャストに関連性がない場合(すでにペア設定されている場合など)。 また、次のような明らかに不適切なブロードキャストも自動的に除外します。 アカウント データが誤って設定されている場合に通知されます。

広告掲載間隔: 検出できない場合

アドバタイズメントの間隔は 250 ミリ秒(4Hz)以下にする必要があります。

広告ペイロード: ファスト ペアリングのアカウント データ

広告には、サービスデータデータタイプ(前掲書)を§ 1.11.「 UUID は、0xFE2C のファスト ペアリング サービスの UUID になります。サービスデータは 次の内容が含まれます。

オクテット データ型 説明
0 uint8 バージョンとフラグ
0bVVVVFFFF
  • V = バージョン
  • F = フラグ
0x00
(今後使用するために予約されています)
1 - 場合によって異なる アカウントキー データ 可変(アカウントキーのリストが空の場合は
または 0x00

アカウントキーデータには次のものが含まれます。

オクテット データ型 説明
0 uint8 フィールドの長さとタイプ
0bLLLLTTT
  • L = アカウント キー フィルタの長さ(バイト単位)
  • T = 型
0bLLLL0000
  • 長さ = 0bLLLL = 可変
  • type = 0b0000(UI インジケータを表示)または 0b0010(UI インジケーションを非表示)、アカウントキーフィルタ
1 ~ アカウント キー フィルタ 場合によって異なる
S+1 uint8 フィールドの長さとタイプ
0bLLLLTTT
  • L = バイト単位の長さ
  • T = 型
0b00100001
s + 2 - s + 3 uint16 Salt 場合によって異なる

アカウント キー フィルタ

アドバタイズされたアカウント キー フィルタを使用すると、シーカーは プロバイダが特定のアカウント キーを所有している場合があります(偽陽性が少なく、 次のインタラクションが発生する前に、その確率を平均 0.5% 未満に抑えることです。「 シーカーは、検出時に自動的に接続し、手続きの開始を試みることがあります。 タイプ 0 でブロードキャストされているフィルタ、すなわち UI 表示。 にアカウントキーの 1 つが含まれることがあります。これにより、誤検出のリスクが 向上します状況によっては、プロバイダは ペア設定の準備ができていないときにシーカーによって検出されます。イヤホンを装着したまま ケースに戻します。その後のペア設定通知の表示を停止します。 ヘッドセットで拒否される可能性があるためです。

アカウントキー フィルタは可変長 ブルーム フィルタ。次のように構成されます。 次のようになります。

  1. n を、永続化されたストレージ内のアカウントキーの数(n >= 1)とします。 アカウントキーのリスト
  2. フィルタのサイズ(バイト単位)s を(1.2*n + 3)切り捨てます。対象 たとえば、1 つの鍵が永続化される場合、s = 4 バイトです。
    uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);
  3. フィルタ Fs バイトの配列として初期化し、それぞれを 0 に設定します。
    uint8_t F[s] = {0};
  4. 永続的なアカウントキー リストのアカウント キー K ごとに、次のようにします。
    a.V を連結(K, ソルト)とします。

    // In the sample code, the size of salt is 2 bytes.
    #define SALT_SIZE 2
    
    uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE];
    for (uint8_t keyIndex = 0; keyIndex < n; keyIndex++)
      {
         // concat (K, Salt)
          fastpair_get_account_key_by_index(keyIndex, V);
    
          uint8_t randomSalt = (uint8_t)rand();
          V[FASTPAIR_ACCOUNT_KEY_SIZE] = randomSalt;
          ... }
    

    b. SHA256 でハッシュ V を実行し、32 バイトの値 H を取得 = {H0, ..., H31}。

    uint8_t H[32] = {0};
    SHA256_hash_function(V, H);
    

    c. H をビッグ エンディアンで 8 つの 4 バイト符号なし整数に分割します。 X = {X0, ..., X7} X0 = 0xH0H1H2H3

         uint32_t X[8];
         for (index = 0; index < 8; index++)
         {
            X[index] = (((uint32_t)(H[index * 4])) << 24) |
                        (((uint32_t)(H[index * 4 + 1])) << 16) |
                        (((uint32_t)(H[index * 4 + 2])) << 8) |
                        (((uint32_t)(H[index * 4 + 3])) << 0);
         }
    

    d. 各 Xi について:
    i.MXi とし、フィルタのビット数を剰余とします。 (s * 8)。
    ii.F のインデックス(M / 8)にあるバイトを切り捨てて取得します。
    iii.バイト内で、インデックスのビット(M % 8)を 1 に設定します。
    iv.つまり、
    のようになります。

        // M = Xi % (s * 8)
        // F[M/8] = F[M/8] | (1 << (M % 8))
        for (index = 0; index < 8; index++)
        {
            uint32_t M    = X[index] % (s * 8);
            F[M / 8] = F[M / 8] | (1 << (M % 8));
        }
    

広告データに [アカウント キー フィルタ] 項目として [F] というフィルタを含めます。 「エンディアン」は存在しないことに注意してください。前者の場合はこの値より増減しないため、 意味します。バイト順序を変更しないでください。

塩田

ソルトは、プロジェクトの作成時にアカウント キーに追加されるランダムな値です。 ブルームフィルタです。このソルトは、RPA が更新されるたびに再生成する必要があります。 アドレス ローテーションをまたいでトラッキングするのを避ける必要があります。

ソルトを使用してアカウント キーフィルタを生成するには:

  1. ランダムな 2 バイトの S を生成します。「エンディアン」は存在しないことに注意してください。宛先: 上位バイトまたは下位バイトがないため、バイトを変更しないでください。 できます。
  2. 2 バイトの S をソルトとして使用します。
  3. アドバタイズされたファスト ペアリングのアカウント データで、生成されたフィルタを [Account Key Filter(アカウントキー フィルタ)] フィールドと [Salt(ソルト)] フィールドに「S」フィールド。