From
1 地址分類
就像Ethernet MAC (Media Access Control)地址一樣,每個藍牙設備有一個基本標識符,即藍牙設備地址,其是一個48位(6-byte)的唯一標識,藍牙建立連接時使用的就是這個地址。
藍牙有兩類地址:
-
Public deviceaddress
-
Random device address
Public deviceaddress:相當於固定的BR / EDR,工廠編程的設備地址。它必須向IEEE注冊機構注冊,並且在設備的生命周期內不會變化。
藍牙random地址又進一步分類如下:
對於一個藍牙設備,可以使用public,static, resolvable 或者non-resolvable類型的藍牙地址,地址類型通過廣播包中的一個bit來區分,這個bit就是TxAddr和RxAddr。
-
Public address: 全球唯一性地址,前3個字節體現了OUI(Organizationallyunique identifier),表明制造商,定義如下
-
Static random address: 當OUI無法獲取時,可以使用靜態隨機地址來替換Public address,定義如下:
-
Private addresses: 可以周期性的變化,因此可以避免設備被跟蹤。這類地址又分為可以解析的地址和不可解析的私有地址。
-
Resolvable private address: 雙方設備可以通過一個共享的key來解析的地址,BLE雙方在經過配對以后,會產生一個用於解析私有地址的key,在后續的連接中,即使BLE設備地址發生了變化,也能被信任的設備識別,但對其他設備來說,則是隨機變化和不可跟蹤的,定義如下:
-
Non-resolvable privateaddress: 不可解析的地址,一般不希望使用這類型的地址,定義形式如下:
2 私有地址生成與解析
Resolvable private address的生成方法和解析方法
在藍牙的pairing/bonding流程中,雙方會產生交換兩個參數(IPK,prand),其中IPK是地址解析用的密鑰,prand是一個隨機數,私有地址的解析會用到這兩個參數以及一個哈希函數ah。
生成方法:
可以看到這類地址有兩部分組成,24位的pand以及24位的hash值。因此,對方設備只要根據這個地址信息,使用相同的key就能解析出該地址:
上面公式中的prand是從對方地址中獲取的,只要localhash與對方的hash值相同,就可以認為,這個設備是之前配對過可信的設備,從而實現雙方設備的通信。