汽车网络安全 -- 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等等,这让我们在使用上会更加灵活。

相关推荐
Whoami!1 天前
⓬⁄₇ ⟦ OSCP ⬖ 研记 ⟧ Linux权限提升 ➱ 利用Cron任务配置不当实现提权
网络安全·信息安全·linux提权·cron任务
Godspeed Zhao2 天前
现代智能汽车中的无线技术108——ETC(2)
汽车
Godspeed Zhao2 天前
现代智能汽车系统——SoC
汽车
papaofdoudou2 天前
混动汽车EV比和油耗之间的关系分析
汽车
AUTOSAR组织2 天前
AUTOSAR CP NvM 模块解析
汽车·autosar·软件架构·软件·标准
路上有只喵2 天前
72V30A佳世凯 32140锂电池组装下
汽车
Godspeed Zhao2 天前
现代智能汽车中的无线技术40.1——V2X(13)
汽车
Godspeed Zhao2 天前
现代智能汽车中的无线技术106——ETC(0)
网络·人工智能·汽车
CCC:CarCrazeCurator4 天前
ADCU (ADAS域控制器)技术解析与应用展望
自动驾驶·汽车
Godspeed Zhao4 天前
现代智能汽车中的无线技术107——ETC(1)
汽车