5 BR/EDR安全方面
认证
目的
通用认证过程描述如何使用LMP-认证和LMP-配对进行认证,取决于是否存在链接密钥、是否允许配对。
UI术语
Bluetooth authentication
过程
条件
本地设备在建立链路后发起认证,远程设备可能在链路建立期间或之后开启安全。
安全模式
下图是带有安全性的整个通道建立过程,包括Figure 5.3, Figure 5.4,和Figure 5.5中的步骤。
一个设备可以同时支持两种安全模式:安全模式2(与不支持SSP的远程设备向后兼容,从流程图可以看出蓝牙2.0或2.0之前版本的设备没有SSP)和安全模式4(远程设备支持SSP)。
传统安全模式
传统安全模式应用于控制器或主机不支持SSP的设备。
安全模式1(无安全)
当一个远程蓝牙设备处于安全模式1时,将永远不会发起任何安全过程 (例如:将永不发送LMP_AU_RAND, LMP_IN_RAND 或 LMP_ENCRYPTION_MODE_REQ)。
安全模式2(服务层级强制安全性)
当一个远程蓝牙设备处于安全模式2时,不会在收到通道建立请求(L2CAP_ConnectReq)前或者自己发起建立通道前启动任何安全过程。
根据被请求的通道或服务的安全需求决定是否启动安全过程。
处于安全模式2的蓝牙设备应至少使用以下属性对其服务的安全需求进行分类:
- 需要授权
- 需要认证
- 需要加密
注意:安全模式1可以被视为(至少从远程设备的角度来看)安全模式2的特殊情况,即没有服务注册任何安全需求。
安全模式3(链路层级强制安全性)
当远程设备在安全模式3时,会在发送LMP_SETUP_COMPLETE前启动安全过程。
安全模式3的设备可能会根据host的设置(例如:只允许配过对的设备进行通讯)拒绝Host的连接请求(对于Host发送的LMP_HOST_CONNECTION_REQ,回复LMP_NOT_ACCEPTED)。
安全模式4(服务层级强制安全性)
处于安全模式4的蓝牙设备应至少使用以下属性(按安全性降序)对其服务的安全需求进行分类:
- 需要经过认证的链接密钥
- 需要未经认证的链接密钥
- 安全可选
经过认证的链接密钥是一个链接密钥,其中使用了numerical comparison、OOB或passkey entry关联模型。经过认证的链接密钥对于中间人(man-in-the-middle, MITM)攻击具有保护作用。为了确保在简单配对过程中创建已认证的链接密钥,Authentication_Requirements参数应该设置为需要MITM保护选项之一。未经认证的链接密钥是使用just works 关联模型的链接密钥。未经认证的链接密钥对MITM攻击不具有保护作用。为了允许在简单配对过程中创建未经认证的链接密钥,Authentication_Requirements参数可能设置为不需要MITM保护选项之一。
当两个设备都支持SSP时,GAP至少需要未经认证的链接密钥,并为所有连接启用加密,除了那些允许有安全级别0的连接。一个profile或protocol可能会定义服务需要更高安全性(例如:一个经过认证的链接密钥)或无安全性(尽管只有在连接到安全级别为0的服务时才允许使用未加密的连接)。
当设备处于可绑定模式时,要在进入可连接模式或建立链路前启动SSP模式。
处于安全模式4的蓝牙设备,对于处于安全模式3的远程设备在链路建立期间发送的认证请求,因为向后兼容,应给予响应。
处于安全模式4的蓝牙设备在尝试访问远程设备提供的服务之前,以及在授予对远程设备提供的服务的访问之前,强制执行其安全需求。服务访问可能发生于L2CAP通道也有可能发生于L2CAP之上协议建立的通道如RFCOMM。
对于通过无连接L2CAP通道传送单播数据的服务,传送设备应在发送数据前,先强制执行安全需求。通过无连接L2CAP通道接受数据没有拒绝接收无加密数据的机制。因此,第5.2.2.1节讨论了单播无连接数据传输以及设备发起面向连接的通道,而第5.2.2.2节只讨论了设备响应建立面向连接的通道的请求,但不包括单播无连接数据接收。
只安全连接模式
当处于只安全连接模式时,所有BR/EDR服务需要Mode 4 Level 4(允许Mode 4 Level 0的服务除外)。当服务需要Mode 4 Level 4或物理传输不支持安全连接或请求未经认证的配对时设备应拒绝新的出站和入站服务级别连接。
当物理传输不支持安全连接但尝试访问需要Mode 4 Level 4的服务时,在只安全连接模式下使用物理传输的设备,可能用错误码0x05断开ACL连接(认证失败)。
注意:一个设备可以同时操作多个物理传输——在这种情况下,所有物理传输都需要同时启用只安全连接模式。
访问远程设备的安全性(发起方)
当响应设备不支持SSP时,它可能会在发起设备请求用户输入PIN时断开连接。这可能是由于L2CAP通道存在的时间不能长于特定的时间(例如,几秒钟)。当发生这种情况时,发起设备应允许用户完成输入PIN码,然后应重新寻呼远程设备并使用输入的密码重新启动配对过程。
需要配对访问远程设备
当处于安全模式4的蓝牙设备通过面向连接的L2CAP通道发起对远程服务的访问而且没有足够可用的链接密钥时,本地设备应当在发送通道建立请求(L2CAP_ConnectReq或更高级别的通道建立请求例如RFCOMM)之前执行配对过程和启用加密。
当处于安全模式4的蓝牙设备通过无连接的L2CAP单播通道向远程服务传输数据而且没有足够可用的链接密钥时,本地设备应在无连接的L2CAP通道上传输单播数据前执行配对过程和启用加密。
如果配对不成功,本地设备将不发送通道建立请求。本地设备最多可以三次重试配对。如果配对连续失败三次,本地设备将使用错误代码0x05断开ACL链接——认证失败。
如果生成的链接密钥至少没有预期或要求的类型好,本地设备建立通道失败,并可能使用错误代码0x05断开ACL链接——认证失败。
需要认证访问远程设备
当处于安全模式4的蓝牙设备通过面向连接的L2CAP通道发起访问远程服务而且有足够可用的链接密钥时,应当在发送通道建立请求(L2CAP_ConnectReq或更高级别的通道建立请求例如RFCOMM)之前认证远程设备和启用加密。
当处于安全模式4的蓝牙设备通过无连接的L2CAP单播通道向远程服务传输数据,应用需要安全性而且有足够可用的链接密钥时,本地设备应在无连接的L2CAP通道上传输单播数据前认证远程设备和启用加密。
如果服务需要认证,但不成功,或者没有足够可用的链接密钥,本地设备不得启用加密,不得发送通道建立请求,不得为该应用通过L2CAP无连接通道发送任何单播数据。然后Host可能会通知用户并提供执行配对过程。
跨传输密钥的生成和分发
在启用加密之后,如果两个设备都支持跨传输密钥生成,BR/EDR传输的master可能执行LE密钥生成和分发。
发起方使用安全模式4的通道建立过程:
远程设备访问本地服务的安全性(响应方)
当一个远程设备试图访问一个处于安全模式4的蓝牙设备,有足够可用的链接密钥,而且没有进行认证时,本地设备应在收到通道建立请求之后、发送通道建立确认(L2CAP_ConnectRsp结果代码0x0000或更高级通道建立确认如RFCOMM)之前认证远程设备和启用加密。
当请求的服务使用L2CAP通道建立协议时,响应的设备应在收到L2CAP_ConnectReq之后,发送一个L2CAP_ConnectRsp信号数据包,其中包含结果代码0x0001(连接等待),接着发起安全过程,促使本地用户输入(例如:使用PIN的配对或使用Passkey entry 关联模型或Numerical Comparison关联模型的SSP)。这将停止远程设备上的L2CAP RTX计时器(可能只有1秒),并调用远程设备上的ERTX计时器,该计时器的持续时间最少为60秒。
更高层的通道建立协议应设计超时时间为30秒或更长以允许用户输入,或当需要用户输入时提供机制动态延长超时时间。
如果在远程设备试图访问本地服务时认证或配对失败,则本地设备应向通道建立请求(L2CAP_ConnectReq或channel_est_req)发送一个否定响应,如果可能最好表明存在安全问题。如果通道建立协议是L2CAP,则在L2CAP_ConnectRsp信号中发送结果代码0x0003(连接拒绝-安全块)。
如果远程设备表示支持SSP,接收到的是SDP以外的服务的通道建立请求,并且还没有启用加密,那么本地设备应该使用错误代码0x05断开ACL链接——认证失败。
远程设备需要配对访问本地服务
当一个远程设备试图访问安全模式4的设备的服务,并且由于链接密钥缺失或不足,需要进行配对时,本地设备应在收到通道建立请求之后、发送通道建立确认(L2CAP_ConnectRsp结果代码0x0000或更高级通道建立确认如RFCOMM)之前执行配对过程和启用加密。
如果配对不成功,本地设备将不发送通道建立确认。本地设备最多可以三次重试配对。如果配对连续失败三次,本地设备将使用错误代码0x05断开ACL链接——认证失败。
如果生成的链路密钥至少没有预期或要求的类型好,那么本地设备建立通道失败,并可能使用错误代码0x05断开ACL链接——认证失败。
远程设备需要认证访问本地服务
如果认证不成功,则本地设备将不发送通道建立确认。此时,Host可能会通知用户并提供执行配对。
出于向后兼容的原因,处于安全模式4的蓝牙设备在远程设备处于安全模式3时,应在链路建立期间响应认证和配对请求。但是,要在收到信道建立请求之后,发送信道建立响应之前,对远程设备进行认证。
跨传输密钥的生成和分发
在启用加密之后,如果两个设备都支持跨传输密钥生成,BR/EDR传输的master可能执行LE密钥生成和分发。
响应方使用安全模式4的通道建立过程:
认证失败后的简单配对
当两个设备都支持SSP时,无论是否需要安全性或设备是否绑定,所有非SDP连接都将被加密。两个设备之间通过SSP的初始连接将产生一个链接密钥。根据是否进行了绑定以及发起方设备的安全策略,链接密钥可能被存储。当存储了链接密钥时,到同一设备的后续连接将使用认证,但如果远程设备删除了链接密钥,则可能会失败。表5.2根据链接密钥的类型以及是否进行了绑定,定义了应该做什么。
未绑定的已经认证或未经认证的链接密钥可被任意两方设备自由使用,并且任何时候都有可能删除。
IO能力
一旦建立了连接,如果Host认为安全是必须的,并且两个设备都支持SSP,则设备执行IO能力交换。IO能力交换的目的是确定在简单配对的认证阶段1中使用的认证算法。
用户输入能力:
注意:在一定的时间限制内按下按钮可表示“yes”,否则表示“no”。
用户输出能力:
将输入/输出能力映射到IO能力
单独的输入和输出能力被映射到一个单独的IO能力,该能力将决定使用哪个认证算法。
IO能力映射表:
当一个设备具有来自远程设备的OOB认证信息时,它将在LMP_IO_CAPABILITY_RES PDU中指出它。当任一设备具有OOB信息时,将使用OOB关联模型。
Host可能会允许链路管理器忽略IO能力,并使用带有自动接受功能的数值比较协议(通过将Authentication_Requirements参数设置为不需要MITM保护选项之一)。
IO和OOB能力映射到认证阶段1的算法
确定在认证阶段1中使用哪个关联模型分为三个步骤:
首先,设备查看远程IO能力中接收到的OOB Authentication Data Present参数,如果任何一个设备已经收到了OOB认证数据,那么就使用OOB关联模型。在简单配对的IO能力交换步骤中,设备将接收OOB信息的事件指示给它的对等方。
第二,如果两边设备都没有收到OOB认证数据,而且都将Authentication_Requirements参数设置为不需要MITM保护选项之一,认证阶段1应当按照两边设备的IO能力都是DisplayOnly进行处理(例如, 带有自动接受功能的数字比较协议)。
最后,如果两边设备都没有收到OOB认证数据,如果一个或两个设备设置Authentication_Requirements参数为需要MITM保护的选项之一,IO和OOB能力映射到认证阶段1的算法,如表5.7中定义。将Authentication_Requirements设置为需要MITM保护的选项之一的Host,应验证得到的链接密钥是Authenticated Combination Key(参见[Vol 4] Part E, Section 7.7.24,如下表所示)。
表5.7还列出了组合密钥是否会产生经过认证或未经认证的链接密钥。
注意:“DisplayOnly”IO能力只提供单向认证。
Out of Band (OOB)
OOB机制也可用于传达发现信息以及与配对过程相关的其他信息。
OOB数据块的内容:
必须的内容:
- 长度(2字节)
- BD_ADDR(6字节)
可选的内容:
- 设备类别(3字节)
- 简单配对Hash C(16字节)
- 简单配对Randomizer R(16字节)
- 本地名称(可变长度)
- 其他信息
长度字段包括OOB数据块的所有字节数,包括长度字段本身的字节数。BD_ADDR将是OOB数据块开头的一个固定字段。在BD_ADDR之后是0或多个包含可选内容的EIR标记字段。EIR标记格式将用于可选内容。
当一个或两个设备都有OOB认证数据时,如果简单配对失败,那么这两个设备都应该丢弃OOB认证数据,而最初发起认证的设备应该重新发起认证。尽管用户可能会参与到两个设备的IO能力定义的认证中,但是当一个或两个设备都有过时的OOB认证数据时,退回到in-band关联模型将防止死锁情况。
有一个定义为与OOB数据格式一起使用的MIME类型。MIME类型可以在以下链接中找到:http://www.iana.org/assignments/media-types/application/vnd.bluetooth.ep.oob
安全数据库
处于安全模式4的蓝牙设备在与支持SSP的远程设备配对时,应使用以下级别属性(降序)对其服务的安全需求进行分类和实施:
- level 4
需要MITM保护
需要128-bit等效强度的链接和加密密钥,使用FIPS(联邦信息处理标准 Federal Information Processing Standards)批准的算 法(E0 not allowed, SAFER+ not allowed, and P-192 not allowed; encryption key not shortened)
可以接受用户交互
- level 3
需要MITM保护
需要加密
应使用至少56-bit等效强度的加密密钥
可以接受用户交互
- level 2
不需要MITM保护
需要加密
应使用至少56-bit等效强度的加密密钥
- level 1
不需要MITM保护
当启用加密时应使用至少56-bit等效强度的加密密钥
期望最低限度的用户交互
- level 0
不需要MITM保护
不需要加密
不需要用户交互
安全模式4 level 0仅用于:
a) L2CAP固定信令通道,CIDs为0x0001、0x0003、0x003F
b) SDP
c) 在无连接的L2CAP通道上发送广播数据(CID 0x0002)
d) Core Specification Supplement, Part C, Section 1中列出的服务类UUIDs和L2CAP traffic types组合的服务,如下:
L2CAP面向连接的通道:
0x1000 + Bluetooth_Base_UUID(服务发现服务器)
L2CAP无连接数据通道(CID 0x0002):
3D_Display + Bluetooth_Base_UUID(3D Synchronization Profile中定义的3D Display service)
3D_Glasses + Bluetooth_Base_UUID(3D Synchronization Profile中定义的3D Glasses service)
提供的每个服务所需的安全级别应该存储在一个安全数据库中,访问该数据库可以确定链接密钥的类型和访问相应服务所需的加密密钥大小。在面向连接的L2CAP通道上传输服务数据所需的安全级别可能与在另一个面向连接的L2CAP通道上或在无连接的L2CAP通道上传输服务数据所需的安全级别不同。表5.8显示了支持SSP和不支持SSP的远程设备的每个安全级别所需的链接密钥类型。
- 尽管 Level 1中加密不是必须的,规范要求当远程设备支持SSP时,除SDP之外的所有服务都要使用加密。
经过认证的链接密钥:
使用Numeric Comparison、OOB或Passkey Entry简单配对关联模型。经过认证的链接密钥对MITM攻击有保护作用。为了确保在简单配对过程中创建经过认证的链接密钥,Authentication_Requirements参数应该设置为需要MITM保护的选项之一。
未经认证的链接密钥:
使用Just Works简单配对关联模型。未经认证的链接密钥对MITM攻击不具有保护作用。为了允许在简单配对过程中创建未经认证的链接密钥,可以将Authentication_Requirements参数可能设置为不需要MITM保护的选项之一。
当两个设备都支持SSP,且至少有一个设备不支持安全连接时,链接密钥的强度为96个有效bit。当两个设备都支持安全连接时,链接密钥的强度为128个有效bit。安全连接不会改变是否可以抵御MITM攻击。
组合链接密钥:
使用BR/EDR传统配对来生成链接密钥 (参见[Vol 2] Part C, Section 4.2.2.4)。
当两个设备都支持SSP时,GAP至少需要一个未经认证的链接密钥,并对通过面向连接的L2CAP通道发送或接收的服务流量进行加密。一个profile或协议可能定义服务需要更多安全性(例如经过认证的链接密钥),或者在SDP情况下无安全性,或者不需要安全性的服务通过L2CAP无连接通道发送服务流量。
当设备处于可绑定模式时,在进入可连接模式或建立链路之前,应先启用SSP模式。
出于向后兼容的原因,处于安全模式4的蓝牙设备在远程设备处于安全模式3时,应在链路建立期间响应认证和配对请求。
远程Controller和远程Host对SSP的支持由链路管理器SSP(Host支持)功能bit决定。
足够可用的链接密钥:
指的是之前生成的链接密钥的类型是服务所需的密钥类型或具有更高强度。
强度:经过认证的链接密钥 > 未经认证的链接密钥 > 组合链接密钥
对于所有需要安全Mode 4 Level 4的服务,设备应强制使用至少128-bit等效强度的加密密钥。对于所有其他需要加密的服务,无论远程设备是否支持SSP,设备都应该强制使用至少56-bit等效强度的加密密钥。
在启用加密之后,Host应该使用HCI_Read_Encryption_Key_Size命令(参见[Vol 4] Part E, Section 7.5.7)或供应商指定的方法检查加密密钥的大小。
补充说明
SSP(Secure Simple Pairing)使用四种关联模型
Numeric Comparison
适用于两边设备都能显示6个数字,两边设备都能让用户输入“yes”或“no”的场景。两边设备分别显示了6位数字(000000-999999),然后询问用户两边数字是否一样,如果输入“yes”,配对成功。提供MITM攻击保护。传统配对的PIN需要用户输入,而这里的6位数字是安全算法生成。(手机/PC)
Just Works
适用于至少有一个设备既没有数字显示又没有数字输入的场景。使用数值比较协议但是不会给用户显示数字。提供对被动窃听的防护但不提供MITM攻击保护。(手机/耳机)
OOB
适用于使用OOB机制发现设备和进行配对的场景。例如NFC,用户让两个设备贴在一起,会出现选项是否配对,用户输入“yes”,配对成功。
Passkey Entry
适用于一个设备有输入数字能力没显示能力,但另一个设备有显示能力的场景。一个设备上给用户显示6位数字,然后另一个设备要求用户输入数字,如果输入的数字正确,配对成功。(PC/键盘)
LMP-认证
这里使用的密钥是一个已经交换的链接密钥。
LMP-配对
这里使用的PIN是PINBB。
创建链接密钥的过程在[Vol 2] Part C, Section 4.2.2.4和[Vol 2] Part H, Section 3.2中进行了描述。如果链接密钥基于组合密钥,则进行相互身份验证,且不考虑当前的安全模式。