4. AURIX密钥层级与信任根
在AURIX车载安全工程中,密钥不是“一把钥匙开一把锁”的简单概念,而是一套具有明确层级、明确生命周期和明确安全域边界的密钥体系。理解这套体系的关键,是回答三个问题:谁是最初的信任起点?密钥如何从高等级向低等级派生?不同安全域之间如何隔离而不互相污染?本节围绕主密钥、派生密钥、会话密钥和设备唯一密钥四层结构,结合HSM(Hardware Security Module)与CSRM(Crypto Service Request Manager)的实际使用方式,说明信任锚点与安全域划分的工程做法。
四层密钥结构:从信任根到会话
AURIX的密钥层级通常按“信任强度递减、使用范围递增、生命周期递减”的原则组织。最顶层是主密钥(Master Key),它不直接参与业务加解密,而是作为整个密钥树的根,用于派生下一级密钥。主密钥一般由OEM或Tier1在产线注入,存储在HSM的密钥槽中,并受HSM访问权限保护,软件侧只能通过CSRM发起“派生”请求,无法读出明文。
第二层是派生密钥(Derived Key),由主密钥通过KDF(如基于AES-CMAC的NIST SP 800-108 KDF)结合“用途标签+上下文”生成。例如,用标签“SECOC”派生SecOC通信密钥,用标签“DIAG”派生诊断认证密钥。派生密钥的作用是把不同安全域隔离开:即使某个派生密钥泄露,也无法反推主密钥,更无法影响其他派生分支。
第三层是会话密钥(Session Key),用于一次通信会话或一次刷写过程。它通常由派生密钥与随机数(Nonce)或计数器再次派生,具备“一次一密”特性,会话结束即失效。会话密钥的价值在于限制单次密钥暴露的影响范围,并支持前向安全性。
第四层是设备唯一密钥(Device Unique Key),它与芯片的UID绑定,通常由HSM内部不可导出的密钥与UID共同生成,用于设备身份认证、证书签发或安全启动校验。设备唯一密钥不参与批量派生,而是作为“设备身份锚点”存在。
信任锚点:为什么主密钥不能“被读出来”
信任锚点的本质是“不可再向上追溯的信任起点”。在AURIX中,这个起点通常落在HSM内部:主密钥由产线通过安全通道注入HSM密钥槽,注入后即设置为不可导出(Non-exportable)。软件侧即使拥有CSRM访问权限,也只能请求“用主密钥派生某标签的密钥”,而不能请求“读出主密钥”。这种设计把信任锚点从“软件保管”转移到“硬件保管”,攻击者即使拿到固件也无法直接提取根密钥。
工程上需要特别注意的是:信任锚点一旦注入,就不应再变更。如果产线需要支持多车型或多项目,正确做法是注入不同的主密钥,而不是共用同一把主密钥再靠软件区分。共用主密钥会让一个项目的密钥泄露波及所有项目,破坏安全域隔离的前提。
安全域划分:按“用途+权限+生命周期”切分
安全域不是按软件模块划分,而是按密钥的用途、访问权限和生命周期划分。以典型AURIX项目为例,可以划分为三个域:
- 通信安全域:包含SecOC认证密钥、MAC密钥,生命周期与整车生命周期一致,但只允许CAN/LIN驱动和HSM访问,应用层不可直接读取。
- 诊断安全域:包含UDS 0x27/0x29认证密钥,生命周期较短,支持通过诊断服务更新,但更新必须经过安全刷写流程。
- 刷写安全域:包含固件签名验证密钥和刷写会话密钥,生命周期最短,每次刷写会话结束后会话密钥即销毁。
三个域之间通过“派生标签”和“密钥槽权限”双重隔离。派生标签保证密钥材料不同,密钥槽权限保证即使某个域被攻破,也无法通过CSRM调用其他域的密钥。例如,通信域的代码即使被篡改,也无法请求诊断域的派生密钥,因为HSM会检查调用者的访问权限位。
派生过程示例:从主密钥到会话密钥
下面给出一个基于AES-CMAC的KDF派生示例,用于说明实际工程中密钥是如何一步步生成的。示例参数为教学假设,不代表任何具体芯片的实测值。
// 假设主密钥 MK 已注入 HSM 密钥槽 Slot 0,不可导出
// 派生标签:SECOC
// 上下文:ECU_ID = 0x1234
// 步骤1:派生通信域密钥
KDF(MK, Label="SECOC", Context=ECU_ID) -> DK_SECOC
// 步骤2:会话密钥派生
Nonce = HSM_RNG() // 每次上电生成
SessionKey = KDF(DK_SECOC, Label="SESSION", Context=Nonce)
// 步骤3:SecOC MAC 计算
MAC = AES-CMAC(SessionKey, SecOC_PDU_Data)
// 步骤4:会话结束
SessionKey = 0 // 清零,不可恢复
观察这段过程可以看到:主密钥从未离开HSM;派生密钥DK_SECOC可以长期驻留,但只用于派生会话密钥;会话密钥每次上电重新生成,用完即毁。这样即使某次会话密钥被侧信道攻击获取,攻击者也只能影响当前会话,无法反推DK_SECOC,更无法触及主密钥。
设备唯一密钥的定位
设备唯一密钥与前三层不同,它不参与“主密钥→派生密钥→会话密钥”的派生链,而是与芯片UID绑定,作为设备身份的唯一标识。典型用途包括:向PKI申请设备证书、参与安全启动的本地校验、作为诊断0x29的最终身份凭证。设备唯一密钥通常由HSM内部密钥与UID通过不可逆函数生成,同样不可导出。它的存在使得“同一固件烧录到不同芯片”时,每颗芯片拥有不同的身份密钥,避免批量克隆。
总结来看,AURIX密钥层级的设计核心是“信任向上集中、使用向下分散”。主密钥和信任锚点集中在HSM内部,不可导出;派生密钥按安全域分散,承担长期业务密钥角色;会话密钥按会话分散,承担短期保护角色;设备唯一密钥独立于派生链,承担身份锚点角色。安全域划分则通过标签和权限双重手段,确保各域密钥互不干扰。理解这套结构,是后续实现CSRM调用、密钥更新和故障排查的基础。