汽车网络安全 -- MAC介绍:CMAC与CBC-MAC不能混为一谈

目录

1.什么是MAC

2.CMAC

3.HMAC

4.小结


1.什么是MAC

MAC全称Message authentication code,是经过特定算法后产生的一小段数据信息,用于校验某数据的完整性和真实性。在数据传递过程中,可检查其内容是否被更改过,不管更改的原因是来自意外或是蓄意攻击。同时可以作为数据来源的身份验证,确认数据的来源。常见的MAC算法包括CMAC和HMAC。

2.CMAC

CMAC全称Cipher-based message authentication codes,利用分组加密和私钥来生成MAC,用于验证消息的完整性和真实性,常见算法如AES-CMAC。

根据NIST 800-38B描述,CMAC算法的核心是CBC-MAC的一种变体OMAC1,该算法是为了解决CBC-MAC本身缺陷。

在2001年,John Black and Phillip Rogaway为了解决CBC-MAC缺陷,提出了改进措施,命名为XCBCa,但该改进措施所需密钥至少为3个,为此Tetsu Iwata and Kaoru Kurosawa 在2003年进一步提出One-key CBC MAC(OMAC),用于解决密钥长度问题。

CBC-MAC是最早的MAC算法,原理非常简单,就是使用CBC进行计算,取最后一个分区作为Tag,如下图:

图1 CBC-MAC

但该方式容易被攻击者构造新的数据\MAC,在消息长度不固定的情况下不安全。

CMAC仍旧基于CBC-MAC对消息数据进行处理,区别在于最后MAC生成时根据数据长度和派生的不同密钥进行处理,如下图所示:

图2 AES-CMAC的两种情况

  • Case 1:消息数据是数据块的整数倍,使用私密密钥k1生成MAC(T);
  • Case 2:消息数据不能整除,使用私密密钥k2生成MAC(T);

上图中,AES_KEY表示实际输入的K,K1、K2分别由AES_KEY进行派生,基本步骤如下:

两个使用到的常数:

const_Zero = 0x00000000000000000000000000000000

const_Rb(AES) = 0x00000000000000000000000000000087

const_Rb(DES\3DES) = 0x000000000000001B

  1. 使用AES_KEY对全0输入块加密得到变量L;
  2. K1生成:如果L的最高有效位为0,K1 = L << 1; 如果L的最高有效位为1,K1 = const_Rb⊕( L << 1)。
  3. K2生成:如果K1的最高有效位为 0, K2 = K1 << 1; 如果K1的最高有效位为 1, K2 = const_Rb⊕( K1<< 1)。

特别是,针对数据不是数据块整数倍的情况,需要对最后一块进行填充,填充方式为

b (t) ||10...0,填充长度 = 数据块-len(t)。

需要注意的是,生成的MAC(也成TAG)长度是可以截取的,根据标准推荐,绝大部分应用应该至少保证8个字节长度的MAC,以抵御猜想攻击。

​​​​​​​3.HMAC

HMAC全称Keyed-Hashing for Message Authentication,同样是为了满足数据的完整性和真实性。

HMAC可以基于任何hash函数实现,例如SHA512、SHA-1、MD5等,而所谓Keyed-Hashing,是将密钥参与到Hash计算,而不是做任何加解密操作。

根据RFC 2104介绍,针对消息数据m的HMAC计算应采用如下公式:

MAC(m) = HMAC(K,m)= H( K1⊕opad) || H(K1⊕ ipad || m))

其中,

  • H():某Hash函数;
  • K:私钥;
  • K1:有私钥K派生出的密钥
  • 填充opad:outer pad,固定0x5c5c..5c 填充至hash算法分块大小;
  • 填充ipad:inner pad,固定0x3636...36填充至hash算法分开大小;

具体步骤如下:

  1. 判断Len(K) == B(Hash函数分块大小),如是,设置K1 = K,直接进入第3步;如不是,进入第2步;
  2. 如果Len(K) > B,则需要使用hash函数对K进行处理,得到L字节长度字符串(例如SHA256可以得到32byte摘要值),并在该L字符串后补0到B字节长度 L||00..00,整体作为K0;如果Len(K)<B,则直接填充00到B字节长度作为K0;
  3. 将K0与ipad进行异或得到值Si,作为m的头部分,记为Si || m;
  4. 对Si || m进行hash处理,得到摘要MAC1;
  5. 将K0与opad进行异或得到值So,作为MAC1的头部分,记为So || MAC1;
  6. 再对So || MAC1进行hash处理,得到最终摘要MAC(m)。

以SHA-256为例,每组分块为512bit,得到32byte摘要值,具体流程如下:

图 3 HMAC-SHA256过程

4.小结

可以看到HMAC、CMAC均可以保证数据的完整性和真实性,RFC2104 HMAC于1997年发布,CMAC于2006年发布,针对HMAC的测试向量更容易在网上找到,并且由于HMAC不涉及加解密,在效率上应该更快一点。

但是从实际角度看,汽车行业多用AES-CMAC,猜想应该是很多MCU最开始就是根据SHE规范设计的硬件加速引擎,里面就要求使用CMAC,其次就是针对CAN通信,使用AES-CMAC在分组填充上更为优化,毕竟标准can一帧数据才8byte。总体而言,随着汽车芯片对信息安全重视程度不断提高,HSM支持的算法将会越来越多,包括国密SM2\3\4等等,这让我们在使用上会更加灵活。

相关推荐
LONGZETECH15 小时前
新能源汽车动力电池检测仿真教学系统:C/S 分层架构与数字化实训落地全解析
大数据·c语言·开发语言·人工智能·架构·系统架构·汽车
Godspeed Zhao21 小时前
跨越天际:从智能汽车到 eVTOL 的适航与系统级开发37——增强现实平显(AR-HUD)与合成视觉系统(SVS)在低能见度进近中的应用
汽车·ar·evtol
Luminbox紫创测控1 天前
GB/T 5137.3 2020标准:汽车安全玻璃耐辐照与耐模拟气候试验方法
人工智能·测试工具·汽车·安全性测试·uv·测试标准
wuhanzhanhui2 天前
充电桩+三电技术2026武汉国际新能源汽车三电及充电桩技术展览会抢先看
汽车
DS小龙哥2 天前
基于树莓派PICO2设计的汽车少儿安全预警系统
网络·安全·汽车
云布道师2 天前
【云故事探索】NO.26 |小鹏汽车:一朵云上的AI造车之旅
人工智能·汽车
星创易联3 天前
2026智能驾驶新基建:车载以太网、5G-A与V2X如何重构“车路云”?
5g·汽车·车载通信·无人矿卡·车载网关
磐时信息技术3 天前
GB 44495/44496正式施行:智能网联汽车信息安全与软件升级进入强制合规阶段
网络安全·信息安全·汽车·gb44495·gb44496
wuhanzhanhui5 天前
汽车照明新势力崛起,2026武汉国际汽车电子车灯照明技术展览会抢先看
汽车
cd_949217215 天前
汽车诊断仪进入“软件定义设备”时代:谁能跑赢下半场
汽车