蓝牙规范 Core v5.2 GAP 文档解读第10章 LE安全方面

10 LE安全方面

这部分定义了与ACL连接的安全性或广播的安全性相关的模式和过程。与CIS安全有关的模式和过程应与其关联的ACL中使用的模式和过程相同。

安全模式和过程 广播者 观察者 外围设备 中心设备
LE安全模式1 E E O O
LE安全模式2 E E O O
LE安全模式3 O O E E
认证过程 E E O O
授权过程 E E O O
连接数据签名过程 E E O O
验证签名数据过程 E E O O

 

LE安全模式

一个设备、一个服务或一个服务请求的安全需求以安全模式和安全级别表示。每个服务或服务请求可能有自己的安全需求。设备也可能有安全需求。两个设备之间的一个物理连接只能在一种安全模式下运行。

 

LE安全模式1

LE安全模式1有如下安全级别:

  1. 无安全(无认证、无加密)
  2. 未经认证的加密配对(‘No MITM protection’)
  3. 经过认证的加密配对(‘MITM protection’)
  4. 经过认证的LE安全连接,使用128位强度加密密钥的加密配对

在LE安全模式1 level 2下运行的连接也应满足LE安全模式1 level 1的安全要求。

在LE安全模式1 level 3下运行的连接也应满足LE安全模式1 level 2或LE安全模式1 level 1的安全要求。

在LE安全模式1 level 3下运行的连接也应满足LE安全模式2的安全要求。

在LE安全模式1 level 4下运行的连接也应满足LE安全模式1 level 3或LE安全模式1 level 2或LE安全模式1 level 1的安全要求。

在LE安全模式1 level 4下运行的连接也应满足LE安全模式2的安全要求。

 

LE安全模式2

LE安全模式2有2个安全级别:

  1. 未经认证的数据签名配对
  2. 经过认证的数据签名配对

LE安全模式2只能用于基于连接的数据签名。

当连接在LE安全模式1 level 2、LE安全模式1 level 3或LE安全模式1 level 4下运行时,不应使用数据签名。 

 

混合安全模式要求

如果对给定的物理链路同时需要LE安全模式1和LE安全模式2level 2,那么应使用LE安全模式1level 3。

如果对给定的物理链路同时需要LE安全模式1level 3和LE安全模式2,那么应使用LE安全模式1level 3。

如果对给定的物理链路同时需要LE安全模式1level 2和LE安全模式2level 1,那么应使用LE安全模式1level 2。

如果对给定的物理链路同时需要LE安全模式1level 4和任意其它安全模式级别,那么应使用LE安全模式1level 4。

 

只安全连接模式

一个设备可能处于只安全连接模式。只安全连接模式只能使用安全模式1level 4,除非服务只需要安全模式1level 1。

当远程设备支持LE安全连接并且使用经过认证的配对时,设备只能接受需要安全模式1level 4的服务的新的出站和入站服务级别连接。

 

LE安全模式3

LE安全模式3有3个安全级别:

  1. 无安全(无认证、无加密)
  2. 使用未经认证的Broadcast_Code(用于BIS中传输加密数据)
  3. 使用经过认证的Broadcast_Code(用于BIS中传输加密数据)

等时广播者广播一个BIG或者同步的接受者接收BIS时应使用安全模式3。

运行在安全模式3level 1的设备应要求等时数据未加密。

运行在LE安全模式3level 2的设备应需要一个Broadcast_Code来加密在BIS中传输的数据。运行在该模式下的设备还应满足LE安全模式3 level 1的安全要求。

运行在LE安全模式3 level 3的设备应需要一个Broadcast_Code来加密在BIS中传输的数据。运行在该模式下的设备还应满足LE安全模式3level 2和LE安全模式3level 1的安全要求。当服务需要level 3安全性时,如果设备没有使用经过认证的方法接收到Broadcast_Code,设备应该向用户指出一个适当的错误(例如,Broadcast_Code的安全性不足)。

 

认证过程

