☰
AES CBC与AES GCM详解
2026/10/10 2:54:23 网站建设 项目流程

本文主要档针对车端密钥体系,详解并对比AES‑CBC与AES‑GCM两种加密模式,结合业务场景给出选型依据。

1 AES-CBC详解

AES-CBC 不是独立加密算法,是AES分组密码搭配 CBC(Cipher Block Chaining,密码分组链接)模式构成的分组密码工作模式方案。AES 负责单个固定长度明文块的加解密;CBC 定义多个明文块如何串联、引入块间依赖,解决 ECB(电子密码本)模式的安全缺陷。

1.1 分组密码

分组密码将固定长度的明文块,在密钥控制下,置换为等长密文块;是确定性置换。AES 的块大小固定为128比特。 分组密码本身仅能加密单个块。当明文长度大于分组长度,必须使用工作模式将多个分组串联。

在分组加密这一类型中,存在ECB(电子密码本)这一基础模式。该模式核心思想:将明文直接分组,得到相同的密钥分组。但是这样的模式存在以下两种缺陷:

  1. 相同明文分组,得到相同密文分组;攻击者可识别重复模式;
  2. 块之间无任何依赖,攻击者可直接重排、删除、插入密文块而不破坏后续解密。

AES-CBC的出现很好的解决了上面的缺陷,其核心思想:让前一块密文参与当前块的加密,使得相同明文块不再产生相同密文,引入分组间相关性。

1.2 CBC模式原理

1.2.1 CBC加密流程

如图1:

步骤1:将明文按照一组128bit进行分组处理(长度不够则进行填充)并生成初始化向量IV,长度等于分组大小,不需要保密,但必须不可预测;

步骤2:第 1 块明文P1先与初始向量IV异或,再进行AES加密,得到密文C1,以下是密文C1的数学公式;

步骤3:后续每一块明文,与前一块得到的密文异或,再送入AES加密,直到算出最后的密文Cn,以下是后续加密公式:

…

图1 AES-CBC加密流程

1.2.2 CBC解密流程

如图2所示:

步骤1:解密方拿到密文C1…Cn与初始向量IV后,先将C1进行AES解密运算并与初始向量IV进行异或得到明文分组P1,以下是P1的数学公式:

步骤2:后续每一块密文都先进行AES解密运算后与前一步骤得到的明文P进行异或,直到得到最后一块明文Pn,以下是后续解密公式:

…

图2 AES-CBC解密流程

1.3 AES-CBC 优缺点总结

优点:

  1. 原理简单,理论成熟;
  2. 串行加密:加密必须等待前一块密文完成,解密可以并行;
  3. 广泛兼容,旧系统大量使用。

缺点:

  1. 加密串行,无法并行加密;但解密可并行;
  2. 需要填充,引入填充预言攻击面;
  3. 原生无消息认证,必须额外叠加HMAC,使用门槛高,极易误用;
  4. IV必须密码随机,工程上很容易出错;
  5. 存在密文块篡改导致明文可控比特翻转风险。

2 AES-GCM详解

AES-GCM(Galois/Counter Mode)是基于 AES 分组密码构造的AEAD(Authenticated Encryption with Associated Data,带关联数据的认证加密)方案。 AEAD 同时提供两项密码学安全目标:保密性(加密) + 完整性与真实性(认证);并且支持关联数据AAD(Associated Data)——AAD 不加密,但必须通过完整性校验,典型场景:报文头、协议元数据。

2.1 AEAD 基础与 GCM 的设计动机

CBC 仅提供保密性,原生无认证。为实现完整性,需要额外叠加MAC算法。而GCM 能够完成单 套原语的同时完成加密 + 认证,硬件友好、可并行,原生支持AAD。

2.2 GCM模式原理

2.2.1 构造计数器块

加密方生成一个随机数Nonce(IV)作为初始输入,若不满128bit则填充至128bit,得到初始计数器块J0,以下是J0的生成公式:

随后逐步生成计数块J0至Jn,保证每一个明文分组都有与之对应的计数块:

…

(注:其中的加法是128bit 无符号整数大端加法)

2.2.2 构造密文

