汽车信息安全 -- SHE 密钥更新流程

目录

1.总体流程

2.生成M1~M5

[3. 代码示例](#3. 代码示例)


在之前文章汽车信息安全--SHE中的密钥管理(二)中,我们提到了关于SHE密钥更新的流程。

不过最近在做实际实现和规范的追溯关系时,发现了实际与理想还是存在不小差距,所以还是将流程再梳理梳理。

1.总体流程

在《AUTOSAR_FO_TR_SecureHardwareExtensions》第4.9章节提到了关于密钥更新协议,图太大且细节多,还是从总体来看,如下:

每一步流程就不赘述了,前篇文章有,我们看主要里面具体实现细节。

首先回顾一下背景,SHE规范中对于密钥槽位设计是相对固定的,

其中,MASTER_ECU_KEY主要在更新密钥是作为授权密钥来辅助更新SHE中其他槽位中的密钥(如KEY_1\2等等),因此这个密钥一般都是由ECU的Owner(OEM或者Tier 1)来管理和固化。

在第一步中我们看到Generator会使用数据库中的Kauth、Knew、CID、UID、FID用于生成M1~M5。

其中:

  • Kauth:即授权密钥,一般就是Master key;
  • Knew:要更新的密钥值;
  • CID:密钥更新的计数值,每成功升级一次需要递增;
  • FID:功能ID,目前看多数是要符合HIS SHE和GM-SHE+的规格;
  • UID:特定的ID,其实最容易出问题的就是这个UID;按理说芯片出厂后会固化一个UID但是像TC3x这种UID都是16Bytes且Host可见,无法满足SHE的规格,

所以在实际开发过程中,大家对于这个ID的讨论会更加多一点,例如如果是软件模拟SHE的设计,UID可能就是ECU的ID,那就不一定是芯片厂固化的UID了,有可能是产品批次号+ECU硬件版号,也有可能是供应商本身自己设置的ID,也有可能开发图省事不使能通配符直接使用默认值00(当然这是风险),五花八门。

2.生成M1~M5

上述信息用于生成M1~M5(Message 1~5),这几个消息的格式总结如下:

M1就是简单的消息拼接,会用到UID,SHE ID是指要更新的密钥槽ID、AuthID就是授权Key的密钥槽ID;

M2稍微复杂一点,首先拼接256bits数据,使用CID、FID和KEY(实际应该是Key的值,不知道为啥叫KEYid),中间填充补0。

其中要关注FID,SHE的标准中对NVM Key定义了5种功能属性,如下:

  • WRITE_PROTECTION:写保护,一旦置1,该密钥无法改变,且不可逆;
  • BOOT_PROTECTION:启动保护,一旦置1,如果安全启动发现MAC值不匹配,则有该属性的KEY都将失效,无法使用;
  • DEBUG_PROTECTION:一旦置1,再次复位如果调试器连接MCU,则有该属性的KEY都失效;
  • WILDCARD:通配符保护,一旦置1,就必须使用真实的芯片UID来更新密钥;否则就可以使用特定值进行更新
  • KEY_USAGE:一旦置1,该密钥只能作为MAC的生成或校验;否则用于加解密;
  • CMAC_USAGE:该Flag来源GM-SHE+,有效前提是KEY_USAGE置1;一旦该Flag置1,有该属性的密钥只能用于MAC校验,不能用于生成MAC。

数据拼接好后,使用AES-Miyaguchi-Preneel压缩算法生成第一个K1,然后对上述数据进行CBC加密,IV为0,得到M2。注意,K1= KDF(Kauth | KEY_UPDATE_ENC_C),在标准中KDF定义如下:

这里出现了第一个SHE规范定义的常数,KEY_UPDATE_ENC_C,其他参数如下:

M3相对容易,首先使用KDF(Kauth | KEY_UPDATE_MAC_C)计算出第二个密钥k2,使用k2对(M1 | M2)进行CMAC计算;

M4和M5主要用于验证,首先回顾下M4的结构,M4 = M1 | M4*:

其中,M4*的计算会用到K3,计算公式为 KDF(Knew | KEY_UPDATE_ENC_C),然后使用K3对上述黄框内数据进行ECB加密;

M5则是使用K4对M4进行CMAC计算,K4 = KDF(Knew | KEY_UPDATE_ENC_C)。

3. 代码示例

现在,M1~M5均计算成功了,那每个数据该怎么使用呢?我们来看这个流程:

在CP AUTOSAR中,会使用Crypto_KeyElementSet进行密钥设置,特别的,在说到SHE-key更新时,要求密钥值本身格式按照 M1| M2|M3拼接:

通过Crypto_KeyElementSet将M1M2M3传入后,首先根据要更新的Key是否受WriteProtection,

如没有保护,则继续进行SheKeyUpdate,检查M1中的SHE ID和Auth ID是否在SHE规范定义的密钥槽ID,特别是secret key和master key;

一切准备就绪后,开始验证M3、提取Key、并生成M4和M5,伪代码如下:

cpp 复制代码
/* Step1:Verify M3 */
if( E_OK == UpdateSheKey_VerifyM3())
{
    /* Step2: Check UID */
    if( E_OK == UpdateSheKey_CheckUID())
    {
          /* Step3: Get New Key, include gen k1, decrypt M2, check cid */
          ret = UpdateSheKey_GetNewKey(); 
            
          if (E_OK == ret )
          {
            /* Step4: Store CID\FID */
            UpdateSheKey_SetFid();
            UpdateSheKey_SetCid();
            /* Step5: Generate M4M5 */
            UpdateSheKey_GenM4M5();
          }  
    }
}

ECU将生成好的M4、M5返回给Tester,Tester将其和本地保存的M4M5进行比较,一致则作为密钥更新成功的证据(即Proof),并上报服务器,OEM记录CID+1,作为下次更新的CID。

相关推荐
电子科技圈12 小时前
IAR作为Qt Group独立BU携两项重磅汽车电子应用开发方案首秀北京车展
开发语言·人工智能·汽车·软件工程·软件构建·代码规范·设计规范
三维频道16 小时前
不止于精度:汽车精密锻铸件质检的“数据降维”与方案重构
3d·重构·汽车·工业数字化·蓝光三维扫描仪·汽车供应链·汽车智能制造
3DVisionary18 小时前
【深度实测】从三坐标到全场扫描:汽车精密锻铸件 3D 质检的数字化进阶
3d·汽车·质量检测·精密制造·三维扫描仪·汽车工业·xtop3d
EVERSPIN19 小时前
MCU单片机FOC汽车水泵方案
单片机·嵌入式硬件·mcu·汽车·mcu单片机
RFID舜识物联网19 小时前
RFID耐高温标签:汽车喷涂线智能追溯的破局之道
大数据·人工智能·科技·物联网·安全·汽车
卵男(章鱼)20 小时前
汽车网络通讯分析与仿真工具的系统工程:Vector CANoe与ZLG ZCANPRO深度剖析
开发语言·汽车·php
3DVisionary21 小时前
赋能数智制造:3D扫描技术如何重塑汽车精密锻铸件的质检标准?
汽车·制造·质量控制·工业检测·汽车制造·3d扫描·精密锻造
永霖光电_UVLED2 天前
1.6T 光模块的能效革命
大数据·人工智能·汽车·娱乐
QYR_Jodie2 天前
全球汽车免焊端子市场稳步微增:2025年30.19亿起步,2032年锚定36.77亿,2026-2032年CAGR2.9%
汽车·市场报告
柴狗夫斯基Pro2 天前
刚从极氪8X交付现场回来,汽车消费逻辑确实变了……
汽车