【学知识】解读蓝牙网状网络的安全性
与物联网(IoT)相关的最受争议的问题之一是安全性。从农业到医院,从智能家居到商业智能建筑,从发电站到交通管理系统,物联网系统和技术都将触及世界许多地区,物联网系统的安全漏洞可能会产生灾难性的后果。
Bluetooth®网状网络被设计为将安全性作为其首要任务。在本文中,您将了解主要的安全功能和被解决的安全问题。该系列的其他文章将更详细地介绍蓝牙网状网络安全。欢迎点击“阅读原文”观看完整文章!
蓝牙网状网络的安全性是强制的
蓝牙低功耗(LE)GATT设备可以实现蓝牙核心规范中定义的一系列安全措施。产品设计人员有责任决定需要采取哪些安全措施,并且可以决定采用任何可用的安全功能。换句话说,蓝牙低功耗GATT的安全性是可选的。如果我们正在谈论单个设备的安全性及其与另一个设备的连接,这是有道理的,前提是产品设计师正确地执行风险评估。然而,蓝牙网状网络中的安全性涉及多于单个设备或对等设备之间的连接的安全性; 它关心整个网络设备的安全性和网络中各种设备分组的安全性。
因此,蓝牙网状网络的安全性是强制性的。
蓝牙网状网络的安全基础
以下基本安全说明适用于所有蓝牙网状网络:
加密和认证 | 所有蓝牙网状网络消息都经过加密和认证。 |
分离关注点 | 网络安全性,应用安全性和设备安全性被独立地解决。请参阅下面的关注点分离。 |
区域隔离 | 蓝牙网状网络可以分为子网,每个子网的加密方式与其他网络不同。 |
密钥更新 | 通过密钥更新过程可以在蓝牙网状网络的使用寿命期间更改安全密钥。 |
信息混淆 | 信息混淆使得难以跟踪在网络内发送的消息,因此提供了一种使得难以跟踪节点的隐私机制。 |
重放攻击保护 | 蓝牙网络安全保护网络免受重放攻击。 |
垃圾邮件攻击保护 | 可以以防止垃圾邮件攻击的方式安全地从网络中删除节点。 |
安全设备配置 | 将设备添加到蓝牙网状网络以成为节点的过程是一个安全的过程。 |
分离关注点和安全密钥
蓝牙网络安全的核心是安全密钥的三种类型。这些密钥为蓝牙网状网络的不同方面提供了安全性,并在蓝牙网状网络安全性中实现了关键性能,称为分离关注点。
考虑作为中继的网络网络灯具。作为中继,它可能会发现自己处理与建筑物的蓝牙网状网络门窗安全系统有关的消息。灯具没有访问和处理这些消息的细节,但它确实需要将它们转发到其他节点。
为了处理这种潜在的兴趣冲突,蓝牙网状网络使用不同的安全密钥称为AppKeys,用于保护网络层的消息与用于保护与特定应用相关的数据(例如照明,物理安全,加热等)的消息。
蓝牙网状网络中的所有节点拥有一个或多个网络密钥(NetKey),每个网络密钥对应于可能是主网的子网。它拥有一个使一个节点成为网络成员的网络密钥。网络加密密钥和隐私密钥直接从NetKey派生。
拥有NetKey允许节点对网络层进行解密和验证,以便可以执行网络功能,如中继。它不允许应用程序数据解密。
每个节点还具有唯一的安全密钥,称为设备密钥或DevKey。 DevKey用于节点的配置。
区域隔离
拥有主NetKey定义蓝牙网状网络的成员资格并授予对蓝牙网状网络的访问权限。但是也可以将网络划分成不同的子网,每个子网都有自己的子网密钥。这意味着只有拥有给定子网密钥的设备可以与作为该子网的成员的其他设备进行通信。也可以创建和分配子网密钥。一个很好的例子是将不同酒店房间的节点隔离开来。
节点删除,密钥更新和垃圾邮件攻击
如上所述,节点包含各种蓝牙网格安全密钥。如果一个节点发生故障并需要处理,或者如果所有者决定将节点销售给另一个所有者,则重要的是,该设备及其包含的密钥不能用于挂载网络上的攻击。
图1 蓝牙网状网络确保了设备的安全可靠处理
定义了从网络中删除节点的过程。Provisioner应用程序用于将节点添加到黑名单,然后启动密钥刷新过程。
密钥更新过程发出网络中的所有节点,除了黑名单的成员,新的网络密钥,应用密钥以及所有相关的派生数据。换句话说,构成网络和应用程序安全性基础的整套安全密钥被替换。
因此,从网络中删除并且包含旧NetKey和旧的AppKeys的节点不再是网络的成员,并且不构成威胁。
来自NetKey的隐私密钥用于模糊网络PDU头值,例如源地址。模糊确被动窃听不能用于跟踪节点和使用它们的人员。它也使得基于流量分析的攻击变得困难。
重放攻击
在网络安全方面,重放攻击是窃听者拦截并捕获一个或多个消息并且稍后重新传输的技术,目的是欺骗接收者执行攻击设备未被授权做的某些事情。通常引用的例子是汽车的无线钥匙进入系统被攻击者所窃取,该攻击者拦截汽车所有者和汽车之间的认证序列,然后重播这些消息以进入汽车并将其窃取。
蓝牙网状网络通过使用称为序列号(SEQ)和IV索引的两个网络PDU字段来防止重放攻击。每次发布消息时,元素都会增加SEQ值。从包含SEQ值小于或等于上一个有效消息的值的元素接收消息的节点将丢弃它,因为它可能与重放攻击有关。类似地,IV索引是与SEQ一起考虑的单独的字段。来自给定元素的消息中的索引值必须始终等于或大于该元素的最后一个有效消息。
加密工具箱
蓝牙网状网络的大多数安全功能都依赖于行业标准的加密算法和过程。将在本系列的其他安全相关文章中提及,但我们将在这里解释最重要的。
在蓝牙网格堆栈中使用两个关键的安全功能:AES-CMAC和AES-CCM。这些是基本的加密和认证功能,所有用于密钥生成的其他功能都是基于它们的。
AES-CMAC
基于密码的消息认证码(CMAC)是可以为任何可变长度输入生成固定长度的128位消息认证值的算法。使用AES-CMAC算法生成消息认证码MAC的公式为:
MAC= AES-CMACk(m)
The inputs to AES-CMAC are:
AES-CMAC的输入为:
k - the 128-bit key.
k-128位密钥
m-要认证的可变长度数据。
AES-CMAC具有出色的错误检测能力。涉及验证校验或使用错误检测代码的其他技术只能检测数据的意外修改。 AES-CMAC旨在检测有意,未经授权的数据修改以及意外修改。如果您有兴趣了解更多关于此功能的信息,请参考定义它的RFC4493。
AES-CCM
AES-CCM是一种通用的,认证的加密算法,用于加密块密码。在蓝牙网状网络规范中,AES-CCM在所有情况下都被用作基本的加密和认证功能。其使用公式如下:
ciphertext , MIC = AES-CCMk (n,m,a)
There are four inputs to AES-CCM:
AEC-CCN有四个输入:
k -the 128-bit key.
K-128位密钥
n -a 104-bit nonce.
n-104位的nonce
m -the variable length data to be encrypted and authenticated.
m -要加密和认证的可变长度数据
a-要认证但未加密的可变长度数据,也称为附加数据。该输入参数的长度可能为零字节。
AES-CCM有两个输出:
· 密文-其加密后的可变长度数据。
· MIC-m和a的消息完整性检查值。
图2显示了可以来自蓝牙网状网络层或上层传输层的明文有效载荷,由具有输入加密密钥,随机数和明文有效载荷的AES-CCM处理。输出加密的有效载荷和MIC。
图2 用于数据包有效负载加密和认证的AES-CCM。
SALT生成
蓝牙网状网络安全定义了SALT生成函数s1,它使用AES-CMAC功能。如上所述,AES-CMAC具有两个输入参数:k和m。当用于SALT生成时,只有输入参数m变化。 k总是设置为128位值:0x0000 0000 00000000 0000 0000 0000 0000,在蓝牙网状网络规范中称为零。
图3 SALT生成函数。
SALT生成函数的输入是:
m - 非零长度的八位位组数组或ASCII编码的字符串。
输出为128位MAC值,s1公式为:
s1(m) = AES-CMACZERO(m)
欲了解Silicon Labs最新的蓝牙网状网络解决方案及技术知识,请访问:https://cn.silabs.com/products/wireless/learning-center/bluetooth/bluetooth-mesh
原文链接:https://blog.bluetooth.com/bluetooth-mesh-security-overview
您也可以扫描以下二维码,关注Silicon Labs社交媒体平台: