メッセージ認証コード

音声の切り替えを設定するには、メッセージ ストリームを使用します。 音声切り替えメッセージ。このような重要な構成の場合、プロバイダは (ファスト ペアリング モジュール)ではなく、GMSCore(ファスト ペアリング モジュール)から送信される 別のアプリを表示します

MAC(メッセージ認証コード)を生成する

FP シーカーがデバイス構成メッセージにメッセージ認証コードを追加 取得します。メッセージの MAC は、次の最初の 8 バイトで構成されます。

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))

ここで

  1. K は concat(アカウントキー、48 バイトの ZERO)によって生成されます。
  2. message はメッセージ ストリームの追加データです。
  3. nonce は concat(session_nonce, message_nonce) で生成されます。セッション nonce と message nonce については、次のセクションで定義します。
  4. opad は 64 バイトの外側パディングで、指定された値を持つ繰り返しバイトで構成されます。 0x5C
  5. ipad は 64 バイトの内部パディングで、その数値の繰り返しバイトで構成されます。 0x36

セッションのノンスとメッセージのノンス

リプレイ攻撃を防ぐために、プロバイダはノンスが あります。両方のプロバイダでクロックまたはカウンタの同期が維持されるため、 シーカーが単純でない場合、プロバイダがセッションのノンスを生成します。 (接続ごと)で、接続中のすべてのメッセージと共有されます。 一方、シーカーは(メッセージごとに)メッセージのノンスを生成します。このノンスは、 メッセージごとに生成されます。各メッセージの MAC を生成するためのノンスは、 セッションのノンスとメッセージのノンスの組み合わせ(例: concat(session_nonce, message_nonce) 。

セッションのノンスは、デバイス情報イベント グループに追加されます。

メッセージ グループ名
デバイス情報イベント 0x03
メッセージ コード名
セッションのノンス 0x0A

RFCOMM によって、セッション ノンスが生成され、シーカーに送信される 接続:

オクテット データ型 説明
0 uint8 デバイス情報イベント 0x03
1 uint8 セッションのノンス 0x0A
2 ~ 3 uint16 追加データ長 0x0008
4 ~ 11 セッションのノンス 場合によって異なる

MAC が必要な場合にメッセージを送信するために、シーカーはメッセージのノンスを送信します。 メッセージと一緒に送信されます。

オクテット データ型 説明
0 uint8 メッセージ グループ 場合によって異なる
1 uint8 メッセージ コード 場合によって異なる
2 ~ 3 uint16 追加データ長(追加データ長 + 16) 場合によって異なる
4 ~ n 追加データ 場合によって異なる
n+1 ~ n+8 メッセージのノンス 場合によって異なる
n+9 ~ n+16 メッセージ認証コード 場合によって異なる

MAC(メッセージ認証コード)を確認する

メッセージ認証コードが含まれるメッセージを受信すると、 生成関数と同じ関数を使用して検証する必要があります。つまり 受信された MAC は、最初の 8 バイトに等しく

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))

ここで

  1. Kconcat(account key, 48-byte ZEROs) によって生成され、Provider は は、保存されているすべてのアカウントキーを走査して MAC を検証します。
  2. message はメッセージの追加データ(メッセージのノンスと MAC を除く)です 表示されます。

MAC が正しい場合、プロバイダは 表示されます。それ以外の場合、プロバイダはエラー理由 0x3 - メッセージ認証コードが正しくないため、許可されていません。