快速配對程序

操作程序

這項工具不會立即叫用任何一般的 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. 如果步驟 1 中已產生防假冒 AES 金鑰,請使用該金鑰。
      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 地址,產生 16 位元組的原始回應,如表 1.3 所示,然後用其餘的位元組區塊 (也就是鹽) 填完封包的其餘部分。

  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 Protection Only。這會觸發數字比較配對方法 (在 Android 上亦稱為密碼確認)。我們利用這項資訊來確認提出要求的裝置確實是快速配對搜尋器,而且沒有中間人。請參閱範例
    3. 需要這麼做的原因:架構外配對方法是更好的選擇,但平台不會在所有需要的 Android 版本上公開該方法。
  9. 如果需要確認密碼金鑰,請等待最多 10 秒寫入 Passkey 特性

    1. 一般而言,使用者可以透過這個配對方式,確認各裝置螢幕上顯示的密碼金鑰是否相同。只會在這個配對中,透過 BLE 進行轉移,並使用信任的預先共用金鑰進行加密。
    2. 請注意,如果裝置有螢幕或鍵盤,可能會使 MITM 防護功能有些微問題,因此請勿採用這個方法。快速配對功能目前不支援這種裝置類型。
    3. 如果 10 秒的計時器沒有寫入密碼金鑰,到期時,請捨棄 K
  10. 值寫入密碼金鑰特性時,這就是加密密碼區塊。使用 K 解密它以產生原始密碼區塊區塊,格式為特性:密碼金鑰 > 表 2.2 - (類型 = 搜尋者密碼金鑰)。

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

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

  13. PSeeker 與我們自己的預期密碼金鑰 PProvider 進行比較。

    1. 如果值相同,請回覆「是」。
    2. 否則,請回覆「否」,確認配對失敗。
  14. 無論配對失敗,請產生另一個原始密碼金鑰區塊,其格式如 Characteristic: Passkey > Table 2.2,包含我們預期的密碼金鑰 PProvider

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

  16. 如果 Seeker 收到並解密正確的密碼金鑰 P,「Seeker」也會回應「yes」確認,配對成功。

    1. 啟動計時器,以便在 10 秒後捨棄 K。此外,在嘗試寫入帳戶金鑰之後,也應捨棄 K;如果步驟 4 與 LE 連結中斷,請捨棄此步驟。
    2. 如果配對失敗,請捨棄 K
  17. 將裝置功能欄位切換回預設的 I/O 功能和驗證需求,以便繼續配對。

範例
示例 1:成功配對嘗試 (沒有中間人)。
範例 2:無法使用中間人配對。