問題背景:
前兩天同事發現我們現在做的項目,耳機在跟某些特定類型安卓手機(尤其是比較新的手機)回連會失敗,然后我幫他分析了一些log,記錄如下:
回連失敗所做步驟如下:
- 手機和耳機進行正常的藍牙配對連接,手機藍牙界面能看到配對連接成功的設備。
- 耳機入盒,手機和耳機斷開藍牙連接,手機藍牙界面看到設備斷開。
- 耳機出盒發起回連,發現手機最終會把耳機在藍牙界面刪除,并且報“authentication failure”錯誤。
我讓同事幫忙抓了一份ellisys空口,打開分析一下發生了什么:
問題分析:
手機主動發起連接配對:
如上圖所示:
- 手機會主動發起paging (ID packet),此時手機作為主設備會設置FHS。
- 手機和耳機分別進行:
LMP Version Exchange (Central: 5.4 ? Peripheral: 5.4) ,
LMP Features Exchange (45 Features ? 45 Features),
LMP Extended Features Exchange (SSP Host, LE Host, SC Host ? SSP Host, LE Host, SC Host),
LMP Extended Features Exchange (SC Controller, Ping ? SC Controller, Ping),
注意此時手機和耳機都是支持SC(Secure Connection)的。 - 接著就會建立LMP連接:LMP Host Connection (Accepted),LMP Setup Complete
如上圖,接下來會交互:
- 手機會enable AFH:
LMP Set AFH (Ch=43, 0x0F5E33A, as CLK[27-0]: 0x1EBC674, AFH enabled)
LMP Channel Classification Request (AFH Reporting Enabled) - 手機獲取耳機時鐘精度:LMP Timing Accuracy Transaction (250 ppm, Jitter=0 us)
- 耳機告訴手機最大傳輸slot 為5:LMP Max Slot (5 slots = 3.125 ms)
- 手機設置包類型:LMP Packet Type Table (2/3Mbps ? Accepted)
- 手機告訴耳機最大傳輸slot為5:LMP Max Slot (5 slots = 3.125 ms)
- 手機設置傳輸速率:
LMP Preferred Rate (BR=No FEC, Size=Use 5-slot packets, EDR=Use 2 Mbps packets, Size=Use 1-slot packets)。
LMP Preferred Rate (BR=FEC, Size=Use 1-slot packets, EDR=Use 2 Mbps packets, Size=Use 5-slot packets) - 手機設置鏈路超時時間為5s:LMP Supervision Timeout (8’000 slots = 5.000 s (5.000 s))
- 耳機獲取手機的時鐘精度:
LMP Timing Accuracy Request
LMP Timing Accuracy Response (45 ppm, Jitter=0 us)
如上圖所示,接下來會進行:
- 手機和耳機進行IO Capability交互:
LMP IO Capability Request (DisplayYesNo, No OOB Authentication, MITM Protection Required – Dedicated Bonding) - 手機和耳機的公鑰交互:LMP Encapsulated P-256 Public Key
- 手機和耳機第一階段相互隨機數驗證:LMP Simple Pairing Confirmation (A6 23 E8 6E C3 7B CD C3 7A EE 04 47 CF E5 94 6E)
- 手機和耳機相互DHKEY Check:LMP DH Key Check (91 7F 69 33 47 CA 76 3E B3 69 74 B4 8E 70 8F 1E)
- 手機和耳機進行第二階段的隨機數校驗:LMP Secure Authentication Transaction (0x0A67C2A9)
- 手機請求進入加密模式:LMP Encryption Mode Request (Encryption)
- 手機發起加密:LMP Start Encryption Request (ED 52 7E 99 B2 28 C8 87 27 85 B4 99 68 84 ED 4C)
如上圖,接下來會進行:
- SMP OVER BREDR:通過CTKD方式生成LE連接的
LTK SMP Pairing Feature Exchange (Display Only, No Bonding ? Display Only, Bonding, SC)。
SMP Transport Specific Key Distribution - 進行SDP查詢。
- 各種Profile的建立,比如A2DP, HFP等等。
耳機關盒斷開連接
如上圖,耳機會發送一個LMP Detach (Remote User Terminated Connection)來告訴手機鏈路斷開。
耳機發起回連
如上圖,耳機發起回連,這個時候耳機會主動發起Paging ID,并且耳機發起FHS決定時鐘。注意紅色框里面耳機發起的LMP Extended Features Request (SSP Host, LE Host) ,和手機回復的:LMP Extended Features Response (SSP Host, LE Host, SC Host)。這里耳機請求里SC Host不見了。
如上圖,接下來手機主動發起:LMP Extended Features Request (SSP Host, LE Host, SC Host),然而耳機依舊回復:LMP Extended Features Response (SSP Host, LE Host)。至此手機跟耳機無法達成一致的加密方法,手機只能主動斷開連接:LMP Detach (Authentication Failure)。
至此整個問題的分析結束。