ISO/IEC 29192-6:轻量级密码学 — 第6部分:消息认证码

面向受限网络的轻量级MAC构造:数据完整性与源认证

消息认证码(MAC)对于保证在不可信网络上传输的数据的完整性和真实性至关重要。在物联网生态系统中,设备广播传感器读数、接收固件更新和交换控制命令,缺少MAC将使系统容易受到伪造、重放和数据损坏攻击。ISO/IEC 29192-6标准化了轻量级MAC算法,以最小的计算和存储开销提供强大的安全保障,补充了第2、3和5部分中定义的加密和哈希原语。

MAC与哈希函数有根本区别:MAC包含一个密钥,因此只有拥有密钥的参与方才能验证消息的真实性。相比之下,哈希函数是公开的,仅提供完整性——任何人都可以计算给定消息的哈希值。

基于分组密码的MAC构造

轻量级CBC-MAC和基于密码的MAC(CMAC)

该标准指定了几种建立在第2部分轻量级分组密码之上的MAC构造。最值得注意的是CMAC的轻量级变体,它使用CBC模式的分组密码,并对最后一个块进行最终加密以防止长度扩展攻击。当使用PRESENT-80或CLEFIA-128实例化时,得到的MAC分别提供64位或128位安全性,与底层密码的块大小匹配。硬件开销极小——相同的密码核心可同时用于加密和MAC计算。

在将CBC-MAC与轻量级分组密码一起使用时,务必使用CMAC变体(在最终加密前与常数异或),而不是普通CBC-MAC。普通CBC-MAC仅对固定长度消息安全,而CMAC可安全处理可变长度消息。多个物联网协议因这种疏忽而被攻破。

专用轻量级MAC算法

TBC-MAC和LP-MAC

除了基于分组密码的构造,ISO/IEC 29192-6还包含了从头设计用于轻量级操作的专用MAC算法。TBC-MAC(可调分组密码MAC)使用可调分组密码作为核心原语,无需额外状态即可提供内置域分离。LP-MAC(轻量级并行MAC)针对硬件并行性进行了优化,同时处理多个消息块以实现比串行CBC-MAC设计更高的吞吐量。LP-MAC特别适用于高速传感器接口,如SPI或并行总线。

MAC 算法 核心原语 标签大小(位) 安全等级 硬件门数 可并行
CMAC-PRESENT-80 PRESENT-80 分组密码 64 64 位 ~2 000
CMAC-CLEFIA-128 CLEFIA-128 分组密码 128 128 位 ~3 500
TBC-MAC-64 可调分组密码 64 64 位 ~1 800
TBC-MAC-128 可调分组密码 128 128 位 ~3 200
LP-MAC-64 专用置换 64 64 位 ~2 500
LP-MAC-128 专用置换 128 128 位 ~4 000

工程设计洞见

标签截断与安全权衡

该标准允许将MAC标签截断至低至32位,以减少带宽受限信道中的传输开销。然而,截断直接降低了安全等级:由于生日界效应,试图伪造的攻击者平均只需2^(t/2)次尝试即可攻破t位标签。对于32位标签,这仅为2¹⁶次尝试——对于一个坚定的攻击者是可行的。该标准建议大多数应用最小标签长度为64位,高安全环境为128位。

Nonce要求和重放保护

29192-6中的所有MAC构造都是确定性的:相同的消息和密钥总是产生相同的标签。为防止重放攻击,消息必须包含一个nonce(使用一次的数),如单调递增的序列号或时间戳。该标准明确建议在协议级别强制nonce唯一性,并将nonce包含在MAC输入中。不这样做是已部署物联网系统中最常见的漏洞之一。

在低功耗广域网(LPWAN)等带宽极度受限的环境中,MAC标签长度直接关系到频谱效率和电池寿命。标准提出的灵活标签截断机制允许设计者在安全性和通信开销之间做出精细权衡。例如,对于每日仅上报几次数据的环境传感器,使用32位标签配合较长的验证间隔(如每小时更换一次密钥)可以在可接受的风险水平下将每消息开销降低50%以上。但设计者必须清醒认识到,标签截断后的安全强度降低是数学必然,需要通过缩短密钥生命周期或增加访问控制层来补偿。

对于典型的智能家居传感器网络,带64位标签的CMAC-PRESENT-80提供了出色的平衡:在16位MSP430微控制器上,MAC计算在不到50 µs内完成,64位标签每条消息仅增加8字节开销——在大多数低功耗无线电链路上可以忽略不计。
切勿在没有重放保护的情况下使用MAC。记录有效(消息,标签)对的攻击者可以直接重新传输它,除非接收设备检查nonce或时间戳。这是最常见的实际物联网认证故障,标准明确警告此问题。

常见问题

问1:我应该使用专用轻量级MAC,还是使用基于分组密码的CMAC构造?
如果设备已实现第2部分的轻量级分组密码(如用于加密的PRESENT),复用同一密码核心进行CMAC计算可节省面积并简化设计。如果需要更高吞吐量或并行处理,LP-MAC是更好的选择。
问2:如何选择64位还是128位标签?
对于消息生命周期短(秒到分钟)且成功伪造价值低的消费类物联网应用,64位标签足够。对于工业控制系统、医疗设备或金融交易,应使用128位标签。
问3:我可以为加密(第2/3部分)和MAC计算使用相同的密钥吗?
为加密和MAC使用相同密钥是危险的——可能导致跨协议攻击并失效安全证明。应使用通过密钥派生函数从主密钥派生的独立密钥。ISO/IEC 29192-5哈希函数可用作KDF。
问4:LP-MAC与CMAC相比性能如何?
LP-MAC并行处理多个块,在硬件中比CMAC实现约2–4倍吞吐量,代价是面积增加约30%。在串行处理器上的软件中,优势较小——通常为1.5–2倍。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注