快速配對程序

操作程序

Seeker 不會立即叫用任何一般的 BR/EDR 或 BLE 繫結程序,而是先針對以鍵為基礎的配對特性啟用通知,然後再將表 1.1 中的資料寫入該程序。

處理快速配對搜尋器發出的寫入要求時,快速配對提供者會執行以下操作:

  1. 如果選用的「公開金鑰」欄位,請按照下列步驟操作:
    1. 如果裝置未處於配對模式,請忽略寫入並結束。
    2. 否則:
      1. 使用已接收的公開金鑰 (secp256r1 橢圓曲線上的 64 位元組點)、預先安裝的防假冒私密金鑰 - 和 secp256r1 演算法,以及橢圓曲線 Diffie-Hellman 演算法,產生 256 位元的 AES 金鑰。
      2. 使用 SHA-256 對 256 位元 AES 金鑰進行雜湊處理。
      3. 請先取得結果的前 128 位元。這是用於下一個步驟的反假冒 AES 金鑰。
  2. 使用 AES-128 嘗試解密該值。由於該值是單一 16 位元組的 AES 區塊,因此不需要 IV 或多區塊加密模式。

    1. 該使用哪個金鑰:
      1. 如果反假冒 AES 金鑰在步驟 1 中產生,請使用該金鑰。
      2. 否則,請在保存的帳戶金鑰清單中嘗試每一個金鑰。
    2. 如果金鑰成功解密值,請中斷並繼續下一個步驟。
    3. 如果輸出內容與表 1.2.1表 1.2.2 中的格式相符 (也就是說,包含快速配對提供者目前的 BLE 位址或快速配對提供者的公開位址),則值就會成功解密。

      注意:封包結束時有附加鹽。如果可以,請追蹤這些鹽字串;如果供應者收到包含已使用過鹽的要求,則應忽略該要求,以防止重送攻擊。

    4. 除了追蹤鹽以外,如果寫入作業包含供應者的私人位址,另一個防止重播攻擊的方法,是提前安排下次可解析的私人位址輪替時間,讓系統在接受下一次金鑰組合寫入作業之前進行輪替。

  3. 如果沒有金鑰能成功解密值,請忽略寫入與結束。

    1. 記錄這些失敗情形。如果失敗次數達到 10,所有新要求會立即失敗。在 5 分鐘後、開機後或成功處理完畢後重設失敗次數。
  4. 否則,請將成功金鑰儲存為 K。將此 K 標示為可解密透過這個 LE 連結接收的密碼金鑰和個人化名稱寫入作業,而非其他寫入或任何其他連結上的寫入作業。如果尚未啟動配對程序,請啟動計時器在 10 秒後捨棄 K。如果這個 LE 連結連線中斷,請一併捨棄 K

  5. 將類型和提供者的 BR/EDR 位址串連,然後用隨機位元組區塊 (即鹽區塊) 填入封包的其餘部分,藉此產生表 1.3 中顯示的 16 位元組原始回應。

  6. 使用 K 加密原始回應,產生表 1.4 中顯示的 16 位元組加密回應。在金鑰配對特性上傳送通知。

  7. 閱讀要求標記:

    1. 如果要求的旗標位元組設為 位元 2 設為 1,請通知其他資料特性並附上個人化名稱。
    2. 如果要求的旗標位元組設為 位元 1 設為 1:
      1. 這表示 Seeker 要求供應商啟動向 Seeker 的 BR/EDR 位址進行繫結 (以位元組 8-13 表示)。
      2. 將配對要求傳送至搜尋者的 BR/EDR 位址。配對要求必須如下所述 (「配對期間」步驟)。
      3. 需要的理由:讓供應商開始處理某些裝置上的問題。
    3. 如果要求的旗標位元組有位元 1 設為 0:
      1. 等待 10 秒,看看配對要求。如未收到,請退出。
      2. 請注意,這可能是來自不同地址 (搜尋者的公開地址,而非可解析的私人位址) 的 BR/EDR 要求。配對期間,我們會在配對期間重新驗證要求裝置是否屬於 K
  8. 在配對期間:

    1. 從 Seeker 收到配對要求/回應封包時:如果要求中的裝置功能為 NoInput/NoOutput,請結束配對,以免使用 Just Works 配對方法。
    2. 針對供應商傳送的配對要求/回應封包:將「裝置功能」欄位設為 Display/YesNo,並將「驗證規定」設為「需要 MITM 保護」。這會觸發數字比較配對方法 (在 Android 上也稱為密碼金鑰確認)。我們根據這項資訊確認提出要求的裝置確實是 FastPair Seeker,而且沒有中間人。請參閱範例
    3. 需要的原因:架構外配對方法較適合採用,但平台不會在所有需要的 Android 版本中公開該方法。
  9. 需要確認密碼金鑰時,請等待 10 秒,讓密碼金鑰特性寫入資料。

    1. 一般而言,使用這個配對方法時,使用者會確認每部裝置螢幕上顯示的密碼金鑰完全相同。我們只會針對這個配對,透過 BLE 轉移這些項目,並使用受信任的預先共用金鑰進行加密。
    2. 請注意,這個方法並不適合有螢幕或鍵盤的裝置,因為這麼做會輕微破壞 MITM 防護。因此,快速配對功能目前不支援這些裝置類型。
    3. 如果 10 秒計時器倒數完畢,但並未寫入密碼金鑰,請捨棄 K
  10. 值寫入密碼金鑰特性時,即為加密的密碼金鑰區塊。使用 K 進行解密,產生原始密碼區塊,格式為「Characteristic: Passkey」>「Table 2.2」- (type = Seeker's Passkey)。

  11. 如果解密失敗,請忽略寫入並捨棄 K

  12. 否則,原始密碼區塊會包含 6 位數的密碼金鑰 PSeeker,這是要求者預期的密碼金鑰。

  13. 比較 PSeeker 和我們自己的預期密碼金鑰 PProvider

    1. 如果值相同,請在確認回覆「yes」時回覆「yes」。
    2. 否則,在確認回覆「否」會導致配對失敗。
  14. 無論是否配對失敗,都會產生另一個原始密碼區塊,並依照「Characteristic: Passkey>Table 2.2」的格式顯示格式,並含有我們專屬的預期密碼金鑰 PProvider

    1. 確認區塊的類型正確無誤 (供應商的密碼金鑰;請參閱表格)。注意:請勿重複使用搜尋者從密碼金鑰區塊收到的鹽。產生新的隨機值。
  15. 使用 K 加密原始密碼區塊,並透過密碼金鑰特性通知傳送產生的加密密碼區塊。

  16. 如果搜尋者收到並解密正確的密碼金鑰 P,搜尋者也會在確認回應「yes」時回覆「yes」,表示配對成功。

    1. 如果配對成功,請將 K 標示為可以使用這個 LE 連結中的帳戶金鑰寫入功能進行解密,但不會針對後續的任何密碼金鑰寫入作業或任何其他連結上的寫入作業進行解密。啟動計時器,在 10 秒後捨棄 K。嘗試寫入帳戶金鑰時一併捨棄 K;如步驟 4 所述,如果 LE 連結中斷連線,則一併捨棄。
    2. 如果配對失敗,請捨棄 K
  17. 將裝置功能欄位切換回預設的 I/O 功能和「驗證需求條件」,以便繼續正常運作。

範例
示例 1:配對成功 (沒有中間人)。
示例 2:配對失敗,中間有中間人。