2、安全基础概念:对称加密、非对称加密、哈希、消息认证码、数字签名、密钥管理等核心术语

在深入MCU硬件安全模块(HSM)的工程实现之前,必须先建立一套统一的安全术语体系。汽车电子领域的网络安全(Cybersecurity)与功能安全(Functional Safety)不同,它关注的是攻击者主动发起的恶意行为,而非随机硬件故障。本章将围绕对称加密、非对称加密、哈希函数、消息认证码(MAC)、数字签名和密钥管理这六大核心概念展开,并结合HSM硬件加速器的实际工作方式,说明这些算法在车规级MCU中如何落地。理解这些基础术语,是后续学习密钥协商、安全启动、安全通信和固件升级的基础。

MCU HSM 安全基础概念关系图 MCU HSM 硬件安全模块 密钥存储 / 硬件加速 / 安全隔离 对称加密 AES-128/256 同一密钥加解密 非对称加密 ECC / RSA 公钥加密 / 私钥解密 哈希函数 SHA-256 / SHA-384 单向不可逆 / 完整性 消息认证码 MAC CMAC / HMAC 共享密钥 + 完整性 数字签名 ECDSA / Ed25519 私钥签名 / 公钥验签 密钥管理 生成 / 存储 / 更新 销毁 / 轮换 / 分级 HSM 内部通过硬件隔离保护密钥,对外提供算法加速接口, 所有敏感操作在安全边界内完成,CPU 仅能访问明文数据或密文结果。

上图展示了本章六个核心概念在HSM体系中的位置。对称加密和非对称加密解决机密性问题,哈希函数解决完整性问题,消息认证码同时解决完整性和数据源认证问题,数字签名则进一步提供不可否认性。密钥管理是所有密码算法的支撑,它决定了密钥从生成到销毁整个生命周期的安全性。下面逐一展开。

2.1 对称加密:AES算法与硬件加速

核心原理:对称加密使用同一个密钥进行加密和解密。发送方用密钥K将明文P加密为密文C,接收方用同一个密钥K将密文C解密为明文P。在MCU环境中,最常用的对称加密算法是AES(高级加密标准),支持128位和256位密钥长度。AES-128的密钥长度为16字节,AES-256为32字节。AES算法在硬件实现上非常高效,现代车规MCU的HSM模块通常内置AES硬件加速器,可以在几个时钟周期内完成一个数据块的加解密。

判断方法与操作流程:在HSM开发中,选择对称加密时需考虑以下因素:

  • 密钥长度:车规级应用推荐AES-128或AES-256。AES-128已满足大多数场景,AES-256用于高安全等级场景。
  • 工作模式:ECB模式不推荐用于多数据块,CBC模式需要初始向量(IV),GCM模式同时提供加密和完整性校验。
  • 硬件加速:确认HSM是否支持AES硬件加速,以及是否支持DMA传输,避免CPU参与大量数据搬运。
// 伪代码示例:使用HSM的AES-GCM模式加密
hsm_aes_gcm_encrypt(
    key_id = KEY_STORAGE_1,      // 密钥存储在HSM内部
    iv = 12_byte_nonce,          // 随机数
    plaintext = data_buf,        // 明文数据
    ciphertext = out_buf,        // 密文输出
    tag = auth_tag               // 128位认证标签
);

实战场景:在车载以太网通信中,SHE(安全硬件扩展)或HSM模块使用AES-128-CMAC作为消息认证码,同时使用AES-128-CBC或GCM加密诊断数据。例如,UDS诊断服务中的安全访问(SecurityAccess)功能,ECU使用AES-128加密种子(Seed)生成密钥(Key),防止未经授权的诊断操作。

经验提醒:在MCU上使用对称加密时,务必确认HSM的密钥存储位置。如果密钥以明文形式存储在Flash中,攻击者可以通过调试接口读取,HSM的价值就完全丧失。正确的做法是将密钥写入HSM的专用密钥槽(Key Slot),CPU只能通过密钥ID引用,无法直接读取密钥值。

2.2 非对称加密:ECC与RSA的工程选择

