訊息驗證碼

訊息串流可用來設定音訊自動切換,請參閱「音訊自動切換訊息」。針對這些重要設定,供應商必須確保訊息是由 GMSCore (快速配對模組) 傳送,而不是探索工具上的任何其他應用程式。

產生 MAC (訊息驗證碼)

FP Seeker 使用 HMAC-SHA256 為裝置設定訊息新增訊息驗證碼。訊息的 MAC 包含前 8 個位元組:

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

媒介

  1. K 是由 concat(帳戶金鑰,48 位元組 ZEROs) 產生。
  2. message 是訊息串的額外資料。
  3. nonce 是由 concat(session_nonce, message_nonce);session Nonce 和訊息 Nonce 會在下一節中定義。
  4. opad 是外部邊框間距的 64 個位元組,由重複位元組的值 0x5C 組成。
  5. ipad 是內部邊框間距 64 個位元組,由重複位元組的值 0x36 組成。

工作階段 Nonce 和訊息 Nonce

為防止重播攻擊,提供者必須確保 Nonce 並未重複。由於在供應器和 Seeker 上維持時鐘或計數器的同步處理作業並不簡單,因此供應器會產生工作階段 Nonce (每次連線),此這項資訊會與連線期間的所有訊息共用,而 Seeker 則會產生每則訊息的訊息 Nonce (每次訊息),系統會隨機產生每則訊息。產生每則訊息 MAC 的 Nonce 是工作階段 Nonce 和訊息 Nonce 的組合,即 concat(session_nonce, message_nonce)。

我們會在裝置資訊事件群組中加入工作階段 Nonce:

訊息群組名稱
裝置資訊事件 0 x 3
訊息代碼名稱
工作階段 Nonce 0x0A

當 RFCOMM 連線時,應產生工作階段 Nonce,並傳送至 Seeker:

八位元 資料類型 說明
0 uint8 裝置資訊事件 0 x 3
1 uint8 工作階段 Nonce 0x0A
2 - 3 uint16 額外資料長度 0x0008
4 - 11 則 工作階段 Nonce 各有不同

為了在需要 MAC 時傳送訊息, Seeker 會傳送訊息 Nonce 和 MAC 以及訊息。

八位元 資料類型 說明
0 uint8 訊息群組 各有不同
1 uint8 訊息代碼 各有不同
2 - 3 uint16 其他資料長度(額外資料長度 + 16) 各有不同
4 - N 額外資料 各有不同
n + 1 - n + 8 訊息 Nonce 各有不同
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) 產生,供應商必須掃遍所有儲存的帳戶金鑰,驗證 MAC。
  2. message 是訊息串流的其他資料 (不包括訊息 Nonce 和 MAC)。

如果 MAC 正確,提供者應遵循訊息中的指示操作。反之,供應商應傳送錯誤原因為 0x3 - 因訊息驗證碼不正確而不允許的 NAK。