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 即可。
我的建议: 除非客户明确要求 AES-256,或者你的芯片有硬件加速器支持 AES-256 且性能无损耗,否则用 AES-128 就够了。别为了「看起来更安全」而牺牲性能。

3.3 分组模式:怎么切蛋糕?

AES 是分组加密算法。它一次只能加密 16 字节(128 bit)的数据。如果你的报文超过 16 字节,就得切成一块一块的。这个「切法」就是分组模式。

常见的模式有四种:ECB、CBC、CTR、GCM。咱们一个一个说。

3.3.1 ECB 模式:千万别用!

ECB(Electronic Codebook)是最简单的模式。每块数据独立加密,互不影响。

优点: 可以并行计算,速度快。

缺点: 同样的明文块,加密后得到同样的密文块。这在车载场景下是致命的。

我曾经在一个项目中看到有人用 ECB 加密 CAN 报文。结果呢?攻击者只要抓几次包,就能根据密文的重复模式推断出报文内容。比如刹车信号、油门信号,这些值变化范围有限,很容易被猜出来。

警告: 在车载 CAN FD 通信中,绝对不要使用 ECB 模式。这不是「好不好」的问题,是「能不能用」的问题。用了就是给自己挖坑。

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 是最推荐的模式。因为它同时解决了「保密性」和「完整性」两个问题。

重点: 如果你只能记住一种模式,那就记住 GCM。它既能加密,又能防篡改,是车载 CAN FD 安全通信的首选。

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(根据报文长度和安全性要求选择)

这个配置在安全性和性能之间取得了很好的平衡。我在多个量产项目中都用了这个方案,没有出过问题。

小技巧: 如果你的 MCU 有硬件 AES 加速器,一定要用。软件实现 AES 在 CAN FD 场景下可能会成为瓶颈。我见过一个项目,软件 AES 加密一个 64 字节的报文花了 2 毫秒,而 CAN FD 一个帧的传输时间才几十微秒。这差距太大了。

3.6 小结

这一讲咱们把对称加密的基础打牢了。记住几个关键点:

  1. AES-128 够用,别盲目追求 AES-256
  2. ECB 模式是坑,千万别踩
  3. CBC 和 CTR 各有优劣,看场景选
  4. GCM 是王道,加密 + 完整性一步到位
  5. 密钥长度不是唯一的安全指标,管理更重要

下一讲,咱们会深入非对称加密和数字签名。这些东西在密钥分发和身份认证中非常关键。到时候见。