BLE_SMP_总结

安全管理定义了配对方法、**分发、以上方法的具体协议和一个被这些方法使用的安全工具箱。
BLE_SMP_总结

介绍

**管理(SM)使用**分发实现通信过程中的认证和加密功能。这意味着,每个设备都要生成和控制它要进行分发的**,并且没有设备能够影响这些**的生成。

配对实现了用于加密链接的**的创建。一个传输特定**的分发,是实现了**的分享,这些**在未来的重链接,验证签名数据和随机地址方案中,用于加密链接。

安全属性

SM提供的安全属性,可以分为以下几类:

  • LE Secure Connectons pairing: 安全连接配对
  • Authenticated MITM protection: 认证的中间人攻击保护
  • Unauthenticated no MITM protection:未认证 无中间人攻击保护
  • No security requirements:无安全需求

LE Secure Connections 配对利用了P-256椭圆曲线算法。

在LE legacy pairing中,认证的中间人攻击保护通过使用passkey 输入配对方法带外配对方法实现。在LE Secure Connections配对中,认证的中间人攻击保护使用passkey输入配对方法或者numeric comparisong或者带外配对方法实现。为了保证认证的中间人攻击保护生成,Authentication Requirements选项必须有MITM保护设置。

未认证的无中间攻击保护不会对中间人攻击进行保护。

对LE legacy pairing来说,因为使用的TK具有可预测性且比较容易建立, 所以没有配对方法能够在配对过程中防止被动窃听者。如果配对信息分发的时候没有被动窃听者,那么所有配对方法提供具有保密性。

配对流程

配对流程

BLE_SMP_总结

配对过程可以分为三个过程,前两个过程是必须的过程,第三个过程是一个可选的传输特定**分发过程。

  • Phase 1 Pairing Feature Exchange: 配对特征交换
  • Phase 2 (LE legacy pairing): Short Term Key(STK) Generation: STK**生成
  • Phase 2 (LE Secure Connections): Long Term Key(LTK) Generation: LTK**生成
  • Phase 3 Transport Specific Key Distribution: 传输特定**分发

Pairing流程的关键在于Phase 2。Pairing method有两种方式,LE legacy pairing 和LE Secure Connections。Phase 1决定了Phase 2使用哪种Pairing method以及认证的方式。

Pairing Request PDU中的SC位决定了设备使用哪种配对方式,当initiator和responder都支持LE Secure Connections时,使用LE Secure Connections,否则使用LE legacy pairing。

在配对特征交换中,设备应该首先交换认证需求和IO能力,用以决定过程2中使用哪种认证方式:

  • Just Works
  • Numeric Comparison(Only for LE Secure Connections)
  • Passkey Entry
  • Out of band(OOB)

从配对特征交换中获得的认证需求,决定了使用LE Secure Connections还是LE legacy pairing。

Phase 3 可能用于实现分发传输**,例如the Identity Resolving Key(IRK)值和identity Adress 信息。无论Phase 2使用什么样的方法,Phase1 和Phase3 都使用相同的算法和流程。

  • Phase 3在一个加密链接上执行,该链接:
  • STK 当使用LE legacy pairing时,在过程2中生成
  • LTK 当时用LE Secure Connections时,在过程2中生成
  • 共享链接**,使用BR/EDR时生成

Phase 1 和Phase 2可以在加密连接上执行,也可以在非加密连接上执行。

Phase 1 配对特征交换

配对特征交换用于交换 IO Capabilities(IO能力)、OOB authentication data availability(OOB认证数据可用性)、authentication requirements(认证需求)、key size requirements(**大小需求)以及哪一种传输特定**被分发。其中IO capabilities、OOB authentication data availability和authentication requirements用来决定Phase2中使用哪种**生成方法。

authentication requirements由GAP设置,包括了bonding类型和MITM(中间人攻击)需求。

IO Capabilities

设备的输入和输出能力结合在一起,组成IO Capabilities。

输入能力如下表所描述:
BLE_SMP_总结

输出能力如下表所描述:
BLE_SMP_总结
独立的输入和输出能力,组合程IO Capability,在配对特征交换中使用,如下表所描述:

BLE_SMP_总结

OOB authentication data(带外认证数据)

带外机制可能被用于传输信息,在配对过程中使用。这些信息应该是AD结构体序列。

如果一个设备具有同等地位的设备带外认证数据,那么带外数据标志应该置位。设备使用同等地位设备带外数据来认证同等设备。在LE legacy 配对中,如果两个设备都有可用的另外一个设备的带外数据,那么带外方法被使用。在LE Secure链接中,如果至少有一个设备具有可用的同等设备带外数据,那么带外方法被使用。