核心原理:非对称加密使用一对密钥:公钥(Public Key)和私钥(Private Key)。公钥可以公开分发,私钥必须严格保密。用公钥加密的数据只能用私钥解密,反之亦然。在MCU环境中,RSA和ECC(椭圆曲线密码)是两种主流算法。RSA基于大整数分解难题,密钥长度通常为2048位或3072位;ECC基于椭圆曲线离散对数难题,密钥长度短得多,256位ECC即可提供与3072位RSA相当的安全强度。对于资源受限的MCU,ECC在计算速度和存储占用上具有明显优势。

判断方法与操作流程:选择非对称算法时,需评估以下维度:

对比维度 RSA-2048 ECC P-256 适用场景
密钥长度 2048位(256字节) 256位(32字节) ECC节省存储空间
签名速度 较慢(毫秒级) 较快(微秒级) ECC适合高频签名
验签速度 较快 较慢 RSA验签有优势
硬件支持 部分HSM支持 现代HSM普遍支持 新平台优先ECC

实战场景:在安全启动(Secure Boot)流程中,Bootloader使用存储在OTP(一次性可编程)或HSM中的公钥验证应用固件的数字签名。由于验签操作发生在启动阶段,对时间敏感,许多设计选择RSA-2048验签,因为RSA验签(使用公钥)比ECC验签更快。而在V2X(车联网)通信中,由于消息频率高、数据量大,通常使用ECDSA签名,因为签名速度快且密钥短。

风险说明:非对称加密的计算开销远高于对称加密。在MCU上,一次RSA-2048私钥操作可能需要数百毫秒,这会阻塞实时任务。务必使用HSM的硬件加速器,并考虑将非对称操作放在低优先级任务中执行,或使用异步调用方式。

2.3 哈希函数:SHA-2家族与完整性校验

核心原理:哈希函数将任意长度的输入数据映射为固定长度的输出值(摘要)。理想的哈希函数具有以下特性:单向性(无法从摘要反推原始数据)、抗碰撞性(难以找到两个不同输入产生相同摘要)、雪崩效应(输入微小变化导致输出巨大变化)。在MCU安全领域,SHA-256和SHA-384是最常用的哈希算法,分别产生32字节和48字节的摘要。

判断方法与操作流程:哈希函数在HSM中的典型应用包括:

  1. 固件完整性校验:计算固件镜像的SHA-256哈希值,与出厂时存储的参考值比对。
  2. 密钥派生:使用HKDF(基于HMAC的密钥派生函数)从主密钥派生会话密钥。
  3. 数字签名预处理:对消息先做哈希,再对摘要进行签名,提高效率。
// 使用HSM计算SHA-256哈希
uint8_t hash[32];
hsm_sha256_compute(
    data = firmware_image,
    length = image_size,
    digest = hash
);

实战场景:在OTA(空中下载)升级中,下载完成后ECU首先计算整个固件包的SHA-256哈希,与服务器下发的哈希值比对。如果一致,说明固件在传输过程中未被篡改;如果不一致,则丢弃固件包并记录错误事件。这个操作通常在HSM内部完成,确保哈希计算过程不被恶意软件干扰。

重点提示:哈希函数不提供机密性,也不提供数据源认证。攻击者可以同时修改数据和哈希值。因此,哈希必须与消息认证码或数字签名结合使用,才能确保数据来源可信。

2.4 消息认证码:CMAC与HMAC的差异

核心原理:消息认证码(MAC)是一种带密钥的哈希函数,它同时提供完整性和数据源认证。只有持有相同密钥的通信双方才能计算和验证MAC值。CMAC(基于分组密码)和HMAC(基于哈希函数)是两种主要实现方式。CMAC底层使用AES算法,输出长度与分组大小相同(128位);HMAC底层使用SHA-256等哈希函数,输出长度与哈希长度相同。

判断方法与操作流程:选择CMAC还是HMAC,取决于硬件支持和应用场景:

  • CMAC:适合HSM已集成AES硬件加速器的场景,计算速度快,密钥管理统一。
  • HMAC:适合需要更长输出(如256位)的场景,或已有SHA硬件加速器的情况。

