3.2廣播工作模式中認證?
?????? ULP系統中,每一臺設備會產生和保持兩個隨機生成的密鑰:鑒權(identity root)和加密(encryption root)。鑒權用于連接中生成私有地址和區分標識符密鑰連接中的標識符。加密用來確立密鑰標識符的安全。在任何加密連接中,廣播創建密鑰作為會話密鑰的基礎。集合密鑰是在某些配對選擇中創建,這些密鑰只是用作保護(未來)廣播中密鑰的傳遞。
?
?????? 加密模式中,通過廣播方式把創建的密鑰分派給需要連接的所有設備或實體,鑒權的一個應用建立私有地址。因為鑒權每次只支持一個身份,所以許多申請者將獲得同樣的鑒權。廣播向設備提供標識符的加密(伴隨16bit 標識符),在加密模式中該設備是支持連接的設備。規范的基本概念有唯一的標識符密鑰,被稱為“長期密鑰”(Long Term Key),這個密鑰分配給每個申請者。此外,加密規則僅僅是推薦使用并且在廣播之外。長期密鑰是不可見的,在原則上能使用任何映射在 16位和128位之間密鑰。加密標識符密鑰有以下幾種:IRK(Identity Resolving Key)、PIR(Pairing Identity Root)、DHK(Diversifier Hiding Key)、 PIRK(Pairing Identity Resolving Key)、PDHK (Pairing Diversifier Hiding Key)。
?
?????? 在廣播模式條件下,廣播設備產生一個初始隨機向量(IRV),該向量由10個字節的新隨機數組成,也是鏈路層(LL)傳輸給申請者的第一個可能的數據包。廣播設備初始化時,到達一個連接請求。
?
連接請求包括:SEC字段(表明是否是加密請求)、PI字段(表明申請者連接一個匹配認證)。SEC=1,表示有2字節的加密區分標識符(EDIV)和申請者6字節的隨機地址。
?
如圖3所示,在SEC=1的條件下,ULP藍牙廣播模式下的認證步驟如下:
1.解密區分標識符隱藏密鑰:發送HCI_Set_key(0x00,DKH)命令到鏈路層,返回HCI_Command_Complete(),并再發送加密請求命令HCI_encrypt(addmaster),PAL返回請求完成命令HCI_Command_Complete()。
由EDHK計算DIV,
此具體過程是:
由Y = EDHK
(IRA(初始化隨機地址),
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00)
DIV = {Y0, Y1} XOR {EDIV0, EDIV1}得出。
或者在PI=1的條件下,即匹配連接中有
Y = EPDHK (IRA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00)
得出DIV = {Y0, Y1} XOR {EDIV0, EDIV1}
?
?????? 2.創建長期密鑰:發送設置加密命令到鏈路層HCI_Set_key(0x00,ER),返回完成命令HCI_Command_Complete(),再發送請求加密長期密鑰命令HCI_encrypt(DIV),返回完成創建長期密鑰命令HCI_Command_Complete(LTK)。
?
按以下公式重新創建長期密鑰LTK,
?
LTK=EER (DIV,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00)
?
?????? 3.創建會話密鑰命令HCI_Set_key(0x00,LTK),返回完成命令HCI_Command_Complete(),再發送請求加密長期密鑰命令HCI_Encrypt(addmaster/IRV),返回完成創建長期密鑰命令HCI_Command_Complete(SK)。。
?
?????? 4.鏈路層設置會話密鑰和初始值:初始值為
?
?????? 別發送命令HCI_Set_key(0x01,SK)和HCI_Set_IV(addr|addr[0…23])到鏈路層進行設置,返回完成設置命令HCI_Command_Complete()。生成會話密鑰SK和IV,并在鏈路層設置(廣播地址AA = {A0,A1, …,A5})。
?
?
3.3申請模式中加密會話設置?
?????? 申請者瀏覽廣播,找到相匹配的廣播地址AA={A0,A1,…,A5},初始使用6字節完全隨機地址(IRA)。
?
?????? 1.創建隨機地址:發送HCI_Rand()命令到鏈路層(LL),返回HCI_Command_Complete(rand),
?
?????? 2.加密區分標識符(diverfier)密鑰:發送設置加密命令到鏈路層HCI_Set_key(0x00,DHR),返回請求完成命令HCI_Command_Complete(),再發送加密請求命令HCI_Encrypt(addmaster),返回請求完成命令HCI_Command_Complete()。
?
由DIV計算出EDIV
由Y = EDHK (IRA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00)
得出EDIV = {Y0, Y1} XOR {DIV0, DIV1}
或者在PI=1的條件下,即匹配中由
Y = EPDHK (IRA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00)
得出EDIV = {Y0, Y1} XOR {DIV0, DIV1}
?
?????? 最后申請者請求一個連接,該連接建立過程如圖4所示。
?
?????? 1.如果請求加密連接,則SEC 字段一直等于1;如果在申請者和廣播設備間,擴展匹配繼續進行,即PI字段設置為1。
?
?????? 2. 2字節的加密區分標識符密鑰(EDIV),6字節的申請者隨機地址(IRA)。
?
?????? 3.當連接已經建立,從廣播中申請者得到一個10字節的隨機向量(IRV)作為層協議數據單元PDU(類型0xFD),然后從長期密鑰中,申請者創建會話密鑰SK和設置初始值(IV)。
?
?????? 創建會話密鑰SK:發送設置長期密鑰命令HCI_Set_key(0x00,LTK)到鏈路層,返回完成命令HCI_Command_Complete(),再發送加密請求命令HCI_encrypt,返回完成創建會話密鑰命令HCI_Command_Complete(SK),
,???????
即可表示為:
SK = (IRA,IRV),
IV = {IRA,A0,A1,A2}。
?
?????? 4.SK和IV被分配給鏈路層(LL),作為最后的步驟,LL操作中,申請者將初始化“連接模式變化”。
鏈路層設置會話密鑰和初始值:分別發送命令HCI_Set_key(0x01,SK)和HCI_Set_IV(addr|addr[0…23])到鏈路層設置,返回完成設置命令HCI_Command_Complete()。
?
?
3.4密鑰更新?
?????? 安全連接建立之后,不支持密鑰更新或者重建安全參數。唯一的例外就是匹配程序,在匹配的第一階段后,匹配程序中的會話加密密鑰和狀態發生改變。
?
評論
查看更多