认证过程描述在设备向远程设备发起服务请求以及设备从远程设备接收到服务请求时如何建立所需的安全性。认证过程适用于LE安全模式1。认证过程只能在连接建立后启动。

LE安全模式2与使用数据签名相关。

LE安全模式1中的认证是通过启用加密来实现的。加密的安全性受到所执行的配对类型的影响。有两种类型的配对:经过认证的配对或未经认证的配对。经过认证的配对涉及在将认证设置为“MITM保护”的情况下执行配对过程。未经认证的配对涉及在认证设置为“没有MITM保护”的情况下执行配对过程。

注意:在本节中,术语“认证配对”和“未认证配对”指的是用于执行配对的安全方法,与重新连接期间对之前绑定的设备的认证无关。

 

响应服务请求

在本节中本地设备是响应远程设备发出的服务请求的设备。在L2CAP协议中,本地设备对发出连接请求的远程设备进行响应。在GATT中,本地设备是GATT服务器,远程设备是GATT客户端。

当本地设备接收到来自远程设备的服务请求时,如果服务请求被拒绝,它将使用错误代码进行响应。错误代码取决于当前连接是否加密,以及创建要使用的LTK(Long Term Key)或STK(Short Term Key)时执行的配对类型。

当本地设备接收到来自远程设备的服务请求时,其行为应遵循以下规则:

  • 本地设备的安全数据库指定接受服务请求所需的安全设置。如果不需要加密和数据签名,服务请求将被接受。如果需要加密,本地设备必须发送Table 10.2中定义的错误代码。如果不需要加密,但是需要数据签名,那么本地设备行为参见数据签名章节。
  • 如果LTK和STK都不可用,应以错误代码“Insufficient Authentication”拒绝服务请求。
    注意:当链接未加密时,错误代码“Insufficient Authentication”并不表示需要MITM保护。
  • 如果LTK或STK可用,且需要加密(LE安全模式1),但未启用加密,应以错误代码“Insufficient Encryption”拒绝服务请求。如果在密钥大小不足的情况下启用加密,则应以错误代码“Insufficient Encryption Key Size”拒绝服务请求。
  • 如果需要经过认证的配对,但只发生了未经认证的配对,并且链接目前已加密,则应以错误代码“Insufficient Authentication”拒绝服务请求。
    注意:当出现未经认证的配对并且链接当前已加密时,错误代码“Insufficient Authentication”表示需要MITM保护。
  • 如果需要进行LE安全连接配对,但发生了LE传统配对并且链接当前已加密,则应以错误代码“Insufficient Authentication”拒绝服务请求。

本地设备将以访问其服务所需的最低安全级别进行响应。如果本地设备没有安全需求,那么它应该默认为在配对阶段1中定义的本地设备能够执行的最小安全级别。

如果本地设备不支持所需的IO能力或OOB数据,则本地设备不需要经过认证的配对(MITM)。

Table 10.2总结了本地设备对远程设备的服务请求的响应。

蓝牙规范 Core v5.2 GAP 文档解读第10章 LE安全方面_第1张图片

蓝牙规范 Core v5.2 GAP 文档解读第10章 LE安全方面_第2张图片

处理GATT指示和通知:

客户端通过Client Characteristic Configuration Descriptor适当地配置服务器,从而“请求”服务器发送指示和通知。由于配置在断开和重新连接时是持久的,所以在发送指示或通知之前,必须在重新连接时根据配置检查安全需求。当服务器重新连接到客户端以发送需要安全性的指示或通知时,服务器应在发送指示或通知之前向客户端发起或请求加密。如果客户端没有LTK,表明客户端丢失了绑定,则启用加密将失败。

跨传输密钥生成:

启用加密后,达到了正确的安全级别,两个设备都支持跨传输密钥生成,两个设备都可以执行BR/EDR链接密钥派生。

注意:如果LTK有一个小于16 octets(128 bits)的加密密钥,那么BR/EDR链接密钥将在LTK被掩码遮盖之前派生。

 

发起服务请求