Encryption key size(加***大小)

每个设备都应该有最大和最小**长度参数,可以用来定义加***的最大和最小长度。最大最小**长度参数应该是在7bytes-16bytes之间,1个byte作为一个梯度。这由一个配置文件或者一个设备应用决定。

初始化设备和响应设备的最大**长度中的较小的值,被用作**长度。

初始化和相应设备,都应该检查最后的**大小是否小于最小**大小,如果是,那么设备应该发送配对失败命令,错误码是“Encryption Key Size"。

加密秘钥大小可能被存储,因此可以被任何有最小**长度要求的服务检查。

如果一个**的长度小于16字节,那么**应该通过掩码一个已经生成的**的MSBs来产生,从而提供一个确定的**大小。这个掩码应该在必要生成后且为分发之前做,使用和存储。

Phase 2 **生成

Phase 2有两种不同的**生成方法,LE legacy pairing 和LE Secure Connectons pairing。

  • LE legacy pairing methods使用和生成2个**:
  1. Temporary Key(TK): 一个128bit的临时**,在配对过程中用其生成STK
  2. Short Term Key(STK):一个128bit的临时**,用于加密接下来的链接。
  • LE Secure Connections 使用和生成1个**:

Long Term Key:一个128bit的**,用于加密接下来配对和链接

Phase 1过程中的信息交换,用于决定Phase 2中选择哪种**生成方法。

当使用LE legacy 配对方法时,配对通过每个设备产生1个Temporary Key来实现。产生TK的方法依赖于配对方法选择哪种算法。

**生成算法选择

LE legacy pairing-Just Works

配对过程中,Just Works STK生成方法,无法提供被动窃听者保护,也无法提供中间人攻击保护。配对过程中,如果没有攻击者,那么未来加密过的通信,可以认为是安全的。

LE legacy pairing-Passkey Entry

Passkey Entry STk生成方法,使用了用户输入到设备上的6位数字。这个6位随机生成的passkey,达到了类似一个熵的20bit。

如果一个设备的IO能力是DisplayOnly,或者可以显示passkey,那么该设备应该显示一个随机生成的passkey值,该值的范围是000000-999999。该显示应该保证所有的数字的6位数字都能显示,包括0。另外一个设备应该允许用户输入一个000000-999999的值。

如果Passkey的输入失败,或者被取消,那么设备应该发送配对失败码,错误码是"Passkey Entry Failed"。

例如,如果一个用户输入的passkey是“019655”,那么TK应该是0x00000000000000000000000000004CC7。

passkey Entry方法提供了中间人攻击的保护,因为一个活跃的中间人攻击的成功率只有0.000001。

Passkey Entry STK生成方法提供了非常有限的被动窃听者保护,因为STK依赖的TK的可能的值是有限的。如果配对过程中没有攻击者,那么未来加密的链接可以认为是保密的、认证过的。

Out of band

带外机制可以被用来传输信息,以帮助进行设备发现,例如,设备地址和配对过程中使用的128bit的TK。TK值应该是一个128bit的随机数。

如果OOB通信能够抵抗中间人攻击,那么相关的方法也是能够抵抗中间人攻击的。在OOB方法中,TK的大小不必因为用户的读或者输入受限。因此,OOB方法比Passkey Entry或者Just Works更安全。但是,两个设备需要具有向匹配的OOB接口。

如果一个成功的攻击的活跃中间人机会的可能性是0.000001或者更少,那么可以提供中间人攻击保护。

LE legacy pairing phase 2

LE legacy 配对的phase 2 ,可以分为3个步骤。

  1. TK生成
  2. STK生成

TK生成

Just Works方法

TK=0

Passkey entry方法

Passkey为6位的密码。用户向两个设备输入相同的密码。也可以是一个设备随机显示一个6位的密码,用户在两一个设备上输入该密码。这个短的共享密码,将作为两个设备共同的认证基础,该密码不能重复使用,每次配对时,都需要重新生成。例如,如果用户输入:019655,那么TK应该是0x00000000000000000000000000004CC7 。

OOB方法

带外机制可以被用来信息同喜,帮助进行设备发现,例如设备地址和配对过程中使用的128bit的TK。TK值应该是一个128bit的随机数。

如果OOB通信能够抵抗中间人攻击,那么相关的方法也能够抵抗中间人攻击。同样,在带外方法中,认证参数(TK)的大小,不必受用户合适的输入和类型的限制。因为该原因, OOB方法比Passkey Enter活着Just Works方法更安全。但是,两个设备需要都有互相匹配的OOB接口。

