2、密码学基础:对称密码、非对称密码、哈希函数的基本原理与数学背景

密码算法是硬件加速设计的核心对象。无论是 AES、SM4、RSA、ECC 还是 SHA-256,其硬件架构的优劣直接取决于对算法数学结构的理解深度。本章从硬件实现视角出发,系统梳理三大类密码原语——对称密码、非对称密码与哈希函数——的数学原理、运算特征及硬件映射要点,为后续各章的流水线设计、并行调度和侧信道防护奠定基础。

密码算法硬件加速:三大原语数学结构与硬件映射 对称密码 AES / SM4 / ChaCha20 数学基础 GF(2⁸) 有限域运算 核心操作 SubBytes / MixColumns / 轮密钥加 硬件特征 S-box 查找表 / 组合逻辑 并行度 字节级 / 轮级 / 多块流水 典型延迟:10-20 周期/块 非对称密码 RSA / ECC / SM2 数学基础 大整数模幂 / 椭圆曲线群 核心操作 模乘 / 模逆 / 点加 / 点倍 硬件特征 大位宽乘法器 / 蒙哥马利 并行度 操作级并行 / 密钥预计算 典型延迟:数百至数千周期 哈希函数 SHA-2 / SHA-3 / SM3 数学基础 压缩函数 / 置换 / 填充规则 核心操作 循环移位 / 异或 / 加法 / 选择函数 硬件特征 组合逻辑深 / 无密钥 / 可全流水 并行度 消息块级流水 / 多引擎并行 典型延迟:64-80 周期/块 硬件加速核心:将数学运算映射为可并行、可流水、可复用的数字电路结构

2.1 对称密码:分组与流密码的数学内核

2.1.1 核心原理:从代换-置换网络到有限域

对称密码使用同一密钥完成加密与解密,其安全性建立在混淆(Confusion)与扩散(Diffusion)的交替运用之上。现代分组密码(如 AES、SM4)普遍采用 SPN(代换-置换网络)结构,每一轮由非线性代换层(S-box)和线性混合层(P-box / MixColumns)组成。从数学角度看,AES 的 S-box 本质上是 GF(2⁸) 上的乘法逆元映射加上仿射变换,而 MixColumns 则是 GF(2⁸) 上的矩阵乘法。这种有限域结构使得硬件实现可以选用查找表(LUT)或组合逻辑两种路径:LUT 适合 FPGA 的分布式 RAM,组合逻辑则更适合 ASIC 的低延迟设计。

流密码(如 ChaCha20)则基于 XOR 和模 2³² 加法,其核心是一个伪随机数生成器,将密钥扩展为密钥流,再与明文逐位异或。流密码的硬件优势在于:没有轮函数的状态寄存器依赖,可以做到极低的延迟和极高的吞吐,适合高速链路加密场景。

2.1.2 硬件实现判断方法:轮函数拆解与资源评估

在硬件设计初期,需要快速评估对称密码算法的实现代价。以下三个维度是核心判断依据:

  • S-box 规模:AES 需要 16 个 8×8 S-box(每轮),若采用 LUT 实现,在 FPGA 上消耗约 16×256×8 bit = 32 Kbit 的分布式 RAM;若采用组合逻辑,则需评估逻辑级数和面积。
  • 轮函数数据通路宽度:AES 的 128-bit 数据通路意味着每轮需要 16 个 S-box 并行,MixColumns 需要 4 个 32-bit 的 GF 乘法器。SM4 的 32-bit 通路则更紧凑,适合资源受限场景。
  • 密钥扩展调度:AES-256 需要 60 轮密钥扩展,若采用在线计算,需额外 4 个 S-box;若预计算存储,则需 240 字节寄存器。硬件设计需在面积与时延之间权衡。
算法分组/密钥长度轮数核心运算硬件资源特征
AES-128128 / 128 bit10GF(2⁸) 逆元 + 仿射16 S-box / 轮,适合全流水
SM4128 / 128 bit32循环移位 + 异或 + S-box4 S-box / 轮,面积紧凑
ChaCha20512 / 256 bit20模 2³² 加法 + 循环移位无 S-box,纯算术逻辑

2.1.3 案例拆解:AES-128 加密引擎的硬件映射

假设需要设计一个面向物联网网关的 AES-128 加密引擎,目标吞吐 10 Gbps,工作时钟 200 MHz。数据通路宽度为 128 bit,则每周期需处理 128 bit,即每周期完成一轮加密。AES-128 共 10 轮,若采用全流水架构,需要 10 级流水线,每级包含 16 个 S-box、MixColumns 和密钥加。初始面积估算:16 S-box × 256×8 bit LUT ≈ 32 Kbit,加上 MixColumns 的 GF 乘法器(可用 XNOR 门实现),总逻辑约 40K LUT。若采用迭代架构(单轮复用),面积降至 4K LUT,但吞吐降至 1 Gbps。最终方案选择 4 级部分流水,平衡面积与吞吐,实际实现约 18K LUT,满足 10 Gbps 目标。