在本节中本地设备是向远程设备发起服务请求的设备。在L2CAP协议中,本地设备发送连接请求,远程设备发送连接响应。在GATT中,本地设备是GATT客户端,远程设备是GATT服务器。

当本地设备向远程设备发起服务请求时,其行为应遵循以下规则:

  • 本地设备的安全性数据库指定发起服务请求所需的安全性。如果本地设备不需要加密,那么服务请求可以在没有加密或配对的情况下进行。
  • 如果LTK不可用,但需要加密,则应使用本地设备所需的认证设置启动配对过程。如果配对过程失败,则服务请求将被中止。
    注意:在未启用加密时,错误代码“Insufficient Authentication”并不表示本地设备需要MITM保护。
    注意:如果本地设备是一个外围设备,那么它可以发送一个Slave Security Request。
  • 如果已经进行了配对,但加密密钥的大小不足,则将以所需的加密密钥大小执行配对过程。如果配对过程失败,则服务请求将被中止。
  • 如果LTK可用,并且需要加密(LE安全模式1),那么应在继续进行服务请求之前启用加密。一旦加密启用后,服务请求将继续进行。如果因为远程设备上不再存在绑定或连接了错误的设备而加密失败,那么本地设备必须在用户交互后,确认远程设备、重新绑定、执行服务发现并重新配置远程设备。如果本地设备之前已经确定远程设备没有«Service Changed»特征,或者如果本地设备通过读取«Database Hash»特征来确定数据库没有更改,则可以跳过服务发现。
  • 如果需要经过认证的配对,但只发生了未经认证的配对,并且链接目前已加密,则应该使用所需的认证设置执行配对过程。如果配对过程失败,或者不能使用本地设备和远程设备的IO能力执行经过认证的配对,则服务请求将被中止。
    当在两个设备之间创建了一个绑定时,任何重新连接都应该导致本地设备在启动任何服务请求之前启用或请求与远程设备的加密。
    如果一个本地设备在发起一个服务请求之前不启动加密,并依赖于错误代码来确定安全需求,本地设备不应在链接未加密时,对接收到的来自远程设备的“Insufficient Authentication”错误代码,以带有MITM保护的配对请求进行响应。只有当本地设备本身需要MITM保护时,本地设备才应设置需要MITM保护的标志。
  • 如果在服务请求时未启用加密,收到错误代码“Insufficient Authentication”,并且本地设备当前有一个LTK,那么应该启动加密过程。如果此操作失败(很可能表明远程设备丢失了绑定并且不再拥有LTK),或者本地设备没有正确的LTK,那么应该启动配对过程。IO能力在配对阶段1进行交换,安全级别应由设备的IO能力和MITM需求决定。
  • 如果在服务请求时未启用加密,收到错误代码“Insufficient Encryption”,并且本地设备当前有一个LTK,则应启动加密过程。如果启动加密失败(很可能表明远程设备丢失了绑定并且不再拥有LTK),或者本地设备没有正确的LTK,那么应该启动配对过程。
  • 如果需要LE安全连接认证配对,但远程设备不支持LE安全连接,则服务请求将被中止。

蓝牙规范 Core v5.2 GAP 文档解读第10章 LE安全方面_第3张图片

跨传输密钥生成:

启用加密后,达到了正确的安全级别,两个设备都支持跨传输密钥生成,两个设备都可以执行BR/EDR链接密钥派生。

注意:如果LTK有一个小于16 octets(128 bits)的加密密钥,那么BR/EDR链接密钥将在LTK被掩码遮盖之前派生。

 

数据签名

数据签名用于在未加密连接中的两个设备之间传输经过认证的数据。需要快速连接设置和快速数据传输的服务使用数据签名方法。

如果服务请求指定LE安全模式2,则应使用连接数据签名过程。

 

连接数据签名过程

设备应为在连接中发送已签名数据的每一组对等设备生成一个新的CSRK(Connection Signature Resolving Key)。

