BLE MESH(四)安全概述
- 一、安全的重要性
- 二、蓝牙MESH网络的安全性是强制性的
- 三、蓝牙MESH网络安全基础
- 四、关注点和安全密钥分离
- 五、区域隔离
- 六、节点移除、密钥刷新和垃圾桶攻击
- 七、隐私
- 八、重放攻击
- 九、密码学工具箱
- 十、AES-CMAC
- 十一、AES-CCM
- 十二、SALT Generation
- 十三、其他安全功能
- 向前!
一、安全的重要性
与物联网 (IoT) 相关的讨论最多的问题之一是安全性。从农业到医院,从住宅智能家居到商业智能建筑,从发电站到交通管理系统,物联网系统和技术将触及我们生活的世界的许多地方。物联网系统中的安全漏洞可能会带来灾难性的后果。
蓝牙®MESH网络从头开始设计,将安全性作为第一要务。在本文中,您将大致了解关键的安全功能和解决的安全问题。该系列的其他文章将更详细地研究蓝牙MESH网络安全的各个方面。
二、蓝牙MESH网络的安全性是强制性的
蓝牙®BLE (LE) GATT 设备可以实施蓝牙核心规范中定义的一系列安全措施。
产品设计人员有责任决定需要哪些安全措施,并且可以决定完全不采用任何可用的安全功能。
换句话说,BLE蓝牙 GATT 中的安全性是可选的。如果我们谈论的是单个设备的安全性及其与另一台设备的连接,那么这很有意义,前提是产品设计人员正确执行了他们的风险评估。但是,蓝牙MESH网络中的安全性不仅仅涉及单个设备或对等设备之间的连接的安全性。它涉及整个设备网络和网络中各种设备组的安全性。
因此,蓝牙MESH网络的安全性是强制性的。
三、蓝牙MESH网络安全基础
以下基本安全声明适用于所有蓝牙MESH网络:
方法 | 说明 |
加密和认证 | 所有蓝牙MESH网络消息都经过加密和验证。 |
关注点分离 | 网络安全、应用程序安全和设备安全是独立解决的。请参阅下面的关注点分离。 |
区域隔离 | 蓝牙MESH网络可以划分为子网,每个子网在密码上是不同的,并且彼此安全。 |
按键刷新 | 在蓝牙MESH网络的生命周期内,可以通过密钥刷新程序更改安全密钥。 |
消息混淆 | 消息混淆使跟踪网络内发送的消息变得困难,因此,提供了一种隐私机制,使跟踪节点变得困难。 |
重放攻击保护 | 蓝牙MESH网络安全保护网络免受重放攻击。 |
垃圾桶攻击防护 | 节点可以安全地从网络中删除,以防止垃圾箱攻击。 |
安全设备配置 | 将设备添加到蓝牙MESH网络以成为节点的过程是一个安全的过程。 |
四、关注点和安全密钥分离
蓝牙®MESH网络安全的核心是三种类型的安全密钥。这些密钥为蓝牙MESH网络的不同方面提供了安全性,并实现了蓝牙MESH网络安全性的关键功能,称为关注点分离。
考虑充当继电器的MESH灯。作为中继,它可能会发现自己处理与建筑物的蓝牙MESH门窗安全系统相关的消息。灯没有访问和处理这些消息细节的业务,但它确实需要将它们中继到其他节点。
为了处理这种潜在的利益冲突,蓝牙MESH网络使用称为AppKeys的不同安全密钥来保护网络层的消息,而这些密钥用于保护与特定应用程序(例如照明、物理安全、加热等)相关的数据。
蓝牙MESH网络中的所有节点都拥有一个或多个网络密钥(NetKey),每个网络密钥对应一个子网,该子网可能是主要子网。它拥有使节点成为网络成员的网络密钥。网络加密密钥和隐私密钥直接从 NetKey 派生而来。
拥有 NetKey 允许节点解密和验证网络层,以便可以执行网络功能,例如中继。它不允许解密应用程序数据。
每个节点还有一个唯一的安全密钥,称为设备密钥或 DevKey。DevKey 用于节点的供应和配置。
五、区域隔离
拥有主NetKey定义了蓝牙®MESH网络的成员资格并授予其访问权限。但也可以将网络划分为不同的子网,每个子网都有自己的子网密钥。这意味着只有拥有给定子网密钥的设备才能与属于该子网成员的其他设备通信。也可以临时创建和分配子网密钥。一个很好的例子是将不同酒店房间中的节点彼此隔离。
六、节点移除、密钥刷新和垃圾桶攻击
如上所述,节点包含各种蓝牙®MESH网络安全密钥。如果节点出现故障并需要处理,或者如果所有者决定将节点出售给另一个所有者,则重要的是不能使用该设备及其包含的密钥来对该节点的网络发起攻击.
蓝牙MESH网络可确保安全处理设备
定义了从网络中删除节点的过程。该provisioner应用程序用于节点添加到拒绝列表,然后一键刷新程序被启动。
密钥刷新程序发布网络中的所有节点,除了拒绝列表成员的节点、新的网络密钥、应用程序密钥和所有相关的派生数据。换句话说,构成网络和应用程序安全基础的整套安全密钥被替换。
因此,从网络中删除并包含旧 NetKey 和旧 AppKey 集的节点不再是网络成员,不会构成威胁。
七、隐私
从 NetKey 派生的隐私密钥用于混淆网络 PDU 标头值,例如源地址。混淆确保不能使用随意的、被动的窃听来跟踪节点和使用它们的人。它还使基于流量分析的攻击变得困难。
八、重放攻击
在网络安全中,重放攻击是一种窃听者拦截并捕获一个或多个消息并在以后简单地重新传输它们的技术,其目的是欺骗接收者执行攻击设备未授权执行的操作。一个常见的例子是汽车的无钥匙进入系统被攻击者攻破,攻击者拦截了车主和汽车之间的身份验证序列,然后重播这些消息以进入汽车并窃取汽车。
蓝牙®MESH网络通过使用称为序列号(SEQ) 和 IV 索引的两个网络 PDU 字段来防止重放攻击。元素每次发布消息时都会增加 SEQ 值。从包含小于或等于最后一个有效消息的 SEQ 值的元素接收消息的节点将丢弃它,因为它可能与重放攻击有关。类似地,IV 索引是与 SEQ 一起考虑的单独字段。来自给定元素的消息中的 IV 索引值必须始终等于或大于来自该元素的最后一个有效消息。
九、密码学工具箱
蓝牙MESH网络的大多数安全功能都依赖于行业标准的加密算法和程序。本系列的其他与安全相关的文章中将引用它们,但我们将在这里解释最重要的那些。
蓝牙MESH网络堆栈中使用了两个关键安全功能:AES-CMAC 和 AES-CCM。这些是基本的加密和认证功能,用于密钥生成的所有其他功能都基于它们。
十、AES-CMAC
基于密码的消息认证代码 (CMAC) 是一种算法,可以为任何可变长度的输入生成固定长度的 128 位消息认证值。使用AES-CMAC算法生成消息认证码MAC的公式写为:
MAC = AES-CMAC k (m)
AES-CMAC 的输入是:
k – 128 位密钥。 m – 要验证的可变长度数据。
AES-CMAC 具有出色的错误检测能力。其他技术,包括校验和的验证或错误检测代码的使用,可能只检测数据的意外修改。AES-CMAC 旨在检测故意、未经授权的数据修改以及意外修改。如果您有兴趣了解有关此功能的更多信息,请参阅定义它的RFC4493。
十一、AES-CCM
AES-CCM 是一种通用的、经过身份验证的加密算法,旨在与加密块密码一起使用。在蓝牙MESH网络规范中,AES-CCM 在所有情况下都用作基本的加密和认证功能。其使用公式如下:
密文,MIC = AES-CCM k (n,m,a)
AES-CCM 有四个输入:
k – 128 位密钥。
n – 104 位随机数。
m – 要加密和认证的可变长度数据。
a – 要验证但未加密的可变长度数据,也称为附加数据。此输入参数的长度可能为零字节。
AES-CCM 有两个输出:
密文——加密后的可变长度数据。
MIC – m 和 a 的消息完整性检查值。
图 1 显示了一个纯文本有效载荷,它可能来自蓝牙®MESH网络层或上层传输层,由 AES-CCM 使用输入加密密钥、随机数和明文有效载荷进行处理。输出加密的有效载荷和 MIC。
图 1 – 用于数据包有效负载加密和身份验证的 AES-CCM。
十二、SALT Generation
蓝牙®MESH网络安全定义了称为 s1的SALT生成函数,该函数使用 AES-CMAC 函数。如上所述,AES-CMAC 有两个输入参数:k 和 m。但是,当用于 SALT 生成时,只有输入参数 m 会发生变化。k 始终设置为 128 位值:0x0000 0000 0000 0000 0000 0000 0000 0000,在蓝牙MESH网络规范中称为零。
图 2 – SALT 生成函数。
SALT 生成函数的输入是:
m – 一个非零长度的八位字节数组或 ASCII 编码的字符串。
输出是一个 128 位的 MAC 值,s1 公式写为:
s1(m) = AES-CMAC zero(m)
十三、其他安全功能
在蓝牙MESH网络规范第 3.8.2 节“安全工具箱”中,您将找到定义的其他安全功能,例如各种密钥派生功能。它们都是基于 AES-CMAC 和 SALT 生成函数 s1(SALT 生成函数也是基于 AES-CMAC)。
向前!
安全性是蓝牙的一个重要问题,这个话题将在我们关于蓝牙MESH网络的系列中反复出现。阅读本文后,您应该对主要的蓝牙®MESH网络安全功能和一些涉及的底层加密技术有很好的了解。当我们在以后的文章中介绍该主题时,您现在可以更深入地研究蓝牙MESH网络安全。