物联网提供商的说明。 LoraWAN中的激活和安全性

您好亲爱的物联网爱好者。 延续说明物联网提供商。


第一部分 > || > 第二部分 > || > 第三部分 > || > 第四部分

今天是时候讨论LoRaWAN的安全性了。 有很多谣言和传说。 我们将尝试弄清楚它是如何工作的以及存在哪些风险。

为了继续讨论安全性主题,您将不得不做一个简短的介绍,并讨论网络上无线电模块的初始初始化。 LoRaWAN中的此过程称为激活。


为简便起见,我将在下面列出我们需要的术语。 如果您感到有些困惑-您可以回到这里进行检查。 您可能必须回来,因为 许多术语的缩写非常相似。 另外,在本说明中,我将进行类比,以便您大致了解可以与该术语进行比较的内容。 并非总是可以选择精确的类比,因此,请不要对本专栏进行严格的判断。



因此,可以通过空中(OTAA)或预设(ABP)完成LoRaWAN中的激活。


OTAA(空中激活)


在空中激活的情况下,必须在我们的无线电模块上设置三个参数。 它的唯一标识符(DevEUI),服务器标识符(AppEUI)和服务器密钥(AppKey)。


在服务器端,还必须注册无线电模块标识符,服务器标识符和密钥。 即 服务器最初应该知道将尝试加入该设备的设备。 如果我们知道标识符和服务器密钥,但是我们的DevEUI未在其数据库中注册,则连接将失败。


初始加电后,无线电会以三个预定义的连接频率之一在空中发送join_request数据包。 带着这个包裹,他问附近是否有一个网络可以“认出他”。 以下是join_request包的组成。 如您所见,它包含了非常好的DevEUI和AppEUI以及DevNonce。



DevNonce是随机变量。 服务器将其存储在内存中一段时间​​,如果join_request到达的DevNonce与之前的其中一个相同,则服务器将忽略此请求。 当攻击者可以写下激活请求然后从他的设备中重复激活请求时,这可以防止重复攻击。 顺便说一句,并不是所有的物联网标准都能为这种攻击提供保护。


该消息中没有直接使用AppKey,而是通过它来考虑帧末尾的MIC校验和。
在来自join_accept服务器的响应消息中,我们将进一步需要此密钥。


Join_request未加密传输。


如果服务器知道AppEUI和DevEUI,并且DevNonce字段中没有匹配项,并且MIC没有问题,则将接收Join_accept。 如果通过所有检查,则服务器将生成join_accept响应消息。 其组成如下图所示。



实际上,会生成两个会话密钥-网络服务器(NwkSKey)和应用程序服务器(AppSKey)。 这些密钥以及其他信息由AppKey加密,然后发送到无线电模块。 此外,所有消息传递都使用会话密钥进行双重加密(除了使用MAC命令的数据包以外,它们不使用应用程序服务器密钥进行加密)。 NwkSKey不会仅使用数据(没有命令)参与数据包加密,而是通过它考虑校验和。
NwkSkey和AppSKey对于每个单独的无线电模块都是唯一的。


两个键用于附加信息保护。 每次来自无线电模块的数据包到达我们的系统时,都会对网络服务器和应用程序服务器进行部分加密。 即 网络服务器将只能解密发给它的那些消息(各种服务消息)。 应用服务器将仅看到数据包的有用部分(实际上是正在转发的数据)。 这是必需的,因为有99%概率的网络服务器将在提供者处。 但是应用服务器很可能由客户端托管。 双重加密使提供者很难发现数据包的内容。


除了这两个键外,OTAA上的join_accept还有另外一件重要的事情-扩展频率列表(CFList)。 让我提醒您,无线电模块最初只知道它可以工作的三个频率。 激活后,会注册其他频率以进行通信。

如果不确切知道设备将在哪个网络中工作,这将非常方便。 我们可以同意,在所有网络中,三个频率(+ RX2)将始终重合,其余五个由提供商自行决定。