使用签名算法对数据进行格式化,其中m为要签名的数据PDU,k为CSRK,SignCounter为计数器值。签名由计数器值和签名算法生成的消息认证码(MAC)组成。每发送一个新的数据PDU,计数器的值应该增加1。

蓝牙规范 Core v5.2 GAP 文档解读第10章 LE安全方面_第4张图片

 

验证签名数据过程

如果不需要加密且CSRK可用(LE 安全模式2),则在发出涉及写操作的服务请求时应使用数据签名过程。

注意:根据加密过程在服务器上成功启用加密,可以决定服务器上存在绑定。更高层协议可能允许客户端不执行身份验证过程。或者,更高层协议可以向客户端发出信号,表明签名检查由于丢失的绑定而失败,然后客户端可以采取行动通知用户或尝试再次配对以重新建立绑定。

接收签名数据的设备应通过执行签名算法对其进行认证。其中m为待认证的数据PDU, k为存储的CSRK,SignCounter为接收的计数器值。如果签名算法计算出的MAC与接收到的MAC不匹配,验证失败,主机应忽略接收到的数据PDU。

如果服务器不响应已签名的写命令,上层应用程序不一定会收到被忽略请求的通知。因此,建议服务器断开链接,以防客户端是试图架设安全攻击的恶意设备。

如果服务器在接收到签名的写命令时没有存储CSRK,应忽略收到的数据PDU。如果服务器不响应已签名的写命令,上层应用程序不一定会收到被忽略请求的通知。虽然断开连接可能足够向用户指示设备需要配对,但是建议实现者考虑向用户提供更详细的指示,说明需要对设备进行配对才能建立CSRK。

如果服务器从客户端接收到一个需要响应的写操作请求(除了签名的写命令或写命令之外),并且没有启用加密,那么服务器应使用错误代码“Insufficient Authentication”进行响应。

如果链接是加密的,服务器从客户端接收请求,需要签名但不需要加密,那么如果链接的加密状态被认为满足签名要求,服务器应完成请求。

根据LE安全模式2的要求,对于给定的链接,签名数据不与加密同时使用。因此,如果客户端希望测试服务器是否仍然绑定,从而启用加密,假设服务器没有按照上面的建议断开链接,则必须在不签名的情况下进行进一步的数据传输。

如果上层决定服务器上不再存在绑定,客户端必须在用户交互之后确认远程设备、重新绑定、执行服务发现和重新配置服务器。如果客户端之前确定服务器没有«Service Changed»特征,或者客户端通过读取«Database Hash»特征确定数据库没有变更,那么服务发现可能会被跳过。

接收设备应通过将接收到的信号计数器与来自同一对等设备的先前接收到的信号计数器进行比较,以防止重放攻击。如果之前使用过信号计数器,则接收设备应忽略数据PDU。

 

授权过程

服务在允许访问之前可能需要授权。授权是用户对过程的继续确认。认证不一定提供授权。认证成功后,用户可以确认授权。

 

加密过程

中心设备可使用[Vol 3] Part H, Section 2.4.4所定义的Encryption Session Setup来加密一个连接,以提供完整性和机密性。
外围设备可使用[Vol 3] Part H, Section 2.4.6中定义的Slave Initiated Security Request来加密一个连接,以提供完整性和机密性。
如果加密过程失败,中心或外围使用可解析的私有地址建立连接,则应立即丢弃当前可解析的私有地址,并生成新的可解析的私有地址。

 

隐私功能

隐私功能提供了一定程度的隐私,使攻击者在一段时间内更难以跟踪设备。

隐私需求 广播者 观察者 外围设备 中心设备
隐私功能 O O O O
不可解析私有地址生成过程 C2 C4 O O
可解析私有地址生成过程 C3 C5 C1 C1
可解析私有地址解析过程 E O C1 C1
可绑定模式 E E C1 C1
绑定过程 E E C1 C1
C1:如果支持隐私功能,则为M,否则为O。
C2:如果支持隐私功能并且不支持可解析私有地址生成过程,则为M,否则为O。
C3:如果支持隐私功能并且不支持不可解析私有地址生成过程,则为M,否则为O。
C4:如果支持隐私功能和主动扫描,并且不支持可解析私有地址生成过程,则为M,否则为O。
C5:如果支持隐私功能和主动扫描,并且不支持不可解析私有地址生成过程,则为M,否则为O。

