蓝牙核心规范(V5.2)7.10-深入详解之SMP(安全管理协议)-BLE安全性(3)
4.密钥分配和生成
蓝牙低能耗设备可以将密钥从从设备分配到主设备,并从主设备分配到从设备。当使用LE遗留配对时,以下密钥可以从从机分配到主机:
- LTK使用加密信息命令
- EDIV和Rand使用主识别命令
- 公共设备或静态随机地址使用身份地址信息命令
- CSRK使用签名信息命令
当使用LE安全连接时,以下密钥可以从从节点分发到主节点:
- 使用身份信息命令的IRK
- 公共设备或静态随机地址使用身份地址信息命令
- CSRK使用签名信息命令
当使用LE传统配对时,主节点可以将以下键分配给从节点:
- LTK使用加密信息命令
- EDIV和Rand使用主识别命令
- 使用身份信息命令的IRK、
- 公共设备或静态随机地址使用身份地址信息命令
- CSRK使用签名信息命令
当使用LE安全连接时,主节点可以将以下密钥分配给从节点:
- 使用身份信息命令的IRK
- 公共设备或静态随机地址使用身份地址信息命令
- CSRK使用签名信息命令
在传输特定密钥分配阶段要分配的密钥显示在配对请求和配对响应命令的密钥分配字段中。
LE的配对请求和配对响应命令中的启动器密钥分发/生成字段和响应器密钥分发/生成字段的格式如图3所示。
密钥分配/生成字段具有以下标志:
- 在LE传统配对中,EncKey是一个1位字段,它被设置为1,以表示设备应使用加密信息命令分发LTK,然后使用EDIV和Rand使用主识别命令分发LTK。在LE安全连接配对中,当SMP在LE传输上运行时,应忽略EncKey字段。EDIV和Rand应设置为零,不得进行分配。当SMP在BR/EDR传输上运行时,EncKey字段被设置为1,以指示设备希望从BR/EDR链接密钥派生LTK。当启动器和响应器密钥分发/生成字段中的两个设备都将EncKey设置为1时,应使用从BR/EDR链接密钥计算LTK的程序。
- IdKey是一个1位字段,它被设置为1,以指示设备应使用身份信息命令分发IRK,然后使用其公共设备或使用身份地址信息的静态随机地址。
- SignKey是一个1位的字段,它被设置为1,以表示设备应使用签名信息命令来分发CSRK。
- LinkKey是一个有1位的字段。当SMP在LE传输上运行时,LinkKey字段被设置为1,以指示设备希望从LTK派导出链接密钥。当启动器和响应器密钥分发/生成字段中的两个设备都将链接密钥设置为1时,应使用从LTK计算BR/EDR链接密钥的程序。不支持LE安全连接的设备应将此位设置为零,并在接收时忽略它。当SMP在BR/EDR传输上运行时,将保留链接密钥字段以备将来使用。
主机使用“配对请求”命令中的“启动器密钥分发/生成”字段来向启动器请求哪些密钥被分发或生成给响应器。“配对请求”命令中的“响应器密钥分发/生成”字段由主机用来请求响应器向发起器分发或生成哪些密钥。来自从机的“配对响应”命令中的“启动器密钥分发/生成”字段定义了启动器应向响应器分发或生成的密钥。来自从机的“配对响应”命令中的“响应器密钥分配/生成”字段定义了响应者应向发起者分发或生成的密钥。从程序不得设置为主程序在配对请求命令的启动器密钥分配/生成或响应器密钥分配/生成字段中的启动器密钥分配/生成或响应器密钥分配/生成字段中设置为零的任何标志。
使用LE传统配对时,密钥的分配顺序如下:
- 从机:LTK
- 从机:EDIV和Rand
- 从机:IRK
- 从机:BD ADDR
- 从机:CSRK
- 主机:LTK
- 主机:EDIV和Rand
- 主机:IRK
- 主机:BD ADDR
- 主机:CSRK
当使用LE安全连接时,密钥应按以下顺序分配:
- 从机:IRK
- 从机:BD ADDR
- 从机:CSRK
- 主机:IRK
- 主机:BD ADDR
- 主机:CSRK
如果没有被分配到密钥,则不应发送要分发该密钥的命令。
注意:如果未分发一个密钥,则使用此密钥的功能将不可用。例如,如果LTK没有从从机分发到主机,那么主机就无法加密与该从服务器的未来链接,因此必须再次执行配对。
注:启动器应根据更高层规范所需的功能来确定所需的密钥。例如,如果启动器确定在与该从机的未来链接中需要加密,那么启动器必须通过在“请求配对请求”命令的响应器密钥分发/生成字段中将EncKey位设置为1来请求分发从属的LTK。
如果在启动器密钥分发/生成和响应密钥分发/生成字段中将Enc密钥、标识密钥和标识密钥设置为零,则不得分发或生成密钥,在使用LE遗留连接配对时和使用LE安全连接配对时使用生成的STK对链接进行加密。
密钥分发在设备接收到该密钥的基带确认时发送最终密钥时完成,并且在接收设备接收到被分发的最终密钥时完成。
5.加密信息
加密信息在LE传统配对传输特定密钥分发中用于分发在加密未来连接时使用的LTK。加密信息命令如图所定义。
只有当使用生成的STK加密或重新加密链接时,才能发送加密信息命令。
以下是数据字段:
长期密钥(16个字节)
6.主标识
主标识用于LE传统配对传输特定密钥分发阶段来分发EDIV和Rand,这些EDIV和Rand用于加密未来的连接。
只有当链接使用生成的STK进行加密或重新加密时,才能发送主识别命令。
7.身份信息
身份信息用于传输特定密钥分配阶段来分发IRK。
只有使用生成的密钥加密或重新加密时,才能发送身份信息命令。
注:全零身份解析密钥数据字段表示设备没有有效的可解析的私有地址。
8.身份地址信息
身份地址信息在传输特定密钥分配阶段分发其公共设备地址或静态随机地址。
只有使用生成的密钥加密或重新加密时,才应发送身份地址信息命令。
数据字段为:
AddrType(1个字节)
如果BD_ADDR是公共设备地址,则AddrType应设置为0x00。如果BD_ADDR是一个静态随机设备地址,则AddrType应设置为0x01。
BD_ADDR(6个字节)
此字段设置为分发设备的公共设备地址或静态随机地址。
9.签名信息
签名信息在传输特定密钥分发中用于分发设备用于签名数据的CSRK。
只有使用链接的密钥使用生成的密钥加密或重新加密时,才能发送签名信息命令。
10.安全请求
从程序使用“安全请求”命令来请求主服务器使用所请求的安全属性启动安全。
将使用以下数据字段:
- 点赞
- 收藏
- 关注作者
评论(0)