Network layer: network layer 从 lower transport layer 接收到数据后和其他字段进行组合并进行加密和混淆后传给 Bearer layer。 mesh network PDU格式在表3.7中定义,并在下面的图3.7中进行说明:
字段分析:IVI:IVI field 为 IV index 的 最低有效位。
NID:NID field包含一个 7-bit network identifier,由 Network Key 生成。
CTL:CTL field 是 1 bit 的值,用于确定消息是 Control Message 还是 Access Message同时决定 NetMIC 的大小, 如表3.8所示: TTL:TTL field 是一个 7 bit 字段,决定中继的次数。 定义了以下值:
- 0 =尚未中继,将不会中继
- 1 =可能已经中继,但是不会中继
- 2至126 =可能已经中继并且可以中继
- 127 =尚未中继,可以中继
SEQ:SEQ field 是一个 24 bit 整数,当与IV索引组合时,它应该是此节点发起的每个新 Network PDU 的唯一值。
SRC:SRC field 是 16 bit 的值,用于标识 此Network PDU 源自哪个 element 。 该地址应该是unicast address。
DST:DST field 是 16 bit 的值,用于标识此 Network PDU 所针对的一个或多个元素。 该地址应该是unicast address, group address, or virtual address。
TransportPDU:TransportPDU field 由 lower transport layer 设置,并且不应由 Network layer 更改。 NetMIC 为 32 bit 时是 1~16个字节;NetMIC 为 64 bit 时是 1~12个字节;
NetMIC:NetMIC field 是一个 32 bit 或 64 bit 字段(取决于CTL位的值),用于验证DST和TransportPDU未被更改(原因看请看 Network layer 认证和加密)。
Network layer 认证和加密:使用AES-CCM对 DST 和 TransportPDU 进行加密和身份验证。 使用从 network key 派生的 Encryption Key 对所有 Network PDU 进行加密。 network layer 加密的示意图如图3.41所示。
网络层混淆:为了混淆 Network Header(CTL,TTL,SEQ,SRC),这些值应与 加密函数e的结果 组合,以防止被动窃听者通过侦听 Network PDU 来确定节点的身份 。
为了混淆 Network PDU,将已经加密的 Network PDU 的前六个字节 与 IV index 和 Privacy Key 结合在一起。
已加密的 Network PDU 的前六个字节包括EncDST,和 EncTransportPDU 和/或 NetMIC字段的四个字节。 这些字节称为 PrivacyRandom value 。
Privacy Key 从 Network key 中派生密钥,即使 Privacy Key 被泄露,也可以保护 Network key。 IV index 与 PrivacyRandom 值连接,并与 Privacy Key 一起用作 加密功能e的输入 。 其输出称为PECB值。
然后,将PECB值的前六个字节与 TTL,SEQ 和 SRC 异或,然后成为 ObfuscatedData 。
NID / IVI字节, ObfuscatedData,EncDST,EncTransportPDU和NetMIC的组合成Network PDU 。
network layer obfuscation 的图示如图3.42所示。
反转时,将执行以下操作:
|