存在两种隐私模式:

  • 设备隐私模式:当设备处于设备隐私模式时,它只关心自己的隐私。它应该接受来自对等设备的广播包,这些广播包包含它们的ID地址和它们的私有地址,即使对等设备已经分发了它的IRK(Identity Resolving Key)。
  • 网络隐私模式:当设备处于网络隐私模式时,它不应接受来自已分发IRK的对等设备的包含ID地址的广播包。

注意:如果远程设备的GAP服务中不存在可解析私有地址的特性,则远程设备可以在播送中使用ID地址。

设备对不同对等设备可以使用不同的模式。 

设备可以只支持基于主机的隐私,也可以同时支持基于主机和基于控制器的隐私。当设备支持基于控制器的隐私时,主机配置控制器来执行一些隐私功能。

如果设备支持基于控制器的隐私,则应满足以下要求:

  • 主机可以通过添加和删除设备ID来维护解析列表。设备ID由对等设备ID地址和本地与对等设备的IRK对组成。如果本地与对等设备的IRK不适用于特定的设备ID,则应为全0密钥。
  • 如果对等设备在配对过程中提供了一个全0的ID地址,主机应选择一个唯一标识来替代对等设备ID地址。主机应确保提供给控制器的所有ID都是唯一的。
  • 当在控制器中启用地址解析时,从主机到控制器的解析列表中包含的对对等设备的所有引用都应使用对等设备ID地址来完成。同样,如果对等设备地址已解析,则从控制器到主机的所有传入事件都将使用对等设备ID。
  • 如果主机希望处于设备隐私模式,则应通知控制器也这样对待解析列表中的各个对等设备。

 

外围设备的隐私功能

在可连接模式下,启用隐私的外围设备应使用可解析的私有地址作为广播设备地址。

在不可连接模式下,外围设备应使用不可解析或可解析的私有地址。

如果启用隐私的外围设备,有一个存储的绑定,接收到可解析私有地址,主机可以通过执行“可解析私有地址解析过程”来解析私有地址。如果解析成功,主机可以接受连接。如果解析过程失败,则主机应使用错误代码“认证失败”断开连接,或执行配对过程,或执行认证过程。

设备不应在广播数据中发送可用于识别设备的设备名称或唯一数据。

基于控制器的隐私的外围设备隐私功能:

启用隐私的外围设备应使用无向可连接模式或定向可连接模式。只有当对等设备在控制器中支持地址解析时,才可以使用定向可连接模式。

主机应通过在控制器中启用可解析私有地址生成并填充解析列表来启用地址生成。

如果广播数据或扫描响应数据定期更改,那么这些更改应该与私有地址(本地和远程)中的任何更改同步。出于这个目的,主机不应该将私有地址生成任务转移给控制器,而是按照基于主机的隐私功能生成私有地址。

基于主机的隐私的外围设备隐私功能:

启用隐私的外围设备应该使用无向连接模式来创建连接。

主机应使用“可解析私有地址生成过程”或“不可解析私有地址生成过程”生成私有地址。主机应该设置一个定时器。当定时器到期时,主机将生成一个新的可解析的私有地址或不可解析的私有地址。

注意:如果外围设备没有广播,则不需要运行定时器。

 

中心设备的隐私功能

中心设备应该使用一个可解析的私有地址作为发起者的设备地址。

在主动扫描期间,启用隐私的中心设备应使用不可解析或可解析的私有地址。

如果启用隐私的中心设备,有一个存储的绑定,接收到可解析的私有地址,则主机可以通过执行“可解析私有地址解析过程”来解析私有地址。

基于控制器的隐私的中心设备隐私功能:

在控制器中启用地址解析并启用隐私的中心设备可以使用任意连接建立过程。

