使用蓝牙网状网络进行设计:隐私和安全
在本系列文章的第 1 部分和第 2 部分中,我们讨论了蓝牙 Mesh 架构以及消息如何通过蓝牙 Mesh 网络进行通信。在当今互联的世界中,安全性是每个设计中的关键要素。因此,对于由蓝牙 Mesh 驱动的物联网应用来说,绝对安全并提供可靠的功能非常重要。
蓝牙 Mesh 设备上的安全实施是蓝牙 SIG 的强制性要求,不能禁用。请注意,在非网状 BLE 中,点对点连接安全实施是可选的。将设备添加到蓝牙 Mesh 网络和蓝牙 Mesh 网络内的数据交换的配置过程是精心设计的,安全性是重中之重。蓝牙 Mesh 协议在多个层面保护网络免受各种可能的威胁,例如:
- 在配置期间使用椭圆曲线 Diffie-Hellman (ECDH) 密钥交换协议可以防止中间人 (MITM) 攻击。
- 使用序列号防止重放攻击。
- 密钥刷新(列入黑名单)程序可防止来自废弃设备的垃圾桶攻击。
蓝牙 Mesh 拓扑是根据强制安全密钥的要求构建的,这些密钥可以在堆栈的多个层保护网络。让我们一一介绍每个安全和隐私功能。
配置:将未配置的设备添加到蓝牙网状网络
使用配置过程将蓝牙 Mesh 设备添加到 Mesh 网络。提供的网格设备称为节点,执行提供的设备称为提供者。通常,移动电话充当供应商。它创建一个网状网络,分配一个网络密钥和其他所需的密钥。未配置的 Mesh 设备会使用配置过程添加到蓝牙 Mesh 网络中。供应商还配置供应的网状网络节点并控制网状网络中蓝牙网状网络节点的功能。
供应协议可以使用两种不同的供应承载:PB-ADV(ADV承载)或PB-GATT(GATT承载)。今天的移动设备还不支持 PB-ADV 承载。为此,提供过程是通过PB-GATT承载完成的。
未配置的网格设备在开机后开始广播。供应器扫描未供应的设备并与未供应的设备建立标准 BLE 连接(假设 PB-GATT)。然后它使用椭圆曲线 Diffie-Hellman (ECDH) 协议共享密钥。因此使用ECDH的密钥交换是非常安全的。
然后,两个设备都使用交换的密钥创建会话密钥。会话密钥用于加密网络密钥、设备密钥(本文以下部分将讨论密钥类型)、IV 索引和单播地址,所有这些都被发送到提供的蓝牙网状网络节点。成功配置后,Mesh 节点将进行配置过程,在此过程中,Mesh 节点的功能与配置者共享。 Provisioner 将应用程序密钥分配给配置的节点。每个网格节点可以有多个应用程序密钥,因此每个应用程序密钥必须使用称为密钥绑定的过程与特定的网格模型绑定。这样,网格堆栈就知道要为指定的网格模型使用哪些应用程序密钥。
图 1 显示了当带有 iOS 网格助手应用程序的智能手机尝试配置使用 CYBT-213043-MESH 评估套件实现的可调光灯泡时的配置序列。
点击查看大图
图 1:可调光灯泡的配置过程。 (来源:赛普拉斯)
从图中可以看出,可调光灯泡传输未配置的设备信标。当供应商尝试添加设备时,可调光灯泡会显示在未供应设备列表中。当用户在 iOS 网格应用中点击 Dimmable Light 设备时,配置过程开始。
手机发送一个供应邀请,可调光灯泡会响应一些功能,例如支持的元素数量、支持的安全算法、使用带外 (OOB) 的公钥的可用性以及输入/输出输入/输出能力显示用户价值。基于可调光灯泡的功能,ECDH 公钥使用 OOB 方法或使用蓝牙链接进行交换。然后进行身份验证。
可调光灯泡通过身份验证后,供应器通过 AES-CCM 加密链接发送供应数据。一旦配置数据(网络密钥、设备密钥、IV 索引、单播地址等)被发送到可调光灯泡,配置过程就完成了。 Provisioner 现在可以配置可调光灯泡(此序列图中未显示)。
网络密钥、应用程序密钥和设备密钥
拥有网络密钥允许节点解密和验证网络层,从而可以在网络内中继消息。网络加密密钥和私钥源自网络密钥。需要注意的是,即使网络中的所有节点都接收并转发网状中继消息,实际应用程序数据也无法使用网络密钥解密。只有设备拥有相应的应用密钥才能解密应用数据。
网络密钥 :一个节点可以拥有一个或多个网络密钥。这允许在单个蓝牙网状网络中创建多个子网。例如,考虑一个多层停车系统。将每个级别拆分为自己的子网可能会有所帮助。这种划分避免了跨所有级别的消息中继,并将中继的消息限制在所需的级别。
应用密钥 :应用程序密钥在网状网络内的设备子集之间共享。通常,这些设备具有相似的功能。例如,客厅中的所有灯泡可能共享相同的应用程序密钥,而运动传感器或锁将具有单独的应用程序密钥。改变灯泡状态的网格消息只能由客厅中的灯泡解密(即,这些是唯一包含所需应用程序密钥的设备)。
设备密钥: 设备密钥由供应商分配给每个供应的网格节点。这允许唯一标识网格节点。设备密钥仅在供应商的节点配置过程中使用。
节点移除(密钥刷新、黑名单)
重要的是要防止黑客使用从作为目标网状网络一部分的故障或已处置的网状节点获得的安全密钥对特定网状网络发起攻击。这种攻击通常称为垃圾桶攻击。为避免此类攻击,Bluetooth SIG 定义了密钥刷新程序。这个过程可以由 Provisioner 发起,将特定节点放入黑名单。密钥刷新过程向网状网络中除黑名单中的设备外的所有设备发布新的网络密钥、应用程序密钥和所有必要信息。列入黑名单的设备拥有的任何密钥都无法再用于访问网状网络。
隐私(消息混淆):
隐私是每个人的重要方面。蓝牙 Mesh 中的隐私是使用隐私密钥解决的。如前所述,隐私密钥源自网络密钥。蓝牙 Mesh 使用此私钥来混淆消息头值,例如源地址。如果源地址被混淆,这将阻止攻击者根据其源地址跟踪消息。
重放攻击
攻击者可以选择通过捕获空中消息并多次重新发送相同的数据包来破坏网状网络。想象一下攻击者捕获消息以解锁门锁。如果攻击者能够成功捕获无线消息以解锁门,则这将提供对门的访问。显然,这将对人们及其财产构成巨大威胁。为了解决这个问题,Bluetooth SIG 在每个网络消息中提供了两个字段:初始化向量索引(IV index)和序列号(SEQ)。
每次节点发布消息时,序列号都会增加。网格节点将丢弃序列号等于或小于最后处理的有效网格消息的网格消息。要更改序列号,攻击者必须拥有解码和加密消息所需的所有密钥。这些密钥仅对预期设备可用。因此,即使攻击者试图回复该消息,它也会被目标节点丢弃。 IV 索引是网状网络消息中的一个单独字段。消息中IV索引的值必须等于或大于最后处理的有效mesh消息,否则该消息将被丢弃。
简而言之,Bluetooth Mesh 中的 Provisioning 过程只允许将受信任的设备添加到网络中,并避免任何中间人攻击。网络密钥等安全密钥允许创建子网,而应用程序密钥允许网状消息仅由特定应用程序解码。密钥刷新程序实现安全节点移除并防止垃圾桶攻击。通过向每条消息添加序列号来避免重放攻击。消息混淆保护发件人的身份。所有这些功能使蓝牙 Mesh 非常安全和私密。
在本系列文章的下一部分中,我们将讨论为您的应用选择蓝牙 Mesh 设备时需要考虑的要点。
嵌入式