此外,为了将来与大量设备一起使用,CFList可用于群集

这是将网络分为多个群集,并且在群集内进行频率规划的时候。 假设我们的无线电模块知道三个频率F1,F2和F3。 它以其中一个频率激活,如果它在cluster1中,则它会收到一个附加的频率表,形式为F4-1,F5-1和F6-1。 对于群集2,他将获得完全不同的F4-2,F5-2,F6-2。 同时,我们可以用相同的方式配置所有的无线电模块,而不用真正地考虑哪一个将落入哪个集群。 并且在相邻集群中,碰撞的可能性将急剧降低。


ABP(通过个性化激活)


将会话密钥立即连接到无线电模块并最初在服务器端注册时的简化过程。 无线电模块很方便,无需激活,可以立即使用。 没有什么比这更方便了,因为 在这种情况下,安全性一般。 另外,您不能从服务器上拉频率。 我从未见过任何实际使用的案例。 我们不会考虑它,以下所有内容都是关于OTAA的。


那么安全性呢?


因此,从本质上讲,我们对网络服务器和应用程序服务器的会话密钥负有主要的加密负担。

仔细考虑它们。


批评LoRaWAN标准的主要抱怨是,当设备在网络上激活时,我们有两个密钥,然后可以保持几个月不变。 更准确地说,在重新激活设备之前,它们可能不会改变多年。 在正常情况下,我们激活并忘记了无线电模块,因此三到四年的密钥寿命是非常现实的前景。 实际上,从安装到使电池电量为零。
我们的钥匙有多可靠?


该规范说它们符合神秘的RFC4493。
这是什么 这是一种加密算法,通常称为AES-CMAC。

让我们不要陷入密码学的混乱之中,而将自己局限于对图片的共识。 如下图所示。



AES-CMAC的原理大致如下:加密的消息分为128位块。 每个块均使用AES密钥分别加密。 此外,当加密第二块时,除了密钥之外,还使用第一块的加密结果。 当加密第三者时-第二者和(间接地)第一者的结果。 这样的并发症链。


这个原则有多可靠?


非常可靠。 该算法于十多年前问世。 从那以后,他遭到了许多不同的攻击,最后,从理论上讲,他们证明了他可以被黑客入侵,问题是需要大量的数据包样本才能破坏它。 然后就有机会了解加密块中的内容。


如果我们正在谈论拦截LoRaWAN数据包,具有必要知识的攻击者能否获得此样本? 让我们估计一下。 让包裹每小时走一次。 在一个月内,将有720个数据包从无线电模块发送出去。 还不够

对于真正的威胁,我们需要一个非常有耐心的患者,他将编写几个月的软件包。 而且他仍然可以破解算法并获得宝贵的密钥,这并不是事实。 不要忘记,需要分别针对每个无线电模块显示这种耐心。 请记住,每小时发送一次数据包非常频繁。 实际上,时间间隔要长得多-六个小时,甚至一天。


但是,即使在1.1版发布后,这种虚假的机会现在也已关闭,在该版本中实现了重新激活和联接服务器命令。 让我们以某种方式谈论此规范。 现在,我回想起上一篇文章的想法:当标准开放并且具有社区时,所有漏洞都可见。 在升级期间,开发人员确切地知道首先要看什么。


结果,我们发现安全威胁相当虚幻。 在深层理论的某个地方,可以进行黑客入侵,但实际上这是不现实的。 现在乘以接收到的信息的值。 我们的攻击者是否会开始写包数月以找出计数器? 不太可能。

LoRaWAN达到了合理的性价比。 我们知道可以加强保护。 但这是最终的计算能力,这是电池的额外负担,有可能增加数据包的大小或减少有效负载。

对我来说,这不仅仅是遥测任务。


在评论中,我很高兴听到我的反对者和支持者。 请记住,安全性主题始终需要进行讨论,并且切勿以任何人的观点为依托。

Source: https://habr.com/ru/post/zh-CN413105/


All Articles