硬件设计关键:S-box 的两种实现路径——FPGA 用 LUT 可获得 1-2 周期延迟,ASIC 用组合逻辑(基于有限域求逆)可降至 1 周期但面积增加约 30%。设计时应根据目标器件特性选择。

2.1.4 常见误区与总结

  • 误区一:认为 S-box 只能用查找表。实际上,基于 GF(2⁸) 的复合域求逆(如 Canright 方法)可将 S-box 面积降低 40% 以上,适合 ASIC。
  • 误区二:忽略密钥扩展的时序。在线密钥扩展会引入关键路径,建议在轮函数流水线中插入密钥调度寄存器组。
  • 误区三:混淆 ECB 与 CBC 的并行性。ECB 可全并行,CBC 存在链式依赖,硬件设计需为 CBC 模式增加多级流水或采用流水线型 CBC 变体。

2.2 非对称密码:大整数与椭圆曲线数学

2.2.1 核心原理:单向陷门函数

非对称密码的安全性建立在数学难题之上:RSA 依赖大整数分解的困难性,ECC 依赖椭圆曲线离散对数问题。RSA 的核心运算是模幂运算 \( c = m^e \bmod n \),其中 \( n = p \cdot q \) 为大合数(2048-4096 bit)。模幂可分解为多次模乘,而模乘的核心是 Montgomery 约简算法,它将除法转换为移位和加法,极大提升了硬件效率。ECC 则在椭圆曲线群上定义点加与点倍运算,每个点运算需要多次模乘(典型为 8-16 次),因此 ECC 硬件的核心是高速模乘器阵列。

2.2.2 硬件实现判断方法:位宽与运算次数

非对称密码硬件设计的首要参数是操作数位宽。RSA-2048 需要 2048-bit 的乘法器,若直接实现,面积巨大。工程上通常采用以下策略:

  1. 分块乘法:将 2048-bit 乘法拆分为 32-bit × 32-bit 的乘加单元,通过循环累加完成,面积可控但延迟增加。
  2. Montgomery 流水线:将模乘的乘加与约简步骤流水化,每周期处理一个分块,吞吐可提升 5-10 倍。
  3. ECC 的 Jacobian 坐标:使用 Jacobian 投影坐标避免模逆运算(模逆在硬件中代价极高),将点加/点倍统一为模乘与模平方。
算法操作数位宽核心运算典型延迟(周期)硬件资源
RSA-2048 解密2048 bit模幂(约 2048 次模乘)~2M(单核)1 个 32-bit 乘法器 + 控制逻辑
RSA-2048 加密2048 bit模幂(指数 65537)~17 次模乘同上,但延迟极低
ECC P-256 点乘256 bit点加/点倍(约 384 次模乘)~50K(单核)1-4 个 256-bit 模乘器

2.2.3 案例拆解:ECC P-256 签名加速

某安全芯片需要支持 ECDSA P-256 签名,目标签名延迟小于 1 ms(时钟 400 MHz,即 400K 周期)。P-256 点乘需要约 384 次模乘,每次模乘约 100 周期(采用 32-bit 分块 Montgomery),总周期约 38K,加上模逆和签名计算,总延迟约 60K 周期,满足 1 ms 要求。若采用 4 个并行模乘器,点乘延迟可降至 15K 周期,但面积增加 3 倍。最终选择双模乘器架构,延迟 30K 周期,面积适中。关键优化点:使用预计算表存储 \( 2^iP \) 点,减少点倍次数约 20%。

注意:ECC 硬件实现中,模逆运算(如 Fermat 小定理方法)需要约 256 次模乘,代价极高。务必使用 Jacobian 或 Chudnovsky 坐标,将模逆延迟到签名最后一步。

2.2.4 常见误区与总结

  • 误区一:直接实现大位宽乘法器。2048-bit 乘法器在 FPGA 上不可行,必须分块;在 ASIC 上面积和时序均不现实。
  • 误区二:忽略侧信道风险。模幂的运算时间与密钥位相关,需采用 Montgomery 阶梯或盲化技术。
  • 误区三:混淆 RSA 加密与解密性能。加密指数固定为 65537,仅需 17 次模乘;解密指数为私钥,需 2048 次,硬件设计应区分优化。

2.3 哈希函数:压缩与雪崩效应

2.3.1 核心原理:Merkle-Damgård 与海绵结构

