想去垦丁,看垦丁蓝。
core_v5.0 vol 3. Part C
LMP:Link Manager Protocol,链路管理协议,描述了LM端对端通信相关内容。
MITM:man-in-the-middle,中间人
SPP:Secure Simple Pairing,安全简单配对
authentication:认证
IO能力:input and output capabilities,输入输出能力
OOB:Out of Band,带外
1. BR/EDR安全概述
BR/EDR安全可以大致分为两部分:认证和安全模式。安全模式分为4类,安全模式1,安全模式2,安全模式3,安全模式4。其中,前3种安全模式为传统安全模式。
2. 认证
认证过程可看作LMP- authentication和LMP-pairing过程。
认证流程图:
- 用户界面术语:Bluetooth authentication
- 本地设备必须在链路建立后发起认证过程,远端设备可在链路建立时或链路建立后发起安全过程。
2. 传统安全模式
对于Controller和Host都不支持安全简单配对的设备,使用传统安全模式。
(1)安全模式1:处于该模式的设备不会发起任何安全过程。
(2)安全模式2:服务级安全,处于该模式的设备是否发起安全过程取决于所建立连接的信道和服务的安全需求。
- 服务的安全需求可分为3类:认证、授权、加密。
- 该模式下,设备在未发起信道建立请求,或收到信道建立请求(L2CAP_ConnectReq)前,不会发起任何安全过程。
(3)安全模式3:链路级安全,处于该模式的设备,在链路建立完成前,即在发送LMP_setup_complete前,必须发起安全过程。
3. 安全模式4(服务级安全)
(1)链路密钥
- Authenticated link key,认证链路密钥,可用于数字比较、带外、配对。该秘钥可防止中间人攻击。
① 为了确保在简单配对过程中可生成该秘钥,需在Authentication_Requirements参数中填写MITM Protection Required 选项。 - Unauthenticated link key,非认证链路密钥。仅用于简单配对过程,不能抵御中间人攻击。
① 当设备都支持安全简单配对时,GAP至少需要一个非认证链路秘钥来对所有的连接进行加密,服务安全等级为0的除外。
② 为了确保在简单配对过程中可生成该秘钥,需在Authentication_Requirements参数中填写MITM Protection Not Required 选项。
(2)不晓得取什么小标题好
- 当设备处于绑定模式时,在进入可连接模式或发起链路建立前,需使能安全简单配对模式。
- 若本地设备为安全模式4,远端设备为安全模式3,则本地设备需要在链路建立期间响应认证请求。
- 若设备为安全模式4,则在它访问远端服务,或允许远端设备访问本地服务前,需要发起安全过程。
- 若设备需在无连接L2CAP信道上传输广播数据,需要发起安全过程。
- Secure Connections Only mode
(3)作为发起方,访问远端服务的安全
-
当发起方请求远端设备输入PIN,若远端设备不支持安全简单配对,则可能断开链路。
-
配对:
① 发起配对过程的场景:
❤❤ 处于安全模式4的设备想要通过面向连接的L2CAP信道访问服务,且无有效的链路秘钥。此场景,设备需要安全配对且使能加密后,方可发起信道连接建立请求。
❤❤ 处于安全模式4的设备想要通过无连接的L2CAP广播信道发送数据,且无有效的链路秘钥。此场景,设备需要安全配对且使能加密后,方可发起该广播信道上传输数据。
② 异常情况:
×× 若配对失败,设备重新发起配对请求。最多可以发送3次配对请求。
×× 若3次配对都失败,则断开ACL链路,并携带错误码0x05 - 认证失败。
-
认证:当配对过程完成,拥有有效的链路秘钥时,发起认证过程。
-
交叉传输秘钥生成和分发
(4)作为响应方,远端设备访问本地服务的安全
-
当远端设备想要访问本地服务,若处于安全模式4的当前设备拥有一个有效的链路秘钥,且还未执行认证过程,则发起认证过程,并在收到信道建立请求后,信道建立确认前使能加密。
-
若认证或配对失败,本地设备发送一个否定响应,指示存在安全问题。若信道建立协议为L2CAP,则发送L2CAP_ConnectRsp消息,并携带结果码0x0003(connection refused - security block)。
-
若远端设备支持安全简单协议,请求一个非SDP的服务,且还未使能加密,则本地设备断开ACL链路,并携带错误码0x05( Authentication Failure)。
-
配对:当远端设备想要访问本地服务且本地设备没有一个有效的链路秘钥,则需要发起配对过程。
① 若配对失败,设备重新发起配对请求。最多可以发送3次配对请求。若3次配对都失败,则断开ACL链路,并携带错误码0x05 - 认证失败。
② 若生成的链路秘钥没有达到预期,则认为认证失败,本地设备断开ACL链路,并携带错误码0x05 - 认证失败。 -
认证:当配对过程完成,拥有有效的链路秘钥时,发起认证过程。
-
交叉传输秘钥生成和分发
(5) 简单配对(鉴权失败)
- 若设备都支持安全简单配对,则无论设备是否绑定,服务是否需要安全,所有非SDP连接都被加密。
- 是否存储链路秘钥,取决于是否绑定,安全策略。
- 鉴权失败后,设备的行为取决于链路秘钥类型和设备是否绑定以及安全策略:
(6) IO能力
- 若设备都支持安全简单配对,且Host认为安全是必须的,则一旦连接建立,设备发起IO能力交换。
- IO能力用于确定简单配对过程的认证第一阶段的认证算法。
- 输入能力:
① No input:设备没有指示“yes”or “no” 的能力
② Yes/No:设备至少有两个可以指示“yes”or “no” 的按钮,或者具有一种可以指示“yes”或者“no”的机制,如设备在有限的时间内按下按钮表示“yes”,否则为“no”。
③ 键盘:设备具有数字键盘,可以输入数字0~9;设备有两个按钮可以指示“yes” or “no”,或者具有一种可以指示“yes”或者“no”的机制。 - 输出能力:
① No input:设备显示6个十进制数的能力
② Numeric output:设备有显示6个十进制数的能力 - IO能力:
(7) OOB,非蓝牙传输方式
- OOB机制可用于向设备提供配对过程中的相关信息,如设备地址,设备类型,简单配对Hash等。
- OOB数据块内容,分为必选和可选两部分。
① 必选:长度和地址
② 可选:设备类型、简单配对HASH C,简单配对随机数生成器R,本地名字等。
- OOB数据块格式:
(8) 认证阶段1模型
- IO和OOB能力映射
- 如何决定认证阶段1的相关模型,分为3步:
① 设备检查是否收到了OOB认证数据。若任意一个设备收到了OOB认证数据,则使用OOB相关模型。
② 若设备都未收到OOB认证数据,且都将Authentication_Requirements参数设置为MITM Protection Not Required的某一个选项,则使用IO capabilities to DisplayOnly (如数值比较,且自动确认)。。。这一部分,其实我没看懂,乱翻译的。
③ 若设备都未收到OOB认证数据,且至少有一个设备将Authentication_Requirements参数设置为MITM Protection Required的某一个选项,则认证阶段1的模型参考如下表格:
(9) 安全数据库
- 安全等级与链路秘钥映射