3、密码学基础(上):对称加密(AES-128/256)、分组模式(ECB/CBC/CTR/GCM)、密钥长度与安全等级
各位同学,咱们今天聊聊密码学。说实话,很多做嵌入式、做车载的朋友,一听到「密码学」三个字就头大。觉得那是数学博士干的事。其实没那么玄乎。
我当年刚接触CAN总线加密时,也踩过不少坑。有一次,我图省事,直接用了ECB模式加密报文。结果呢?测试的时候发现,同样的数据包,加密后的密文居然一模一样。这在车载总线上一眼就能被人看出来规律。嗯,从那以后,我再也不敢乱选模式了。
今天这一讲,咱们就把对称加密这件事彻底讲透。你只要记住几个核心概念,后面做CAN FD安全通信时,心里就有底了。
3.1 对称加密:一把钥匙开一把锁
对称加密,说白了就是「加密和解密用同一把钥匙」。你想想看,就像你家大门钥匙,锁门用它,开门也用它。
在车载网络中,ECU A 要发一条报文给 ECU B。A 用密钥 K 把明文加密成密文,B 收到后用同样的密钥 K 解密。就这么简单。
那问题来了:密钥怎么安全地分发给双方? 这就是密钥管理的范畴,咱们后面章节会专门讲。今天先聚焦在加密算法本身。
3.2 AES-128 vs AES-256:选哪个?
AES(Advanced Encryption Standard)是目前最主流的对称加密算法。它有三个变种:AES-128、AES-192、AES-256。数字代表密钥长度,单位是比特。
| 算法 | 密钥长度 | 轮数 | 安全等级 |
|---|---|---|---|
| AES-128 | 128 bit (16字节) | 10轮 | 足够安全 |
| AES-192 | 192 bit (24字节) | 12轮 | 更安全 |
| AES-256 | 256 bit (32字节) | 14轮 | 最高安全 |
我个人习惯,在车载项目里优先选 AES-128。为什么?
- 性能:AES-128 比 AES-256 快约 40%。在 CAN FD 这种带宽有限、实时性要求高的场景下,每一微秒都很宝贵。
- 安全性:AES-128 目前没有任何有效的攻击手段。你想想看,暴力破解需要 2^128 次尝试,这个数字大到什么程度?比宇宙中的原子数还多。
- 合规性:很多车规级安全标准(如 ISO 21434)只要求 AES-128 即可。
3.3 分组模式:怎么切蛋糕?
AES 是分组加密算法。它一次只能加密 16 字节(128 bit)的数据。如果你的报文超过 16 字节,就得切成一块一块的。这个「切法」就是分组模式。
常见的模式有四种:ECB、CBC、CTR、GCM。咱们一个一个说。
3.3.1 ECB 模式:千万别用!
ECB(Electronic Codebook)是最简单的模式。每块数据独立加密,互不影响。
优点: 可以并行计算,速度快。
缺点: 同样的明文块,加密后得到同样的密文块。这在车载场景下是致命的。
我曾经在一个项目中看到有人用 ECB 加密 CAN 报文。结果呢?攻击者只要抓几次包,就能根据密文的重复模式推断出报文内容。比如刹车信号、油门信号,这些值变化范围有限,很容易被猜出来。
3.3.2 CBC 模式:最常用
CBC(Cipher Block Chaining)模式引入了「初始向量(IV)」。每个明文块先与前一个密文块异或,再加密。
这样一来,同样的明文块,因为位置不同、前一块密文不同,最终加密结果也不同。
优点: 安全性好,没有 ECB 的重复问题。
缺点: 不能并行加密,解密可以并行。而且如果前一块密文出错,会影响后面所有块的解密。
在车载项目中,CBC 模式用得很多。我个人习惯在 CAN FD 网关通信中使用 CBC,配合一个随机生成的 IV。
3.3.3 CTR 模式:流式加密
CTR(Counter)模式把 AES 变成了流密码。它用一个计数器 + 密钥生成密钥流,然后与明文异或得到密文。
优点:
- 可以并行加密和解密
- 不需要填充(padding)
- 错误不会传播
缺点: 计数器不能重复使用。如果同一个密钥下计数器值重复了,加密就失效了。
CTR 模式在 CAN FD 中也很实用。尤其是当你需要加密长度不固定的报文时,CTR 不需要填充,省事。
3.3.4 GCM 模式:一步到位
GCM(Galois/Counter Mode)是 CTR 模式的升级版。它在加密的同时,还能生成一个认证标签(MAC)。
这意味着什么?
- 加密 + 完整性校验,一步完成
- 能检测出数据是否被篡改
在车载安全通信中,GCM 是最推荐的模式。因为它同时解决了「保密性」和「完整性」两个问题。
3.4 密钥长度与安全等级
很多人觉得「密钥越长越安全」。这话没错,但要看场景。
咱们来算一笔账:
| 密钥长度 | 暴力破解时间(假设每秒10^18次) | 安全等级 |
|---|---|---|
| 56 bit (DES) | 约 0.4 秒 | 不安全 |
| 128 bit (AES-128) | 约 10^18 年 | 安全 |
| 256 bit (AES-256) | 约 10^36 年 | 非常安全 |
你看,AES-128 的破解时间已经是天文数字了。在车载场景下,攻击者不可能花那么长时间去破解一个密钥。他们更可能通过侧信道攻击、密钥泄露等方式来破解。
所以,我的观点是:别在密钥长度上内卷。128 bit 足够。把精力放在密钥管理、安全存储、防侧信道攻击上,这些才是真正的短板。
3.5 实战建议:CAN FD 中怎么选?
好了,理论讲完了。咱们落地到 CAN FD 通信中,我给出一个实战配置建议:
- 算法: AES-128
- 模式: GCM
- 密钥长度: 128 bit
- IV 长度: 96 bit(GCM 推荐值)
- 认证标签长度: 64 bit 或 128 bit(根据报文长度和安全性要求选择)
这个配置在安全性和性能之间取得了很好的平衡。我在多个量产项目中都用了这个方案,没有出过问题。
3.6 小结
这一讲咱们把对称加密的基础打牢了。记住几个关键点:
- AES-128 够用,别盲目追求 AES-256
- ECB 模式是坑,千万别踩
- CBC 和 CTR 各有优劣,看场景选
- GCM 是王道,加密 + 完整性一步到位
- 密钥长度不是唯一的安全指标,管理更重要
下一讲,咱们会深入非对称加密和数字签名。这些东西在密钥分发和身份认证中非常关键。到时候见。