STK生成

  1. 初始设备生成一个128bit的随机数(Mrand0)。

    ​ 初始设备使用确定值生成函数c1(输入参数k设置成TK,输入参数r设置为Mrands,输入参数preq设置为 Pairing Request command)计算一个128bit的确定值(Mconfirm).

    用于确定生成的初始设备和相应设备地址,应该是在链接配置中使用的设备地址。

    响应设备生成一个128bit的随机数(Srand)。

    响应设备使用确定值生成函数c1计算一个128bit的确定值(Sconfirm)。

  2. 初始设备发送Mconfirm给响应设备。响应设备收到Mconfirm是,经Sconfirm发送给初始设备。初始设备收到Sconfirm时,将Mrand发送给响应设备。

  3. 响应设备用收到的Mrand,重复进行初始设备计算Mconfirm的过程,验证Mconfirm值是否正确。如果响应设备计算Mconfirm的值与收到的不同,将放弃该配对过程,并发送配对失败命令,错误码为“Confirm Value Failed"。如果响应设备计算的Mconfirm与其收到的相同,将发送Srand给初始设备。

  4. 初始设备同样使用收到Srand验证收到的Sconfirm值,如果验证错误,则发送配对失败命令,错误码为“Confirm Value Failed"。如果验证正确,初始设备将计算STK并告诉控制器使能加密功能。计算STK使用秘钥生成函数s1。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2EOFO3qQ-1600321325104)(C:\Users\ThinkPad\AppData\Roaming\Typora\typora-user-images\image-20200909162703594.png)]。如果秘钥长度小于128bit,那么STK应该被掩码以匹配秘钥长度。初始设备应该用生成的STK将链接加密,或者如果加密已经被使能,那么执行加密暂停进程。

BLE_SMP_总结

LE Secure Connections pairing phase 2

LE Secure Connections pairing phase2 大致可以分为2个过程:

  1. Public key exchange(公钥交换)
  2. Authentication(认证)

Public key exchange

初始时,每个BLE_SMP_总结
设备生成自己的ECDH公私钥对(过程1)。公私钥对包含了一个私钥和一个公钥。设备A和B的私钥用Ska和SKb来表示,公钥用PKa和PKb来表示。

上图所示,公钥交换过程。配对由初始设备发送它的公钥给接收设备开始。响应设备响应时,将发送它自己的公钥给初始设备。公钥尽管能用来认证设备,但是不代表是安全的。

Authentication stage1-Just Works or Numeric Comparison(认证阶段1 Just Works 或者Numeric Comparison方法)

如果认证请求中MITM bit设置为1,且两个设备都有IO容量用来设置Display或者KeyboardDisplay, Numeric Comparison模型会在配对过程中使用。

下图是Just Works或者Numeric Comparison协议的时序图。BLE_SMP_总结
公钥交换完成后,每个设备选择一个128bit的伪随机数(上图中的第二步)。该值用于防止重放攻击,必须在每次配对时重新生成。这个随机值应该由一个物理的随机源或者一个伪随机数种子生成。

随后,响应设备(Slave设备)计算一个commitment给已经进行过交换的公钥(step 3c),且有自己的nonce值。这个commitment值有这些值的唯一函数计算得出,并被发送给初始设备(step 4).commitment可以防止攻击者在后面的时间里修改这些值。

初始设备和相应设备交换他们的随机数(step5, step6)。初始设备确定commitment(step 6a)。这个时间点失败的话表明有攻击者存在或者其他传输错误最终导致放弃配对。协议可能用新的公钥对,或者不用新的公钥对重复进行,但是必须使用新的随机数。

使用Just Works时, commitment检查(step7a and 7b)不执行,用户不会被展示6-digit 数。

使用Numeric Comparison时, 假设commitment检查成功,两个设备都将计算6 digit的确认值,,这些值向用户显示。用户被期望检查这些6digit的值是否匹配。如果不匹配,协议将放弃,同样,如果协议重复,必须生成新的随机数。

Authentication stage1-Passkey Entry

当SMP IO能力交换表明使用Passkey Entry,Passkey Entry协议被使用。

下图是Paasskey Entry协议时序图。
BLE_SMP_总结

用户向两个设备输入相同的密码。也可能是,该密码在一个设备上生成并显示,然后用户在另外一个设备上输入该密码(step2)。这个短的共享密码,将作为两个设备共同的认证基础。该密码可以在每个配对过程中随机生成,不能重复使用。静态密码不能使用,因为可能无法满足链接安全。