对计数器块作为输入进行AES加密处理,得到密钥流块Si:

将明文P切分为128bit块P1…Pn,末尾不足128bit保留剩余比特,将明文与密钥流块Si做异或处理得到密文:

2.2.3 GHASH计算认证哈希

对关联数据 AAD和刚刚生成的密文C一起做GHASH运算。GHASH就是一个带密钥的滚动哈希,一次性把 AAD 和C的信息打包算出一个摘要,只要 AAD或者C被改动一点,摘要Y就会完全变化。

步骤1:把AAD、密文C依次拼接;不足128bit块的地方补 0 对齐;

步骤2:在拼接串末尾,额外带上AAD的长度、密文的长度信息(防止长度篡改);

步骤3:使用预先算出的哈希子密钥 H(H = AES加密全0块),在 GF (2¹²⁸) 有限域上迭代运算,得到摘要值Y。

以下是摘要值Y的运算过程:

(注:为AAD末尾填充0至128bit边界;为C末尾填充0至128bit 边界。)

2.2.4 生成认证标签Tag

拿1.2.3中GHASH算出的摘要Y,和S0(用密钥K加密初始块J0的结果)做异或,截取指定长度,得到最终认证标签Tag:

图3 AES-GCM加密流程图

2.2.5解密与校验流程

解密方收到随机数Nonce、关联数据AAD、密文C与认证标签Tag;

首先使用Nonce生成初始计数块J0,对J0进行AES加密处理得到S0;并计算认证哈希(详情见1.2.3)得到摘要Y;最后得到Tag'=Y⊕S0,校验Tag'是否等于Tag,若不等则直接丢弃密文,相等则:

重复1.2.1章节步骤生成计数块J1至Jn,并使用相同方式得到得到密钥流块Si,通过Si与Ci异或操作还原出明文Pi:

3 AES-CBC与AES-GCM的对比

综上所述,将CBC与GCM之间进行对比,详见下表:

AES-GCM

AES-CBC

类型

分组+AEAD认证加密

分组模式

填充

不需要填充

需要

并行性

加密、解密、GHASH 均可并行

加密串行;解密可并行

关联数据

原生支持

不支持

认证

内置 Tag

依赖外部 HMAC

4选型原则

4.1 优先选用AES‑GCM场景

(1)载荷为高风险业务指令、上报业务数据;

(2)需要同时实现机密性、完整性、数据源认证,需要抵抗篡改、重放攻击;

(3)硬件 / 操作系统支持 GCM 硬件加速。

4.2 选用AES‑CBC场景

(1)密钥包裹场景,传输密钥材料,业务载荷有RSA/ECC签名兜底安全;

(2)存量硬件、操作系统安全库不支持GCM;

(3)本地静态数据存储。

5 业务场景选型对照表

结合车端密钥需求,业务场景、算法选择、选型理由汇总如下:

密钥名称

业务场景

选用算法

选型核心逻辑

RD‑master

脚本密钥

远程诊断配置脚本(云端下行下发高风险诊断脚本)

AES‑256‑GCM

诊断脚本无上层 RSA 签名兜底;需要同时防泄露、防篡改、防重放;GCM原生完成加密+校验。

DC‑master‑DEK

CCU 数采数据,车辆上行上报采集数据

AES‑256‑GCM

上报数采数据,需要确认数据来源为真实车辆;利用AAD携带VIN、报文序号抵抗篡改与重放攻击。

OTA‑master‑KEK

OTA 升级密钥链,密钥包裹传输,用于固件升级

AES‑256‑CBC

属于密钥包裹场景;固件包整体合法性由 CCU 安全刷写公钥 RSA2048 验签兜底;CBC仅保障密钥机密性。

数据本地

加解密密钥DEK

CCU 安卓 / TBOX 本地业务数据存储,上下行传输

AES‑128‑CBC

本地静态存储加密;安卓车载组件兼容性好,完整性由上层HMAC保障

车云数据

加解密密钥

车云双向会话通信报文

AES‑256‑CBC

+HMAC‑SHA256

车云通信协议,加密与签名模块解耦;CBC 负责加密,HMAC独立完成完整性校验

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询