在上一篇《藍牙配對之——密鑰生成方法》中,我們討論了密鑰的生成方法 – 如果發(fā)起設(shè)備和響應(yīng)設(shè)備都滿足一定的IO功能,它們就可以選擇低功耗傳統(tǒng)配對(Legacy Pairing)的Passkey Entry方法。
在本文中,讓我們繼續(xù)深入了解如何借助Passkey Entry進行傳統(tǒng)配對及其工作原理。
圖 1:通過Passkey Entry進入低功耗傳統(tǒng)配對
1.臨時密鑰(TK) 和隨機數(shù)生成
采用低功耗傳統(tǒng)藍牙配對時,兩臺設(shè)備都會生成臨時密鑰(Temporary Key,簡稱TK),進行配對。
如果發(fā)起設(shè)備或響應(yīng)設(shè)備中的任何一臺設(shè)備的IO具有顯示功能,就會生成并顯示任意一個位于 “000000”到“999999”之間的TK值。另一臺設(shè)備應(yīng)具有輸入功能,如鍵盤,這樣用戶就能輸入這一臨時密鑰值。
如果發(fā)起設(shè)備和響應(yīng)設(shè)備的IO功能都不具備顯示功能,但都是“僅有鍵盤(Keyboard Only)”,那么用戶就需要確保發(fā)起設(shè)備和響應(yīng)設(shè)備之間的臨時密鑰是相同的,這是Passkey Entry進入的一個特例。
下圖是一臺設(shè)備名為“AuthenTIcaTIon”的設(shè)備想要與一臺iOS設(shè)備配對時的場景,“AuthenTIcaTIon”設(shè)備的輸入界面上顯示了臨時密鑰。之后,iOS設(shè)備就會跳出對話框,提示用戶輸入臨時密鑰值。
圖2:iOS設(shè)備的萬能鑰匙進入
輸入臨時密鑰值之后,發(fā)起設(shè)備和響應(yīng)設(shè)備應(yīng)生成一個128位的臨時數(shù)值,發(fā)起設(shè)備的叫做Mrand (“master random”),響應(yīng)設(shè)備的叫做Srand (“slave random”)。
2.Mconfirm和Sconfirm
Mconfirm和Sconfirm是128位的確認值,可以通過確認值生成函數(shù)c1計算得出。這一函數(shù)的相關(guān)詳情請參考藍牙核心規(guī)格4.2版本,第4卷,H部分,第2.2.3章節(jié)
c1 函數(shù)的輸入?yún)?shù)包括:
臨時密鑰(TK)
用于計算Mconfirm的Mrand,或用于計算Sconfirm的Srand
配對請求指令
配對響應(yīng)指令
發(fā)起設(shè)備地址類型
發(fā)起設(shè)備地址
響應(yīng)設(shè)備地址類型
響應(yīng)設(shè)備地址