smp即Security Manage Protocol。是藍(lán)牙用來進(jìn)行安全管理的,其定義了配對(duì)和密鑰分發(fā)的過程實(shí)現(xiàn)。smp被用在LE-only設(shè)備或藍(lán)牙雙模設(shè)備中。
框架
首先看下SM在ble中的框架(貌似要用到ble才會(huì)使用SM哦):
安全管理的實(shí)現(xiàn)基礎(chǔ)
前面是簡(jiǎn)要看了下ble SM的大體框架,這部分將較為詳細(xì)的說明ble的安全管理的實(shí)現(xiàn)基礎(chǔ)是怎么樣的。接下來安全管理可能用SM來代指。
密鑰分發(fā)的方式來實(shí)現(xiàn)
SM,就是使用一種密鑰分發(fā)的方式來實(shí)現(xiàn)識(shí)別ble數(shù)據(jù)加密和解密的功能。連接建立之后,雙方通過某些方式協(xié)商共同的密鑰,然后將后續(xù)要傳輸?shù)臄?shù)據(jù)用這個(gè)密鑰通過加密算法進(jìn)行加密,那實(shí)際傳送到空中的數(shù)據(jù)是加密后的數(shù)據(jù),在接收到這些數(shù)據(jù)后,就必須用正確的密鑰來解密,才能得到正確的數(shù)據(jù)了。當(dāng)然,這種方式的加密,破解的方式就是得到其密鑰即可。
配對(duì)–Pairing
配對(duì)過程,是用來建立密鑰的,即完成雙方密鑰協(xié)商,就密鑰一事達(dá)成共同一致的過程。配對(duì)其實(shí)內(nèi)部又分為3個(gè)子過程的,先來看看配對(duì)過程的總體狀況吧(圖中initiator是連接發(fā)起者,一般是Master,Responder一般是Slave):
Legacy Pairing與Secure Connection區(qū)別
這里需要說明下上圖中這兩者區(qū)別:
LE Secure Connection是BT 4.2后新增特性,Key生成方式不同,另BR/EDR與LE可以相互借用配對(duì)的key。總之就是在安全方面有較大提升。
配對(duì)第一階段:配對(duì)特征交換
即需要知道對(duì)方都支持哪些配對(duì)功能,像authentication要求,IO capabilities,是否支持Secure Connection等,以便雙方后續(xù)進(jìn)行相應(yīng)的配對(duì)操作。比如不能讓一個(gè)沒有輸入功能的設(shè)備使用PIN碼輸入來進(jìn)行配對(duì)……
配對(duì)第二階段:Key產(chǎn)生
LE Legacy pairing:產(chǎn)生Short Term Key;
LE Secure Connection:產(chǎn)生Long Term Key。
配對(duì)第三階段:Key分發(fā)
分發(fā)一些其他用途的Key,像Identity Resolving Key(IRK),這個(gè)Key可能是用于Random Address解析的吧(不確定哦,后續(xù)確認(rèn))。不過在分發(fā)這些Key時(shí),此階段鏈路是必須要加密的,要是不加密,那密鑰就直接被中間截取了,那后續(xù)都仍可被破解。因此必須加密,加密的Key是用第二階段產(chǎn)生的STK或LTK,或者雙模下直接共享使用BR/EDR配對(duì)產(chǎn)生的Key。
實(shí)例展示
這里是隨便抓了兩個(gè)設(shè)備(Master和Slave)建立連接時(shí)的包,其中smp開頭的包部分就是整個(gè)smp的流程咯,詳細(xì)的看圖吧:
這里開始時(shí),Advertiser發(fā)ADV,然后Scanner搜索到了ADV信息,然后變身Initiator發(fā)Connect Request,然后連接就建立起來。隨后,立馬,Slave發(fā)一個(gè)Security Request(可選),然后進(jìn)行配對(duì)的第一階段,交換雙方配對(duì)支持特征。接著進(jìn)行第二階段生成了STK(看來這里的設(shè)備是用的Legacy Pairing方式,畢竟目前支持4.2的Secure Connection的還是不太多的),生成完成其實(shí)可以看到“LLCP Encryption Start”的過程,立馬對(duì)鏈路加密,加密完成了,才進(jìn)行配對(duì)第三階段,分發(fā)其它Key。
密碼工具箱
這是一些工具(軟件或硬件單元實(shí)現(xiàn)),用于某些加密,隨機(jī)數(shù)產(chǎn)生,配對(duì)過程用到的一些可復(fù)用的小過程吧。密碼工具箱里面都是些密碼函數(shù)了。
這里對(duì)這個(gè)工具箱中的密碼函數(shù)主要是進(jìn)行簡(jiǎn)要功能上介紹吧,如果要自己實(shí)現(xiàn)這些函數(shù)的硬件電路設(shè)計(jì),或者是coding的話,得詳細(xì)的查其資料了。
- ah:產(chǎn)生24bit的hash值(random address生成和解析會(huì)用哦);
如下的是用于LE Legacy pairing過程的:
- c1:配對(duì)過程中產(chǎn)生confirm值;
- s1:配對(duì)過程中產(chǎn)生STK;
如下的是用于LE Secure Connections pairing過程的:
- f4:配對(duì)過程中產(chǎn)生confirm值;
- f5:配對(duì)過程中產(chǎn)生LTK和MacKey;
- f6:配對(duì)過程中在authentication過程2中產(chǎn)生檢查值;
- g2:配對(duì)過程中在authentication過程1中產(chǎn)生6位數(shù)字的比較值;
- h6:用于從BR/EDR link key產(chǎn)生LE的LTK,或者從LE的LTK產(chǎn)生BR/EDR link key,相當(dāng)于一個(gè)Key轉(zhuǎn)換作用吧。
以上的密碼函數(shù)分為兩類:
security function e
ah, c1, s1都是屬于e這種的,其對(duì)數(shù)據(jù)加密的使用方式如下:
encryptedData = e(key, plaintextData) /* encrypteData, key, plaintextData are 128 bit data */
security function AES-CMAC
f4, f5, f6, g2, h6都是屬于e這種的,其使用方式如下:
MAC = AES-CMACk(m)
其中,MAC是Message Authentication Code(128 bit),m是需要被authenticated的可變長(zhǎng)度的數(shù)據(jù),k是128-bit Key。
評(píng)論