因为6位的passkey是20bit(999999=0xF423F),step3到8 将重复20次。如果设备允许输入一个短的passkey,那将会在passkey加上前缀0,比如 1234 加前缀后未001234.

在step3-8的流程中,每一次都提交其passkey的每个bit,使用一个长随机数(128bit),发送这个随机数的hash值,passkey的每个bit以及自己的公钥。设备轮流公示他们的commitments,直到整个passkey完全循环完。第一个为passkey的一个bit进行公示承诺的设备,有效的公示了该bit,另外一个设备必须做出相应,公示passkey的相同bit,否则,第一个设备在passkey不再有bit公示时,放弃协议。

这个“逐步进行公示”的方法,在有中间人攻击的情况下,超过1个bit的passkey的泄漏。一个获得了paskkey的一部分的中间人攻击者,在协议失败之前,只能收到passkey的一个不正确的bit。因此,一个占据了intiating侧的中间人攻击者,那么另外一侧的设备,通过一个简单的成功率为0.000001的简单的暴力推测,仅能获得最多两个bit的优势。

过程中的长随机数包括在承诺数据的哈希中,这样做可以让暴力**变得很难,甚至在协议失败后。公共的Diffie-Hellman值被包含用来将Passkey协议和初始的ECDH**交换绑定。

Authentication stage1-Out of Band

当至少一个设备收到认证信息,并且表明OOB数据标识参数包含在SMP Pairing Request和SMP Pairing Response中时,使用带外协议。设备发现中首先使用带外传输,接下来跟着的认证参数的传输使用带外传输不被支持。时序如下图:
BLE_SMP_总结

Principle of operation**

如果两个设备都可以通过带外通道发送或者接受数据,那么完整的认证将基于OOB的公钥交换。如果OOB通信是单向的,那么接受OOB通信的设备认证将基于设备获得的随机数r,该随机数通过OOB发送。这种情况下,随机数r在没次刷新时都要从新生成,或者发送随机数的设备其访问必须受限。如果随机数r不是由设备发送,那么它将被接受OOB信息的设备假定为0.

Roles of A and B

OOB认证过程1的协议,对A和B角色来讲,是对称的。不需要总是设备A初始化,在OOB通信中自动解决不对称问题。

Order of steps

公钥交换必须在验证过程5之前发生。在上面流程图中,设备间带内的公钥交换在OOB通信(step4)之前完成。但是,当配对由OOB接口初始化时,公钥交换在OOB通信之后进行。

ra和rb的值:如果OOB接口方向不能再OOB通信发生之前进行验证,设备应该生成并且通过OOB接口发送一个随机数r。每隔设备都应遵循下面的规则,用以设置自己的随机数r,和另外一个设备的r:

  1. 开始时,设备的r被设置为随机数,另外一个设备的r设置为0.

  2. 如果设备已经收到OOB,那么它将另外一个设备的r值设置为接收到的值。

  3. 如果远端设备的OOB数据flag(SMP 配对请求和相应发送的)被设置为“OOB Authentication

    data not present",那么设备将自己的r设置为0.

Authentication stage2 and long term key calculation

认证的第二个阶段,确定两个设备已经成功完成了交换。这个阶段在所有协议中都是相同的。

BLE_SMP_总结

每个设备使用初始交换的值和新分发的共享**,计算MacKey和LTK(step9)。然后每个设备计算一个新的确定值,包含了开始交换的值和新的的MacKey(step10a,10b)。初始设备发送他自己的确定值,该值由响应设备做检查。(step11) 。如果检查失败,表明初始设备还没有确认配对,协议必须放弃。响应设备然后发送它自己的确定值,由初始设备检查。失败表明响应设备还没有确认配对,协议应该放弃。

参考文献

二个阶段,确定两个设备已经成功完成了交换。这个阶段在所有协议中都是相同的。

[外链图片转存中…(img-Ic4hjoZt-1600321325109)]

每个设备使用初始交换的值和新分发的共享**,计算MacKey和LTK(step9)。然后每个设备计算一个新的确定值,包含了开始交换的值和新的的MacKey(step10a,10b)。初始设备发送他自己的确定值,该值由响应设备做检查。(step11) 。如果检查失败,表明初始设备还没有确认配对,协议必须放弃。响应设备然后发送它自己的确定值,由初始设备检查。失败表明响应设备还没有确认配对,协议应该放弃。

参考文献

《Core_v5.1》