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