实战场景:在CAN FD总线通信中,ECU之间使用CMAC保护关键控制消息。例如,刹车控制单元向发动机控制单元发送扭矩请求时,附带一个基于共享密钥的CMAC值。接收方使用相同的密钥计算CMAC并比对,防止攻击者注入伪造的刹车指令。

风险说明:MAC验证必须使用恒定时间比较算法,避免因比较时间差异泄露密钥信息。在MCU上实现时,应使用HSM提供的安全比较函数,而不是简单的memcmp。

2.5 数字签名:ECDSA与不可否认性

核心原理:数字签名是公钥密码学的核心应用。签名者使用私钥对消息摘要进行签名,验证者使用公钥验证签名。数字签名提供三个安全属性:完整性(消息未被篡改)、认证性(消息确实来自私钥持有者)、不可否认性(签名者无法否认签名行为)。在车规级应用中,ECDSA(椭圆曲线数字签名算法)是主流选择,基于NIST P-256曲线。

判断方法与操作流程:数字签名的典型流程:

  1. 签名生成:发送方计算消息的SHA-256哈希,使用私钥对哈希进行ECDSA签名,将消息和签名一起发送。
  2. 签名验证:接收方计算消息的SHA-256哈希,使用发送方的公钥验证签名。验证通过则确认消息完整且来源可信。

实战场景:在安全启动中,Bootloader使用存储在HSM中的根公钥验证应用固件的签名。这个公钥在芯片出厂时烧录到一次性可编程(OTP)存储器中,无法被修改。攻击者即使篡改了固件,也无法生成有效的签名,因为私钥存储在OEM的HSM中,物理隔离。

经验提醒:ECDSA签名过程中需要生成随机数k。如果k值重复或可预测,攻击者可以恢复私钥。务必使用HSM内部的真随机数发生器(TRNG)生成k值,不要使用伪随机数发生器。

2.6 密钥管理:从生成到销毁的全生命周期

核心原理:密钥管理是密码系统的基石。即使算法再强,如果密钥泄露,整个安全体系将崩溃。密钥管理涵盖密钥的生成、存储、分发、使用、更新、撤销和销毁。在MCU HSM中,密钥管理由硬件强制实施:密钥以密文形式存储在HSM内部或受保护的非易失性存储器中,CPU无法直接读取明文密钥。

判断方法与操作流程:密钥管理的关键操作:

生命周期阶段 操作内容 HSM硬件支持
密钥生成 使用TRNG生成随机密钥 硬件TRNG,密钥直接写入密钥槽
密钥存储 密钥加密后存储 密钥槽(Key Slot),硬件隔离
密钥使用 加解密、签名、MAC计算 硬件加速,CPU不接触明文密钥
密钥更新 定期更换会话密钥 支持密钥导入/导出(加密形式)
密钥销毁 删除不再使用的密钥 硬件擦除,防止数据残留

实战场景:在车载网络通信中,ECU之间使用会话密钥加密数据。会话密钥由主密钥(Master Key)派生,主密钥存储在HSM的密钥槽中。每次车辆启动时,ECU通过密钥协商协议(如Diffie-Hellman)生成新的会话密钥,会话结束后立即销毁。这样即使某次会话密钥泄露,也不会影响其他通信。

重点提示:密钥分级是HSM设计的重要原则。根密钥(Root Key)存储在OTP中,用于保护二级密钥;二级密钥用于保护会话密钥;会话密钥用于实际数据加解密。这种分级结构确保即使会话密钥泄露,攻击者也无法获取根密钥。

2.7 常见误区与总结复盘

在MCU HSM开发中,工程师常犯以下错误:

  • 误区一:认为哈希函数可以替代MAC。哈希不包含密钥,无法验证数据来源。
  • 误区二:在CPU中处理密钥运算。这会导致密钥暴露在内存中,被调试器或恶意软件读取。
  • 误区三:忽略密钥更新机制。长期使用同一密钥会增加泄露风险。
  • 误区四:使用ECB模式加密多块数据。ECB模式相同明文产生相同密文,泄露数据模式。