默认情况下,当控制器解析并生成私有地址时,将使用网络隐私模式。

基于主机的隐私的中心设备隐私功能:

启用隐私的中心设备应该使用通用连接建立过程来创建连接。

主机应使用“可解析私有地址生成过程”或“不可解析私有地址生成过程”生成私有地址。主机应该设置一个定时器。当定时器到期时,主机将生成一个新的可解析的私有地址或不可解析的私有地址。

注意:如果中心设备没有进行扫描或没连接,则不需要运行定时器。


 

广播者的隐私功能

启用隐私的广播者应使用广播模式。广播者应使用可解析的私有地址或不可解析的私有地址。

如果控制器中不支持或禁用地址解析,则以下内容适用于主机:
主机应使用“可解析私有地址生成过程”或“不可解析私有地址生成过程”生成私有地址。主机应该设置一个定时器。当定时器到期时,主机将生成一个新的可解析的私有地址或不可解析的私有地址。

注意:如果广播者没有广播,则不需要运行定时器。

设备不应在广播数据中发送可用于识别设备的设备名称或唯一数据。


 

观察者隐私功能

启用隐私的观察者应使用观察过程。在主动扫描期间,启用隐私的观察者应使用一个可解析的私有地址或者不可解析的私有地址。

如果控制器中不支持或禁用地址解析,则以下内容适用于主机:
主机应使用“可解析私有地址生成过程”或“不可解析私有地址生成过程”生成私有地址。主机应该设置一个定时器。当定时器到期时,主机将生成一个新的可解析的私有地址或不可解析的私有地址。定时器不能长于1小时。

注意:如果观察者没有进行扫描,则不需要运行定时器。


 

随机设备地址

随机设备地址有如下两种子类型:

  • 静态地址

  • 私有地址

随机设备地址的传输是可选的。设备应接受从远程设备接收的随机设备地址。 

私有地址有如下两种子类型:

  • 不可解析私有地址

  • 可解析私有地址

对于一个已绑定的设备应通过可解析私有地址解析过程处理可解析的私有地址,对于要绑定的设备,通过建立连接,然后执行认证过程时也会解析地址。如果双方都可绑定,为本地地址生成可解析的私有地址的设备应始终请求分发其IRK值,除非密钥已预先分发。

当一个设备已经分发了它的IRK之后,当它与一个已经被分发了IRK的对等设备建立连接时,应该使用可解析的私有地址。


 

静态地址

48-bit,随机生成,设备断电重启时会更新。

注意:如果一个设备的静态地址改变,储存在对等设备中的地址将失效,重新连接旧地址的能力会丢失。


 

私有地址

  • 不可解析私有地址:48-bit,随机生成,不需要IRK,与公有地址不等。

  • 可解析私有地址:48-bit,其中前24-bit是由IRK和prand生成的hash,后24-bit为prand。

不可解析私有地址生成过程:

主机可通过[Vol 6] Part B, Section 1.3.2.2中定义的过程生成不可解析私有地址。

可解析私有地址生成过程:

主机有IRK,可通过[Vol 6] Part B, Section 1.3.2.2中定义的过程生成可解析私有地址。

可解析私有地址解析过程:

主机有对等设备的IRK或本地设备的IRK,可通过[Vol 6] Part B, Section 1.3.2.3中定义的过程解析可解析私有地址。


 

加密的BIG

如果设备的服务需要使用未经认证的加密BIG,则应将其安全性设置为LE安全模式3 level 2。如果服务需要使用经过认证的加密BIG,则应将其安全性设置为LE安全模式3 level 3。

当用户启动一个包含广播加密的BIG的服务时,主机应向控制器提供与加密BIG关联的Broadcast_Code。

当用户发起一个需要接收加密的BIS的服务时,设备应使用为该加密的BIS提供的Broadcast_Code。如果设备没有Broadcast_Code或无法获得Broadcast_Code,它应该向用户指出一个适当的错误(例如,Code Unavailable)。

你可能感兴趣的:(蓝牙,协议栈)