哈希函数将任意长度消息压缩为固定长度摘要,其安全性要求包括抗原像、抗第二原像和抗碰撞。SHA-2 系列采用 Merkle-Damgård 结构,将消息分块(512 bit 或 1024 bit)后依次送入压缩函数,压缩函数内部包含 64-80 轮的非线性操作(如 \( \Sigma \) 函数、选择函数 \( Ch \) 和多数函数 \( Maj \))。SHA-3 采用海绵结构,通过 Keccak-f 置换(24 轮)实现吸收与挤压。从硬件角度看,哈希函数没有密钥,因此不存在密钥扩展逻辑,但压缩函数的轮函数包含大量循环移位和异或操作,非常适合流水线设计。

2.3.2 硬件实现判断方法:吞吐与面积权衡

哈希硬件设计的关键指标是吞吐率(Gbps)和功耗效率(Gbps/W)。SHA-256 的压缩函数每轮包含 64 次循环,每次循环需要 6 个 32-bit 加法器和多个循环移位。若采用全展开流水线(64 级),吞吐可达 20+ Gbps,但面积约 50K LUT。若采用迭代架构(单轮复用),面积降至 3K LUT,但吞吐仅 0.3 Gbps。工程上常采用 4-8 级部分流水,平衡面积与吞吐。SHA-3 的 Keccak-f 置换为 1600-bit 状态,每轮包含 5 个步骤(θ、ρ、π、χ、ι),其中 χ 步骤为非线性,其余为线性操作,硬件实现时可将 θ 步骤的列奇偶校验提前计算以缩短关键路径。

算法消息块大小轮数状态大小硬件特征
SHA-256512 bit64256 bit(8×32)32-bit 加法器阵列,适合流水
SHA-3-2561088 bit(吸收)241600 bit(5×5×64)大状态寄存器,θ 步骤为瓶颈
SM3512 bit64256 bit类似 SHA-256,但消息扩展不同

2.3.3 案例拆解:SHA-256 多引擎并行设计

某 SSD 控制器需要 SHA-256 校验,目标吞吐 50 Gbps,工作时钟 500 MHz。单个 SHA-256 核在 500 MHz 下全流水可达到约 8 Gbps(每周期处理 16 bit),因此需要 6-8 个并行核。每个核采用 8 级流水,面积约 8K LUT,总面积 64K LUT,在中等规模 FPGA 上可行。关键优化:消息填充模块可提前处理,避免阻塞流水线;多个核共享输入缓冲,通过轮询调度分配消息块。实测吞吐 52 Gbps,功耗 3.2 W,满足设计目标。

经验:哈希函数的硬件优化重点在压缩函数的轮函数展开。SHA-256 的 \( \Sigma_0 \) 和 \( \Sigma_1 \) 函数包含 30/19/10 和 26/21/7 的循环移位,这些移位在 FPGA 上通过布线实现,不消耗逻辑资源,但会增加布线延迟,需在布局时关注。

2.3.4 常见误区与总结

  • 误区一:认为哈希函数不需要密钥就简单。实际上,SHA-256 的 64 轮展开后组合逻辑深度较大,时序收敛困难,需插入流水线寄存器。
  • 误区二:忽略消息填充逻辑。填充(添加 0x80、长度编码)在高速设计中可能成为瓶颈,建议用独立状态机预计算。
  • 误区三:混淆 SHA-1 与 SHA-256 的硬件结构。SHA-1 的 160-bit 状态和 80 轮与 SHA-256 不同,不能直接复用。

2.4 三类密码原语的硬件设计对比与选型

在实际硬件加速项目中,往往需要同时支持多种算法。下表从硬件设计角度对比三类原语的关键差异,帮助设计者快速做出架构决策。

对比维度对称密码非对称密码哈希函数
数学复杂度低(有限域运算)高(大整数/椭圆曲线)中(位运算与置换)
数据通路宽度128-256 bit256-4096 bit256-1600 bit
典型延迟10-100 周期10K-2M 周期64-80 周期
并行策略轮级流水、多块并行模乘器阵列、密钥预计算消息块流水、多核并行
侧信道风险功耗分析(S-box)时间分析(模幂)无密钥,风险低
硬件复用性S-box 可复用模乘器可复用轮函数可复用

在 SoC 级硬件加速器设计中,通常将三类算法集成在统一的密码引擎中,共享数据总线、存储器和控制逻辑。对称密码和哈希函数因数据通路宽度相近(128-256 bit),可共享部分算术单元;非对称密码则独立设计模乘器阵列,通过 AXI 总线与主处理器交互。设计时需注意:非对称密码的运算延迟远高于对称密码,应采用异步队列或中断机制避免阻塞。

硬件加速的核心原则:将算法中的数学运算映射为可并行、可流水、可复用的数字电路结构。对称密码重在轮函数的流水线优化,非对称密码重在模乘器的分块与调度,哈希函数重在压缩函数的展开与多核并行。理解这些数学背景,是设计高性能密码硬件的前提。