LoRaWAN介绍9 安全
“引到永生,那门是窄的,路是小的,找著的人也少。”–《马太福音》
安全对于物联网设备来说很重要,因为他们经常部署在重要的基础设施中。同时,节点在物理上是分布式系统,无线信道很容易被攻击者监听,这些给安全带来更多的挑战。
LoRaWAN使用了双重128AES加密机制,以提供安全的通信机制,达到安全的3个要素:保密性、完整性和可用性。
1 双密钥的来源
在《LoRaWAN介绍7 入网》中提到,LoRaWAN使用2 个密钥:NwkSKey和AppSKey,它们分别对应用层数据和MAC协议帧加密。
那么,这2个密钥是怎么来的呢?
如果是ABP模式,这2个密钥是在Server和End Nodes双方同步配置。
如果是OTAA模式,这2个密钥是按如下公式计算出来的:
NwkSKey=aes128_encrypt(AppKey,0x01|AppNonce|NetID|DevNonce|pad16)
AppSKey=aes128_encrypt(AppKey,0x02|AppNonce|NetID|DevNonce|pad16)
现在,一起检查下这2个密钥的安全性。
首先,AppKey是Server和End Nodes的根密钥(至关重要),双方共同拥有,并且不曾参与通信交换,因此攻击者无法通过窃听无线电而破解。
Server回复AppNonce和NetID给End Nodes时,使用了基于AppKey的128AES加密,攻击者可以窃听无线电,但很难破解该密文。
剩下DevNonce,我们在后续分析它的安全,以及如果防范攻击。
2 双重加密逻辑
首先,FRMPayload(可以是应用数据,也可以是MAC命令)的明文,通过128AES加密,生成密文。细心的人会发现,为什么Key依赖于FPort的值呢?因为,FPort=0,代表MAC命令,使用NwkSKey密钥;FPort=1~255,代表应用数据,使用AppSKey密钥。这是为了取得信息“保密性”。
然后,基于NwkSKey,生成CMAC(Cipher-based MessageAuthentication Code,基于密文消息认证码),取最后4字节做为MIC(Message Integrity Code,消息完整码)。这是为了取得信息“完整性”。
因为双方都具备相同的2个Key,而128AES是对称加密机制,Server和End Nodes都可以有效使用该机制。即达到信息的“可用性”。
加密过程如下图所示:
对密码学熟悉的人们会发现,FRMPayload的加密不具备“完整性”,换一句话说,网络层虽然无法破解应用密文,但可以篡改应用密文,而接收方无法查觉。在LoRaWAN的Server架构中,NS(Network Server)负责网络层,一般情况下认为它是可信设备;如果对安全要求非常高的系统,那么需要在FRMPayload中内嵌MAC(消息认证码),来确保完整性。
3 防止重播攻击
我们回到OTAA的入网申请Join Request数据帧,此时,因为End Nodes没有办法生成2个Key,所以Join Request是以明文发送的,这可以被攻击者窃取。
想象这样一个场景,某Nod#A发送Join Request帧,Server回复Join Accept帧,双方都生成2个Key,准备进行正常的网络通信。此时,攻击者重播窃取的Join Request帧,Server回复Join Accept并生成新的Key。错误出现了:该Node#A(持旧Key)和Server(持新Key),会因为Key不一致导致通信失败。
为防止上述重播攻击,LoRaWAN要求Server保存上一次通信的DevNonce,仅当Node完成第一次UPLINK后,才能删除上一次DevNonce。这样,攻击者一旦重播Join Request帧,Server发现DevNonce是相同的,拒绝回复。
有一个疑问,攻击者为什么不“伪造”Join Request帧呢?不是明文吗?
我们看Join Request帧是受“完整性”保护的,如下:
camc=aes128_cmac(AppKey,MHDR | AppEUI | DevEUI| DevNonce)
MIC=cmac[0…3]
攻击者没有AppKey,它发送“伪造”的Join Request帧,Server检测发现MIC错误,将会拒绝回复!
4 管理密钥
对于ABP入网机制,因为NwkSKey和AppSKey都是直接存储在End Nodes,特别小心,千万不要基于公开的信息来生成这2个Key,如:DevAddr,攻击者可以窃取该值。
AppKey是根密钥,千万要小心保管!现代的加密机制,可靠度很高,暴力破解的难度非常大,大部分漏洞出在密钥上(密钥等于用户名、使用简单密钥、密钥泄露、基于公开信息生成等)。如果不保管好钥匙,再精致牢固的锁,也会被窃贼轻易打开!
文章来源:程序园
您的留言或需求: