1. 介紹
GAP,Generic Access Profile,該Profile保證不同的Bluetooth產品可以互相發現對方並建立連接
GAP定義了藍牙設備如何發現和建立與其他設備的安全/不安全連接
它處理一些一般模式的業務(如詢問、命名和搜索)和一些安全性問題(如擔保)
同時還處理一些有關連接的業務(如鏈路建立、信道和連接建立)
GAP規定的是一些一般性的運行任務;因此,它具有強制性,並作為所有其它藍牙應用規范的基礎
GAP在藍牙協議棧中的位置如下圖
GAP有如下四個目的
- Profile Role - 可發現模式和過程 - 連接模式和過程 - 安全模式和過程
!!!注意: 本文中的內容針對BR/EDR !!!
2. 角色
在BLE下,GAP Role有四種
- Broadcaster : 發送advertising events的設備(有Transmitter, 可能有Receiver) - Observer : 接收advertising events的設備(可能有Transmitter, 有Receiver) - Peripheral : 物理鏈路上接受連接的設備, 在LL層Connection State為Slave(有Transmitter和Receiver) - Central : 物理鏈路上發起連接的設備, 在LL層Connection State為Master(有Transmitter和Receiver)
3. 配置
用戶可配置(地址不可配置)的參數如下
- Bluetooth Device Address : BD_ADDR - Bluetooth Device Name : the user-friendly name - Bluetooth Passkey : Bluetooth PIN - Class of Device : 設備發現階段用於指示設備類別和支持的設備類別
4. 模式
發現模式(Discoverablity Modes), 對應於inquiry
- Non-discoverable Mode: 不響應inquiry - Discoverable Mode: 是下面兩種模式的總稱, 設備進入INQUIRY_SCAN狀態, 響應inquiry - Limited discoverable Mode: 響應LIAC inquiry - General discoverable Mode: 響應GIAC inquiry
連接模式(Connectability Modes), 對應於paging
- Non-connectable Mode: 不響應paging
- Connectable Mode: 設備進入PAGE_SCAN狀態, 響應paging
配對模式(Bondable Modes), 對應於bonding/paring, 需要和SSP(Secure Simple Pairing)配合使用
- Non-bondable Mode: 設備不可接受來自遠端設備的綁定/配對請求
- Bondable Mode: 設備可接受來自遠端設備的綁定/配對請求
5. 安全
5.1 認證
認證(Authentication)過程描述了兩個藍牙設備進行LMP認證和LMP配對的一般過程,過程如下
5.2 安全模式
安全模式描述了Channel連接建立過程中的涉及的Secure問題
安全模式大體上可分為兩種Legacy Security Modes(1、2、3, 也稱Legacy Pairing)和Security Mode 4(即SSP)
注意: 設備可能同時支持Security Mode 2(兼容不支持SSP的設備)和Security Mode 4
詳細有如下四種
- Security Mode 1 : Non-secure - Security Mode 2 : Service level enforced security - Security Mode 3 : Link level enforced security - Security Mode 4 : Service level enforced security
5.2.1 Legacy Security Modes
Legacy Security Modes用於藍牙v2.0及更早版本, 設備需要輸入Pin Code, 當雙方Pin Code相同時配對成功
Pin Code通常為4個字節, 如0000和1234
5.2.2 SSP
SSP用於藍牙v2.1及后續版本, 對於BR/EDR要求強制支持;它使用Elliptic Curves Diffie-Hellman提供被動竊聽保護,還有可選的MITM保護
SSP引入了IO Capabilities的概念,這是一種考慮設備輸入和輸出能力並據此選擇配對模型的機制
SSP使用四種不同的配對模式:Numeric Comparison、Just Works、Passkey Entry、Out Of Band
Numeric Comparison
適用於兩個設備都可以顯示六位數字並且能夠讓用戶輸入"Yes"或"No"的情況;在這個模型中,有針對MITM的保護,故而即使知道這六位數字對解密數據也沒有意義;這也是Android中藍牙常用的配對模式
Just Works
適用於兩個設備都沒有任何輸入和輸出能力的情況;它使用與數字比較相同的協議,但它不向用戶顯示任何數字,也不要求確認這些數字;該模型不提供針對MITM的保護
Passkey Entry
適用於一個設備具有數字鍵盤但沒有顯示器且另一個設備至少具有數字輸出的情況;在配對過程中,帶顯示屏的設備顯示一個6位數字,另一個設備必須通過鍵盤進行輸入
值得注意的是,Passkey Entry與Legacy Pairing的PIN Code輸入不同;在Legacy Pairing中,PIN Code是密鑰生成的唯一隨機源;而在Passkey Entry中,六位數字只是安全算法的artifact,而不是輸入;知道六位數字對解密數據沒有幫助;Passkey Entry可防止MITM
Out Of Band
該模型允許通過不同的技術(如NFC)進行配對;使用NFC進行藍牙配對,只需將設備放在一起,它們就會配對;對於MITM保護,依賴於使用的帶外機制的MITM的保護
5.2.3 IO能力
SSP配對模型的選擇取決於設備的輸入和輸出能力
輸入能力有三種
- No Input: 設備沒有輸入能力 - Yes/No: 用戶可以選擇Yes或者No - Keyboard: 用戶可以輸入六位數
輸出能力有兩種
- No Output: 設備不能顯示六位數字
- Numeric Output: 設備能夠顯示六位數字
IO能力可以映射進行下表所示的映射
5.2.4 配對模型選擇
當我們知道設備的IO功能后,可以據此選擇設備之間的配對模型
下表顯示了如何選擇配對模式以及設備是否能夠相互進行身份驗證(Initiator位配對發起方, Responder為配對接收方)
6. 空閑模式
描述了發起方Inquiry和Discovery的過程
- General Inquiry - Limited Inquiry - Name Discovery - Device Discovery - Bonding: 包括Dedicated Bonding和General Bonding, 區別???
TIP:
Dedicated Bonding是用戶通過特定請求(如添加設備)觸發的綁定
General Bonding是在連接到首次某個服務時由於安全性自動觸發的綁定
7. 建立連接
進行下面過程之前需要Discovery過程提供遠端設備如下信息
基本信息
- DB_ADDR、Device Access Code - System Clock - Page Scan Mode
附加信息
- The Class of device - The Device name - The supported Service Classes
有如下三種
- Link Establishment - Channel Establishment - Connection Establishment
8. 操作模式和過程
在LE物理層通道上可能同時存在多個模式和過程
- Broadcast mode and observation procedure - Discovery modes and procedures - Connection modes and procedures - Bonding modes and procedures
參考:
<Bluetooth Security>
<Guide to Bluetooth Security>
<Secure Simple Pairing Explained>