SSP的配对过程由于可以根据设备的IO能力选择不同的关联模型,因此十分灵活,其提供了四种方式:Numeric Comparison、Passkey Entry、Just Works以及Out of Band (OOB) 。这里关联方式的选择实质上对后面的流程是有一定影响的,如Just Works就不需要对Link Key进行验证。
Numeric Comparison : 数值比较是针对两种蓝牙设备都能显示六位数字并允许用户输入“是”或“否”回答的情况而设计的。在配对过程中,用户会在每台显示器上看到一个六位数的数字,如果数字匹配,则在每台设备上回答“是”。否则用户回答no,配对失败。这与传统配对中使用PIN的一个关键区别是,显示的数据不用作生成链接密钥的输入。因此,能够看到(或捕获)显示值的窃听者无法利用它来确定最终链路或加密密钥。
Passkey Entry :Passkey Entry设计用于一个蓝牙设备有输入能力(例如键盘),而另一个设备有显示但没有输入能力的情况。在这种模型中,只有显示屏的设备显示一个6位数的数字,然后用户在具有输入能力的设备上输入该数字。与数值比较模型一样,该交易中使用的6位数字没有包含在链路密钥生成中,对窃听者没有任何用处。
Just Works:是为至少一个配对设备既没有显示器也没有键盘输入数字(例如,耳机)的情况而设计的。它执行认证阶段1的方式与Numeric Comparison相同,只是没有显示。用户需要在不验证两个设备上计算出的值的情况下连接,因此Just Works不提供中间人攻击保护。
Out of Band (OOB) :为支持常见的额外的无线(例如,近场通信(NFC))或有线技术设备设计的,用于设备发现和密码交换。在NFC的情况下,OOB模型允许设备通过简单地“点击”一个设备与另一个设备进行配对,然后用户通过一个按钮接受配对。值得注意的是,为了使配对过程尽可能安全,OOB技术应该被设计和配置为减轻窃听和中间人攻击。
安全模式4要求蓝牙服务使用安全连接(第4级)、已验证链接密钥(第3级)、未验证链接密钥(第2级)或完全不安全(第1级)指定一个已验证链接密钥。在上述的关联模型中,除了Just Works模型之外,所有模型都提供已验证链接密钥。
下图是中描述的SSP的链接密钥Link Key的生成,这里使用的是ECDH公私钥对来进行生成,区别与Lagacy LSC 使用PIN生成。
每个设备都会生成自己的ECDH公私密钥对。当两个设备都支持安全连接时,使用P-256椭圆曲线,否则使用P-192椭圆曲线。每台设备将公钥发送给另一台设备。然后,设备执行依赖于关联模型的第1阶段认证。在此之后,第一个设备计算确认值E1并将其发送给第二个设备,后者检查该值。如果成功,第二台设备将其确认值E2发送给第一台设备。假设E2确认值正确,两个设备都会计算出链接密钥。
Simple Pairing配对过程如图所示,主要由下面四部分完成:
- Pairing Feature Exchange
用于交换双方有关鉴权的需求(authentication requirements),以及双方具有怎么
的人机交互能力(IO capabilities)。其中最重要的是IO capabilities exchange。
IO的能力可以归纳为如下的六种:
- NoInputNoOutput
- DisplayOnly
- NoInputNoOutput1
- DisplayYesNo
- KeyboardOnly
- KeyboardDisplay
上述的IO能力决定了后续的鉴权方式。
2. Public key exchange
两个设备之间交换Public key。 一旦设备收到对端设备的公钥,它就可以开始计算Diffie Hellman Key(DHKey)。耗时较多,应该尽早开始,以便用户交互可以隐藏计算时间。 在步骤8之前不需要DHKey。
当 Public key的长度大于DM1包的长度时,要使用专门的PDU来进行数据发送。
设备验证阶段如下图所示,注意与LSC不一样的地方在于,SSP的设备双方都是申验者和验证者,即通信的设备既会验证对方的Link Key,也会被对方验证本方的Link Key,只要有一方验证失败,则这整个阶段都验证失败。而LSC只有一方(Central)是验证者.
接下来的加密密钥的生成以及加密算法如下图所示,可以看到其大致与LSC一致,不过采用的算法完全不一样,这里采用h3来生成加密密钥,使用AES-CCM来加密数据包。