在我之前关于密钥生成方法的博客中,我谈到了密钥生成方法 - 如果发起和响应设备满足某些 IO 能力条件,它们会选择 LE 传统蓝牙配对密钥输入方法。
在本博客中,我将介绍与密钥输入的传统配对及其工作原理。
图 1:LE 传统配对、密钥输入
临时密钥 (TK) 和随机数生成
当您使用 LE 传统配对时,配对由生成临时密钥 (TK) 的每个设备执行。
- 如果设备(无论是发起设备还是响应设备)的 IO 功能具有显示功能,则它将显示一个介于“000000”和“999999”之间的随机生成的密钥值。另一个设备应该具有像键盘一样的输入功能,以便用户可以输入为 TK 显示的值
- 如果发起设备和响应设备的IO能力都没有显示能力,而是“仅键盘”,则用户需要保证发起设备和响应设备之间的TK相同。这是密钥输入的特例。
下面是一个名为“Authentication”的设备,想要与 iOS 设备配对,并在其输出界面上显示 TK。然后iOS设备会弹出一个对话框,要求用户输入TK值。
图 2:iOS 设备上的密钥输入
当TK值准备好时,发起设备和响应设备生成一个128位随机数:发起设备为Mrand,响应设备为Srand。
M确认和确认
Mconfirm和Sconfirm是128位确认值,可以使用确认值生成函数c1来计算。有关此功能的详细信息,请参阅:蓝牙核心规范 V4.2,第 3 卷,H 部分,第 2.2.3 节。
对于c1函数,输入参数包括:
- TK
- Mrand 代表 Mconfirm;或 Srand 用于 Sconfirm 计算
- 配对请求命令
- 配对响应命令
- 发起设备地址类型
- 发起设备地址
- 响应设备地址类型
- 响应设备地址
确认
当Mconfirm和Sconfirm准备好时,发起设备向响应设备发送Mconfirm。当响应设备接收到 Mconfirm 时,它会向发起设备发送 Sconfirm。当发起设备收到 Sconfirm 时,它会将 Mrand 发送到响应设备。
响应设备通过重复发起设备使用接收到的 Mrand 值执行的计算来验证 Mconfirm 值。
- 如果响应设备计算出的 Mconfirm 值与从发起设备接收到的 Mconfirm 值不匹配,则配对过程将中止,响应设备将发送带有原因代码“确认值失败”的配对失败命令。
- 如果响应设备计算出的 Mconfirm 值与从发起设备接收到的 Mconfirm 值匹配,则响应设备将 Srand 发送到发起设备。
发起设备通过重复响应设备使用接收到的Srand值执行的计算来验证接收到的Sconfirm值。
- 如果发起设备计算的 Sconfirm 值与从响应设备接收到的 Sconfirm 值不匹配,则配对过程将中止,发起设备将发送带有原因代码“确认值失败”的配对失败命令。
- 如果发起设备计算出的 Sconfirm 值与从响应设备接收到的 Sconfirm 值相匹配,则发起设备将计算短期密钥 (STK) 并告知控制器启用加密。
STK一代
您可以使用蓝牙核心规范 V4.2 第 3 卷第 H 部分第 2.2.4 节中详细介绍的密钥生成函数 s1 生成 STK。
对于s1函数,输入参数包括:
- TK
- srand
- prand
配对设备与 STK 建立加密链接。
在第 4 部分中,我在 LE 安全连接中介绍了一种新的配对算法:数字比较。