2. 密码学基础

在嵌入式密钥系统的量产交付中,密码学算法不是抽象概念,而是直接决定密钥如何生成、如何分发、如何验证、如何存储的工程约束。理解五类基础密码学原语的定位与代价,才能在资源受限的 MCU、安全芯片和产线设备之间做出正确取舍。

一、五类原语的核心定位

密码学原语可以按“是否可逆”和“是否带密钥”两个维度划分。对称加密与非对称加密解决机密性;哈希算法解决完整性;消息认证码解决完整性与来源认证;数字签名解决不可否认性与身份认证。

  • 对称加密:同一密钥加解密,速度快、资源占用低,适合大批量数据加密,但密钥分发困难。
  • 非对称加密:公钥加密、私钥解密,解决密钥分发问题,但运算慢、功耗高,通常只用于加密会话密钥。
  • 哈希算法:单向压缩,输出固定长度摘要,用于完整性校验和密钥派生,不提供机密性。
  • 消息认证码:带密钥的哈希,验证数据未被篡改且来自持有密钥的一方,常用于固件包和指令认证。
  • 数字签名:私钥签名、公钥验签,提供不可否认性,是安全启动和固件升级的信任根。
嵌入式场景下五类密码学原语的适用性对照 对称加密 AES-128/256 SM4 速度快 · 资源低 适合大数据量 密钥分发难 典型:固件加密 非对称加密 RSA-2048/4096 ECC P-256 / SM2 解决密钥分发 公钥可公开 运算慢 · 功耗高 典型:密钥协商 哈希算法 SHA-256 / SHA-3 SM3 单向 · 定长输出 抗碰撞 不提供机密性 典型:完整性校验 消息认证码 HMAC-SHA256 CMAC-AES 带密钥的哈希 验证来源与完整性 双方共享密钥 典型:指令认证 数字签名 ECDSA RSA-PSS 私钥签 · 公钥验 不可否认性 私钥保护要求高 典型:安全启动 嵌入式量产交付中的组合使用原则 对称加密 + MAC 保护固件与通信数据 非对称 + 哈希 密钥协商与身份绑定 数字签名 + 安全启动 建立信任根与防篡改 哈希 + KDF 密钥派生与分散 注:嵌入式选型需同时考虑算力、RAM/Flash、功耗、侧信道防护与密钥存储安全等级 量产阶段优先选择硬件加速或安全芯片支持的算法组合,避免纯软件实现成为瓶颈

二、嵌入式场景的选型约束

嵌入式设备与服务器不同,算法选型必须同时考虑算力、内存、功耗和密钥存储安全。下表给出常见算法在典型 Cortex-M4 平台上的工程参考。

算法类别 典型算法 RAM 占用 相对速度 嵌入式适用场景
对称加密 AES-128-CTR 约 1–2 KB 快 固件加密、通信数据加密
非对称加密 ECC P-256 约 4–8 KB 慢 密钥协商、会话密钥封装
哈希算法 SHA-256 约 1 KB 中 完整性校验、密钥派生
消息认证码 HMAC-SHA256 约 2 KB 中 固件包认证、指令认证
数字签名 ECDSA P-256 约 4–8 KB 慢 安全启动、固件签名验证

三、量产交付中的典型组合流程

在产线烧录环节,通常采用“非对称签名 + 哈希 + 对称加密”的组合方案。以下是一个典型的固件包保护与验证流程:

1. 产线工具生成随机 AES 会话密钥 K_session
2. 使用 K_session 对固件镜像执行 AES-128-CTR 加密
3. 对密文计算 SHA-256 摘要
4. 使用产线私钥对摘要执行 ECDSA 签名
5. 将密文、签名、签名证书打包为交付固件包
6. 设备端使用预置公钥验签,确认摘要一致
7. 使用安全存储中的密钥解密 K_session,再解密固件
8. 解密后再次计算哈希,与签名中的摘要比对

关键点:签名保护的是摘要,摘要来自密文,因此签名同时覆盖了完整性和来源认证。设备端必须使用安全存储中的公钥,且公钥本身不能被篡改。

四、常见误区与复盘

  • 误区一:用哈希代替加密。哈希是单向的,不能恢复明文,不能用于需要解密的固件保护场景。
  • 误区二:用对称加密代替签名。对称加密双方共享密钥,无法提供不可否认性,产线内部人员可以伪造固件。
  • 误区三:忽略密钥生命周期。量产密钥一旦泄露,所有已交付设备都面临风险,必须设计密钥轮换和吊销机制。
  • 误区四:纯软件实现高安全等级算法。在无硬件加速的 MCU 上,AES 和 ECC 的侧信道防护很难保证,建议使用安全芯片或硬件加密引擎。

排障提示:如果设备验签失败,优先检查公钥是否被正确烧录、签名数据是否包含长度字段、哈希计算是否覆盖了完整密文。量产阶段建议在产线工具中增加签名自检步骤,避免批量烧录后才发现密钥配置错误。

五、小结

对称加密、非对称加密、哈希、消息认证码和数字签名在嵌入式密钥系统中各有不可替代的位置。量产交付的核心不是选择“最强”的算法,而是根据设备算力、安全等级和产线流程,组合出可验证、可追溯、可轮换的密钥保护方案。理解每类原语的边界,才能避免把哈希当加密、把对称密钥当签名密钥使用等常见工程错误。