Security Manager介绍
主要目的是为LE设备(LE only或者BR/EDR/LE)提供建立加密连接所需的key(STK or LTK)。定义了如下几类规范:
- 将生成加密key的过程称为Pairing(配对),并详细定义了Pairing的概念、操作步骤、实现细节等。
- 定义一个密码工具箱(Cryptographic Toolbox),其中包含了配对、加密等过程中所需的各种加密算法。
- 定义一个协议(
Security Manager Protocol
,简称SMP
),基于L2CAP连接,实现master和slave之间的配对、密码传输等操作。
Pairing(配对)
在SM的规范中,配对是指"Master和Slave通过协商确立用于加(解)密的key的过程",主要由三个阶段组成:
- 阶段1 ,"Pairing Feature Exchange",用于交换双方有关鉴权的需求(authentication requirements),以及双方具有怎么的人机交互能力(IO capabilities)。
- 阶段2 ,通过SMP协议进行实际的配对操作,根据阶段1 "Feature Exchange"的结果,有两种配对方法可选:LE legacy pairing 和 LE Secure Connections。
- 阶段3,经过阶段1和阶段2之后,双方已经产生了加密key,因而可以建立加密的连接。加密连接建立后,可以互相传送一些私密的信息,例如Encryption Information、Identity Information、Identity Address Information等。
Pairing Feature Exchange
配对的过程总是以Pairing Request和Pairing Response的协议交互开始,通过这两个命令,配对的发起者(Initiator,总是Master)和配对的回应者(Responder,总是Slave)可以交换足够的信息,以决定在阶段2使用哪种配对方法、哪种鉴权方式、等等
在此阶段,配对的双方以下面的原则选择鉴权方法:
- 如果双方都支持OOB鉴权,则选择该方式(优先级最高)。
- 否则,如果双方都支持MITM鉴权,则根据双方的IO Capabilities(并结合具体的配对方法),选择合适的鉴权方式。
- 否则,使用Just work的方式(不再鉴权)。
鉴权方式
所谓的鉴权(Authentication),就是要保证执行某一操作的双方(或者多方,这里就是配对的双方)的身份的合法性。对BLE来说,主要有两大类:
1、OOB(out of band)
由配对的双方,在配对过程之外,额外的交互一些信息,并以这些信息为输入,进行后续的配对操作。这些额外信息也称作OOB(out of band)。
2、需要人参与进来
手机A向手机B发起配对操作的时候,手机A在界面上显示一串6位数字的配对码,并将该配对码发送给手机B,手机B在界面上显示同样的配对码,并要求用户确认A和B显示的配对码是否相同,如果相同,在B设备上点击配对即可配对成功。
这种需要人参与的鉴权方式,在蓝牙协议里面称作MITM(man-in-the-middle)authentication,不过由于BLE设备的形态千差万别,硬件配置也各不相同,有些可以输入可以显示、有些只可输入不可显示、有些只可显示不可输入、有些即可输入也可显示,因此无法使用统一的方式进行MITM鉴权。
2.1、Passkey Entry
通过输入配对码的方式鉴权,常见于SSP(安全简单配对)中PC和键盘配对场景。
2.2、Numeric Comparison
两个设备自行协商生成6个数字,并显示出来(要求两个设备具有显示能力),用户比较后进行确认(一致,或者不一致,要求设备有简单的yes or no的确认能力)。
2.3、Just Work
没有需要额外输入的信息,现阶段是很常见和简单的一种方式。
配对方法
BLE协议栈支持两种可选的配对方法:LE legacy pairing 和 LE Secure Connections
1、LE legacy pairing
- LE legacy pairing最终生成的是Short Term Key(双方共享),生成STK之后,用STK充当LTK,并将EDIV和Rand设置为0,去建立加密连接。
- 加密连接建立之后,双方可以自行生成Long Term Key(以及相应的EDIV和Rand),并通过后续的阶段三将它们共享给对方,以便后面重新建立加密连接所使用:master和slave都要生成各自的LTK/EDIV/Rand组合,并共享给对方,以便后续Master或者Slave重新发起连接。
- STK的生成也比较简单,双方各提供一个随机数(MRand和SRand),并以TK为密码,执行S1加密算法即可。
- TK是鉴权的过程中得到的,根据在阶段一选择的鉴权方法,TK可以是通过OOB得到,也可以是通过Passkey Entry得到,也可以是0(Just Work)
注意: LE legacy pairing只能使用OOB、Passkey Entry或者Just Work三种鉴权方法(Numeric Comparison只有在LE Secure Connections时才会使用)
2、LE Secure Connections Pairing
LE Secure Connections pairing利用了椭圆曲线加密算法(P-256 elliptic curve),具体可以细节和参考郭睿 和 汤南 做的channel 通道加密,涉及到此加密算法。
- 可以使用OOB、Passkey Entry、Just Work以及Numeric Comparison四种鉴权方法。其中Numeric Comparison的流程和Just Work基本一样。
- 可以直接生成LTK(双方共享),然后直接使用LTK进行后续的链路加密,以及重新连接时的加密。
- Transport Specific Key Distribution
加密链路建立之后,通信的双方就可以传输一些比较私密的信息。
BLE的SMP的一些Key相关定义
Long Term Key (LTK) | 加密链路用,128-bit |
---|---|
Encrypted Diversifier (EDIV) | 在LE legacy pairing过程中,用于识别LTK分发,16-bit |
Random Number (Rand) | 在LE legacy pairing过程中,用于识别LTK分发,64-bit |
Identity Resolving Key (IRK) | 用于生成和解析random address用的,128-bit |
常见配对失败的错误
详细可参考 BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 3, Part H Table 3.7: Pairing Failed reason codes 。这里简单列举下常见的错误:
1、Unspecified Reason (点击配对框取消)
2、PIN Or Key Missing (加密LTK丢失导致加密失败)
Man-In-The-Middle Protection
当想要让两个设备相连时,其实两个设备并没有直接相互连接,而是在不知不觉中都连接到了第三个(攻击性)设备,这个设备扮演了他们试图配对的设备的角色,从而发生中间人(MITM)攻击。
中间人在中间进行转发,以使双方设备错误的认为已经相互连接。此时,双方交换的信息都会被中间人所监听,甚至可以修改。
为了避免MITM攻击,提供了两种辅助的数字方法:numerical comparison 或者 passkey entry(passkey entry典型情景是PC与键盘,一个有输入能力但无显示能力,对端设备则有输出能力,PC显示6位十进制数字,键盘输入这组数字,输入正确则成功)
如果有认证动作,双方通过数字比较,就可以知道连接的设备是不是"预期设备",因为,"同名攻击者"与两个设备相连时,产生的数值是不同的。
传统的SSP 配对中 PIN CODE方式也可以抵御MITM攻击,但是由于可以通过穷举PIN码的方式进行破译,因此,无法抵御被动监听攻击。