密码学基础回顾:车端必备的几把"钥匙"

说实话,每次带新人做车联网项目,我都要先花半天时间跟他们捋一遍密码学基础。不是他们基础差,而是车端场景太特殊——算力有限、网络不稳定、密钥还不能裸奔。今天我就把这几个核心概念,用我踩过的坑串起来讲。

一句话总结本章:对称加密管速度,非对称加密管分发,哈希管完整性,签名管身份,KDF管派生,ECC管效率。车端一个都不能少。

2.1 对称加密 vs 非对称加密:一个管"锁门",一个管"发钥匙"

对称加密,说白了就是一把钥匙开一把锁。加密和解密用同一个密钥。AES是车端最常用的,128位密钥就够用,256位更安全但稍慢。

非对称加密呢?公钥加密,私钥解密。公钥随便发,私钥自己藏。RSA和ECC是两大主流。RSA在车端有个致命问题——密钥越长,签名越慢。2048位的RSA签名,在老旧ECU上能卡到你怀疑人生。

特性 对称加密 (AES) 非对称加密 (ECC/RSA)
密钥数量 1个 2个(公钥+私钥)
速度 快(硬件加速常见) 慢(尤其RSA)
典型用途 加密CAN/FlexRay数据 密钥交换、数字签名
车端痛点 密钥分发困难 计算开销大

我的经验:车端实际项目中,我习惯用ECC做密钥协商,协商出来的会话密钥再用AES加密后续通信。这叫"混合加密",既安全又高效。

2.2 哈希函数与数字签名:防篡改的"指纹"和"手印"

哈希函数,就是把任意长度的数据,压缩成固定长度的"指纹"。SHA-256是车端标配。你想想看,一个固件几兆字节,哈希一下变成32字节。升级时比对哈希值,就知道固件有没有被改过。

数字签名呢?就是先用哈希算出指纹,再用私钥加密这个指纹。验证时用公钥解密指纹,重新算一遍哈希,比对是否一致。

我曾经在一个T-Box项目里遇到过OTA升级包被篡改的事。攻击者在中间人位置改了固件,但签名校验没通过——因为哈希值对不上。嗯,从那以后我再也不敢省略签名验证步骤了。

避坑指南:哈希碰撞虽然理论上存在,但SHA-256至今没有实际碰撞案例。别为了省算力用MD5或SHA-1,我在某OEM的ECU里见过用MD5的,吓得我连夜让他们改方案。

2.3 密钥派生函数 (KDF):一个种子生出无数密钥

KDF的作用很简单:从一个主密钥(种子),派生出多个子密钥。为什么要这么做?

  • 不同用途用不同密钥:加密用一把,签名用另一把
  • 密钥定期轮换:派生时加个计数器就行
  • 降低单点风险:主密钥泄露,子密钥全废?不,KDF可以设计成单向的

车端常用的KDF是HKDF(HMAC-based Key Derivation Function)。它有三个输入:

HKDF(salt, input_key_material, info) → output_key_material
  • salt:随机数,增加熵
  • input_key_material:主密钥
  • info:上下文信息,比如"encryption_key_v1"

我个人习惯在车端每个ECU出厂时注入一个唯一主密钥,然后通过HKDF派生出CAN加密密钥、诊断认证密钥、日志加密密钥。这样即使某个子密钥泄露,也不会波及全局。

2.4 椭圆曲线密码学 (ECC):车端的"省油"之选

ECC为什么适合车端?因为同样的安全强度下,ECC的密钥更短、计算更快。

安全等级 RSA密钥长度 ECC密钥长度
80位 1024位 160位
112位 2048位 224位
128位 3072位 256位
256位 15360位 512位

你看,128位安全等级下,ECC只要256位密钥,RSA要3072位。在车端那点可怜的Flash和RAM里,这个差距是致命的。

ECC在车端的主要应用场景:

  • 数字签名:ECDSA,用于固件签名、V2X通信
  • 密钥交换:ECDH,用于建立会话密钥
  • 证书体系:车端证书通常用ECC密钥对

我的建议:新项目直接上ECC,别再用RSA了。但要注意,ECC的曲线选择很重要。车端推荐使用NIST P-256或Curve25519。P-256硬件支持更广,Curve25519性能更好且没有专利问题。

2.5 知识体系总览

下面这张图,把本章的核心知识点串起来了。你可以把它当作车端密码学的"地图"。

车端密码学知识体系 车端密码学 对称加密 (AES) 非对称加密 (ECC) 哈希 + 数字签名 密钥派生 (KDF) CAN/FlexRay加密 密钥交换/证书 OTA固件校验 多密钥派生 核心原则 混合加密:ECC协商密钥 → AES加密数据 签名验证:哈希保证完整性,签名保证身份 密钥隔离:KDF从主密钥派生不同用途的子密钥

2.6 车端选型建议

最后,我根据实际项目经验,给出一份车端密码学选型清单:

  • 对称加密:AES-128-GCM(带认证加密,防重放)
  • 非对称加密:ECC P-256 或 Curve25519
  • 哈希函数:SHA-256
  • 数字签名:ECDSA 或 Ed25519
  • 密钥派生:HKDF-SHA256
  • 随机数生成:硬件TRNG(真随机数生成器)

重要提醒:千万别自己实现密码算法。用成熟的库,比如OpenSSL、mbedTLS、WolfSSL。我曾经见过一个团队自己写AES,结果侧信道攻击直接泄露了密钥。嗯,专业的事交给专业的库。

好了,密码学基础就回顾到这里。这些概念在后面章节会反复用到——尤其是密钥托管和自管架构中,ECC证书体系和KDF派生策略是核心中的核心。