IOT设备常见无线通信协议简单论述
BLUETOOTH LE *
ZIGBEE*
zigbee协议是基于(IEEE802.15.4)
标准(2.4 Ghz 频段)的低功耗局域网协议,它是一种低功耗,短距离的无线通信技术 ,普遍传输范围在10~100米之间,最大的传输速率为250kbps,多用于智能家居系统.同时ZigBee主要采用三种组网方式:星形网络、网状网络、簇树形网络。其中,星形网络最为常见,它可以为网络提供较长时间的电池使用寿命;网状网络拥有多条传输路径,它具有较高的可靠性;簇树形网络结合了星形和网状结构,既有较高的可靠性,又能达到节省电池电量的目的。
注:要使用zigbee协议需要使用适配器或者连接控制中心
zigbee协议栈:
zigbee协议栈构成主要如图所示,首先由IEEE802.15.4定义的PHY(物理层) 和MAC(介质访问层),以及zigbee定义的NWK(网络层) APS(应用程序支持层)和APL(应用层),其中 PHY MAC NWK 这三个层我们可以看成zigbee协议的核心网络层 APS APL我们则可以看成是zigbee协议的应用层,下面我们分别对这这几层进行讨论
应用层 | APL | APL分为了AO和ZDO,其中AO是规范了数据类型和传输帧的格式,而ZDO则较为重要,它的任务是协议栈初始化,如APS和NWK层以及安全服务的初始化;还有应用程序要通过ZDO来执行设备发现、服务发现、安全管理、网络管理、绑定管理等管理工作。 |
APS | 向上层提供数据传输和管理配置的服务。应用支持子层隔离了应用框架与网络层,为应用程序的运行提供支撑,APS与应用程序之间的数据接口是APSDE-SAP,最多可以支持240个应用程序对象,通过端点(EndPoint)来连接应用程序对象。每个端点都有一个编号,0号端点比较特殊,是连接ZDO的。应用程序的端点编号是从1号开始,一直到240号。一个ZigBee设备,比如无线开关、无线灯具之类的,一般会用到1~3个端点。 | |
网络层 | NWK | 分配网络地址和路由发现 |
MAC | 规定了无线信道的访问控制机制 | |
PHY |
定义了工作频段,以及所使用的编码、调制、扩频、调频等无线传输技术 |
zigbee协议数据包截图(网上寻找ZigBee3.0数据包解析 - 今日头条 - 电子发烧友网 (elecfans.com))
从这个抓取的数据包可以清晰的看到zigbee协议的一些格式 其中 aps payload 就是应用层发送的交互数据 是 12 34 56 78 90
zigbee安全机制:
参考:ZigBee 安全探究 - 博客 - 腾讯安全应急响应中心 (tencent.com)
ZigBee技术及其安全性研究(全文) (wenmi.com)
zigbee存在着三种安全模式
1、 非安全模式:为默认安全模式,即不采取任何安全服务,因此可能被窃听;
2、 访问控制模式:通过访问控制列表(Access Control List, ACL,包含有允许接入的硬件设备MAC地址) 限制非法节点获取数据;
3、 安全模式:采用AES 128位加密算法进行通讯加密,同时提供有0,32,64,128位的完整性校验,该模式又分为标准安全模式(明文传输密钥)和高级安全模式(禁止传输密钥)。
同时在安全模式中 会采用三种类型密钥去保证通讯安全
主密钥(Master Key):用于配合ZigBee对称密钥的建立(SKKE)过程来派生其它密钥,也就是说,设备要先拥有信任中心(ZigBee网络中有且仅有的一个可信任设备,负责密钥分发与管理,以及网络的建立与维护)生成的主密钥才能派生网络密钥和链路密钥给其它设备,它可以由信任中心设置,也可基于用户访问数据,比如个人识别码(PIN),口令或密码等信息;
网络密钥(Network Key):用于保护广播和组数据的机密性和完整性,同时也为网络认证提供保护,被网络中的多个设备所共享,仅在广播消息中使用;
链接密钥(Link Key):用于保护两个设备之间单播数据的机密性和完整性,仅通讯中的2个设备持有,而单个设备需要多个链接密钥来保护每个端对端会话
根据如上的一些信息:
当zigbee协议使用密钥传输时,当默认密钥没有更改,攻击者可以通过默认密钥去解密通讯设备 ,同时伪造合法设备去控制响应的智能设备,同时如果在密钥传输过程中使用了明文传输,也会造成相应的后果
当使用预安装的形式去配置密钥时,因为更改需要重新刷设备固件,较为麻烦,但是如果攻击者通过逆向手段获取到了密钥时,也会实现对设备的控制
ZWAVE*
zwave 的详细技术文档可以从官网中去进行下载,下载连接如下
https://sdomembers.z-wavealliance.org/document/dl/660
Z-Wave 是一种无线通信协议,主要用于智能家庭网络,允许智能设备相互连接和交换控制命令和数据。它是同zigbee wifi bluetooth一样十分出名的iot无线通信协议,是一种低带宽半双工协议,与其它三个协议不同,它工作在800-900 mhz的频段 避开了2.4ghz的信号干扰,Z-WAVE协议有Z-Wave和Z-Wave LR两种模式,Z-Wave是Mesh网络,Z-Wave LR是星形网络,这两种网络可以无缝兼容,100%共存。Z-Wave 网络最多可包含 232 个节点。节点可以重传消息以保证传递。 两个节点之间的典型通信范围是 100 米。 Z-Wave LR可以包含4000个节点。在14dbm(最大30dbm)的输出功率下可达1.6Km的直线距离。
zwave协议栈:
图片和翻译来自官方技术文档《Z-Wave and Z-Wave Long Range Network Layer Specification》中
首先是喜闻乐见的 物理层和mac层
物理层提供MAC层和PHY层之间的数据流控制,并增加了PHY相关的管理头。PHY层负责无线电收发机的激活和失活、数据传输和接收、频率选择、清晰信道评估以及接收帧的链路预算评估。
MAC层定义了Z-Wave数据传输模型和帧结构。在Z-Wave帧传输过程中,MAC层从更高的层获取有效载荷数据,并构造MAC数据有效载荷(MPDU)和MPDU报头。报头包括地址、帧控制和帧长度信息。帧控制字段长度约为16位,包含关于帧类型和其他可以被更高 层使用的控制标志的信息
然后就是NWK层和APL层
Z-Wave网络层(NWK)定义了一种多跳路由协议,用于Z-Wave节点扩展通信范围。这意味着Z-Wave节点因此可以向不在直接无线电通信范围内的节点发送帧。此外,Z-Wave NWK层负责网络的形成(即加入/排除网络中的节点)和网络的维护。Z-Wave NWK层使用被称为Z-Wave协议命令类的命令帧管理网络的建立。这些Z-Wave NWK命令是为网络形成的特定目的而设计的。同时提供应用层和MAC层之间的接口。NWK层依赖MAC层提供的服务,通过NLDE (Network layer Data Entity)和NLME (Network layer Management Entity)服务点接口向更高层提供服务。NLME提供管理服务接口,NWK层管理功能可以在该接口中调用。NLME负责维护包含网络路由信息的网络信息库(Network Information Base, NIB)。NWK层的组成和接口如图所示。
Z-Wave APL层负责使用专用的命令类构建应用程序。为了得到认证,应用程序应符合Z-Wave 设备类型和Z-Wave Plus V2设备类型中定义的Z-Wave设备类型。最后,应用层还负责使用NWK接口提供一些网络管理功能
在 Z-Wave网络层中定义了两种网络节点类型:控制器和终端设备,控制节点负责建立和维护Z-Wave网络。它们可以包含或排除节点,并且能够感知网络拓扑结构。这使得控制器能够确定网络中任意两个节点之间可能的路由。控制器之间可以交换网络拓扑结构。
终端设备只能通过控制器从网络中添加或删除,它们不计算路由,只依赖于控制器提供的路由信息。请注意,终端设备可以向其他节点发送命令,并在应用程序级别上“控制”其他节点的功能。
控制器和终端设备都可以参与mesh路由。它使网络中的节点即使不在直接通信范围内也能相互通信。
同时 zwave协议栈中的nwk层在网络层中定义了几种控制器的角色
1.主控制器
默认情况下,主控制器是启动网络的控制器。主控制器总是可以用来建立和维护网络。它可以添加/删除节点,并了解网络拓扑结构。
一个网络中只能有一个主控制器。
主控制器可以为其他控制器提供额外的服务:
“主控制器”可以将“主控制器”(和/或SUC/SIS)角色切换给其他控制器。
2.从控制器
所有不是“主控制器”的控制器都是“从控制器”。
如果“主控制器”没有SUC/SIS能力,则“从控制器”不能包含节点、排除节点或自动接收更新的网络拓扑。
当网络中存在SUC时,“从控制器”可以在任意位置请求更新网络拓扑时间。
3.SUC控制器
SUC (Static Update Controller)是负责保持网络拓扑结构并根据需要将其分发给其他控制器的控制器。
组网中只能配置1台SUC。“主控制器”和“从控制器”都可以配置为SUC
4 SIS控制器
“SUC ID Server”(SIS) Controller是同时具有“SUC Controller”角色和“Primary Controller”角色的控制器。此外,它还提供SIS功能。
SIS的功能在于能够将nodeid保留给其他控制器,以使它们能够包含和排除节点。
5包含控制器
如果主控制器是SIS,则同一网络中的从控制器将成为包含控制器。
包含控制器是次要控制器,可以包含和排除代表SIS的节点
同时 zwave协议的节点存在着三种模式
总是听(AL) 频繁监听(FL) 非监听(NL) 三种模式细节可以从官方技术文档《Z-Wave and Z-Wave Long Range Network Layer Specification》第19页查询
Z-Wave支持以下类型的寻址:
•单播
•多播
•广播
zwave 通信:
zwave是通过命令类去进行通信,所以每个命令类都有一个c语言模块,去处理输入的命令,并传输输出的命令
目前zwave协议的命令类有zwave联盟规定的和厂商自定开发的命令类
对于官方的命令类定义查询可以从官网文档中查找
Command Classes - z-wavealliance
zwave抓包环境(参考学习)
Z-Wave Zniffer抓包工具使用指南 - 智创物联网 (smartlabs.cn)
ZWAVE安全机制:
参考:Z-Wave 网络安全攻防_设备 (sohu.com)
Z-Wave降级攻击导致超过1亿台物联网设备向黑客开放 - 哈客部落 (hake.cc)
Z-Wave芯片曝降级攻击漏洞 超过1亿台物联网设备受影响 (sohu.com)
zwave和zigbee一样通信加密都是采用了密钥交换的形式,这种无线技术嵌入了 AES-128 加密解决方案,。它提供数据包加密、完整性保护和设备认证服务。前期使用内网络密钥交换和使用 128 位密钥长度的 AES 对称分组密码算法,在s0期间 因为密钥交换过程中存在的漏洞,导致了攻击者的一个中间人攻击或者是密钥的还原攻击 ,具体的密钥交换过程可以查看上方的 zwave网络安全攻防
NFC
翻译来自:NFC Forum (nfc-forum.org)
NFC协议指的是近距离的无线通信协议,常用于门禁,公交卡 ,或者手机支付等领域,同时NFC是低延迟 链接和传输,其中只有连接一侧需要电源,NFC独有的是,连接可以交换数据或电,范围为 2cm,数据速率为 424 Kbit/s。功率收集最大为 1w。同时作为一种补充无线技术,它也可以与蓝牙和Wi-Fi设备配合使用。它通常与超宽带(UWB)一起出现,并通过物联网等其他计划提供轻松连接。对nfc和其它协议配合使用的文档感兴趣的师傅可以从链接下载规格 (nfc-forum.org)
NFC通信技术被市场上几种不同的现有非接触式通信协议所使用,这些协议使用不同的编码进行信号和负载调制。NFC论坛创建了一套规范,允许NFC论坛设备使用这些不同的通信协议。因此,NFC论坛设备能够与以下设备进行通信:
- 符合 ISO/IEC 14443 A 类标准的读卡器和卡
- 符合 ISO/IEC 14443 B 型标准的读卡器和卡
- 符合 ISO/IEC 15693 标准的卡
- 符合 ISO/IEC 18092 标准的设备
- 符合 JIS-X 6319-4 标准的读卡器和卡
- NFC 论坛标签
- 其他 NFC 论坛设备
此外,NFC论坛还定义了多种操作模式
卡仿真模式
NFC论坛设备的操作类似于非接触式卡,能够与非接触式读卡器设备进行通信。典型的用例是模拟非接触式银行卡进行支付或模拟公共交通的非接触式票证。
读取器/写入器模式
NFC 论坛设备的操作类似于与非接触式标签或设备通信的非接触式读卡器。移动应用程序开发人员可以设计自定义应用程序,这些应用程序可以与NFC标签和其他设备进行交互,通过基于tap的连接读取和写入数据。此模式还允许设备读取可包含网址、联系信息或自动化的标记。
无线充电模式
此模式用于通过 NFC 连接专用传输高达 1W 的功率。执行通信以管理电源传输。此模式将为电源有限的小型设备充电,例如手写笔、耳机、健身追踪器、智能手表或其他小型消费类产品。
主机卡仿真
通过此实现,位于设备主机中的 HCE 应用程序将负责模拟非接触式卡。在此配置中,NFC 控制器将所有收到的非接触式命令转发到设备主机。然后,HCE 应用可以使用 NFC API 与非接触式读取器设备通信。
点对点模式
两个NFC论坛设备接触在一起以交换数据。例如,此模式用于轻松交换设备用户的联系人数据,或进行快速连接以在两组扬声器之间传输音乐连接。
基于安全元件的卡仿真
在这种模式下,非接触式卡的仿真由NFC论坛设备内的安全元件管理。此安全元件可以是嵌入在 NFC 论坛设备中的安全芯片,也可以是插入 NFC 论坛设备中的支持 NFC 的 SIM 卡。对于这两种解决方案,从非接触式读卡器接收的命令将被转发到安全元件进行处理。此实现允许与非接触式智能卡解决方案提供的交易相同的高安全级别。
nfc安全学习:
通过网上查询发现nfc协议相对于 zigbee 蓝牙 z-wave这些协议来说安全的一些相关资料较少,以下我放一些我查询到的比较详细的nfc安全漏洞事件学习
LORA
LoRa是semtech公司开发的一种低功耗的局域网无线标准,其名称“LoRa”也就是是远距离无线电(Long Range Radio),它最大特点就是在同样的功耗条件下比其他无线方式传播的距离更远,实现了低功耗和远距离的统一,它在同样的功耗下比传统的无线射频通信距离扩大3-5倍 ,一般情况下 低功耗跟远距离是相对冲突的,实现了"马儿跑还不吃草“的这个协议学习重要性可想而知
该协议学习资源以及截图来自于lora官方白皮书
lora安全白皮书:lorawan_security_whitepaper.pdf (secureserver.net)
lorawan 1.04官方规范包:LoRaWAN® 1.0.4 Specification Package - LoRa Alliance® (lora-alliance.org)
以及对lorawan协议的介绍:What is LoRaWAN® - LoRa Alliance® (lora-alliance.org)
中文参考学习:LoRa的标准及规范——LoRaWAN网络协议-世讯电科 (dsliu.com)
LoRa协议学习总结-阿里云开发者社区 (aliyun.com)
可能有人疑惑 不是lora协议吗 怎么又变成lorawan协议了,在经过简单的了解后,lora 是线性调频扩频调制技术,而lorawan则是基于lora技术设计的一套通讯协议和系统架构,
在上面这个图来分层的话 lora则是物理层 而lorawan则是mac层(注:lorawan以前也被叫为loramac)其中lora的特性如下:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
传输距离:城镇可达2-5 Km,郊区可达15 Km;
工作频率:ISM 频段 包括433、868、915 MH等;
标准:IEEE 802.15.4g;
调制方式:基于扩频技术,线性调制扩频(CSS)的一个变种,具有前向纠错(FEC)能力;
容量:一个LoRa网关可以连接上千上万个LoRa节点。
电池寿命:长达10年;
安全:AES128加密;
传输速率:几百到几十Kbps,速率越低传输距离越长;
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
所以我们主要学习的还是lorawan协议(英文图片来自官方技术文档白皮书《LoRaWAN Link Layer Specification v1.0.4》感兴趣的师傅可以去看看
下面根据规定的osi架构去进行逐层讲诉
LoRaWAN协议分为基础类别ClassA和可选功能类别ClassB、ClassC。
classA(双向终端):
A类终端设备允许双向通信,其中每个终端设备的上行链路传输之后是两个短的下行链路接收窗口。终端设备调度的传输槽是基于自身的通信需求,在随机时间基础上有少量变化(ALOHA 342型协议)。A类操作是最低功耗的终端设备系统,用于在终端设备发送上行链路传输后不久只需要服务器进行下行通信的应用程序。在任何其他时间,来自服务器的下行通信都需要去等待由终端设备发起的下一个上行链路。该类型通常应用在低功耗的物联网设备:水表,气表等
classB(划定接收时隙的双向终端):
b类终端设备允许更多的接收槽。除了A类接收窗口外,启用B类的终端设备可以在预定时间打开额外的接收窗口。为了使终端设备在预定的时间打开其接收窗口,终端会从网关接收一个时间同步的信标。这允许网络服务器知道终端设备什么时候在监听。一般运用于下行控制且有低功耗需求的设备,如门锁 水阀等
classC(最大化接收时隙的双向传输终端):
c类终端设备允许几乎连续地打开接收窗口,仅在发送时关闭。c类启用的终端设备比A类或b类启用的终端设备使用更多的功率,但它们具有服务器和终端设备之间通信的最低延迟,注意 classc类型比A和B类型更加耗电。该类型可以适用于电表,路灯等
CLASSA通信过程:(注:因为classa是基础类型所以我着重与学习A的通信过程,对B和C感兴趣的可以到官方文档中去查看)
(便于理解找了个中文的)
(1)第一接收窗口RX1使用为上行链路频率的函数的频率和为上行链路数据速率的函数的数据速率。上行链路调制结束后,RX1的打开时间不超过1±20μs秒(这个时间可以设置,1s为默认时间)。上行链路和RX1数据速率之间的关系是特定于区域的
(2)第二个接收窗口RX2的数据速率和启动。第二个接收窗口RX2使用一个固定可配置的频率和数据速率,在上行数据发送结束2s±20μs后打开(这个2s可以通过参数调节,常用默认值为2)。其频率和数据速率可以通过MAC命令设置,默认的频率和速率是按区域规定。
(3)接收窗口的持续时间。接收窗口的长度至少要让终端设备有足够的时间来检测到下行数据的前导码。
(4)接收端在接收窗口期间的操作。如果在任何一个接收窗口中检测到前导码,终端设备(接收端)需要继续激活,直到整个下行帧都解调完毕。如果在第一接收窗口检测到数据帧,且这个数据帧的地址和MIC校验通过确认是给这个终端,那么终端就不必开启第二个接收窗口。
(5)网络服务器发送消息给终端。如果服务器想要发一个下行消息给终端,它会精确地在两个接收窗口的起始点发起传输。但是这个下行消息必须先等待到该ClassA设备上行消息后才可以执行
(6)接收窗口的重要事项。终端在RX1或RX2接收下行消息,或者在RX2失效之后(第一或第二窗口均未收到下行消息),才能再发起另一个上行消息。
loar物理帧结构:
LoRa的数据报文分为两种:上行数据报文与下行数据报文。上行的数据报文是从节点设备将传感器数据经过网关传到服务端。下行是将服务端的配置经过网关传输到设备中,下行仅仅是作为一种回复。
同时LORAWAN所有的上行和下行的数据包都携带一个PHY有效载荷(PHYPayload),以一个单字节的MAC报头(MHDR)开始,接着是一个MAC有效载荷(MACPayload),并以一个4字节的消息完整性代码结束
PHYPayload:
MHDR: MAC 头
MACPAYLOAD: 内容
MIC:4字节的消息完整性码
MACPAYLOAD的最大长度M是特定区域和数据速率的,如果大于M 将被丢弃
MHDR:
MType表示消息类型;
RFU:预留字段;
Major:表示的是LoRaWAN规范的帧格式的主要版本
同时LoRaWAN区分了六种不同的MAC帧类型:Join- request、Join Accept、未经确认的数据上行/下行链路和已确认的数据上行/下行链路。
|
这里着重说一下major 对于每个Major版本,终端设备可以实现帧格式的不同Minor版本。终端设备使用的次要版本应事先通过带外通信告知网络服务器
MACPAYLOAD:
Fport:端口,Fport=0表示的是FRMPayload中只有MAC命令。
FRMPayload:负载数据。
FHDR:帧头
FHDR:一个FHDR包含短的终端设备地址(DevAddr),一个帧控制字节(FCtrl),一个2字节的帧计数器(FCnt),以及最多15字节的帧选项(FOpts)来传输MAC命令。
对于下行帧 ,帧报头的FCtrl内容为
对于上行帧 ,帧报头的FCtrl内容为
ADR:数据自适应速率,等于1表示会根据环境对网络速率进行优化,等于0,表示自使用关闭,需要用户配置好。
ADRACKReq:ADR请求响应位,如果 ADR_ACK_LIMIT (ADR_ACK_CNT >=ADR_ACK_LIMIT)次上行之后没有收到下行回复,就会设置ADR 请求响应位(将 ADRACKReq 设为1)。
ACK:消息确认位。
FPending:只出现在下行的消息中,表示帧挂起,网关有数据等待下发。
FOptslen:表示的是FOpts的实际长度,等于0,表示FOpts字段为空,不等于0,表示FOpts中存放的是MAC指令。MAC指令是不能同时出现在FOpts与FRAMPayload中的。
RFU:Class B与Class A上行数据报文一样,使用了未使用的RFU字段。
注:关于此部分的细节可以从官方技术白皮书《LoRaWAN Link Layer Specification v1.0.4》第499行开始看
为了避免混乱所以放上一张总图:图片来自:LoRa协议学习总结-阿里云开发者社区 (aliyun.com)
lora安全性问题:
lora协议从设计上好像算是较为安全的协议,安全性也是针对于密钥的窃取的思路,而针对于协议栈的漏洞好像首次也是2020年Tencent Blade Team发现的解析下行无线电数据包时存在缺陷的内存破坏,并没有从网上找到更多的资料