Wally的Zk标量加密扩展实战:AES-128与SHA-256硬件加速全解

发布时间:2026/11/6 4:59:39
Wally的Zk标量加密扩展实战:AES-128与SHA-256硬件加速全解

【免费下载链接】cvw

CORE-V Wally is a configurable RISC-V Processor associated with RISC-V System-on-Chip Design textbook. Contains a 5-stage pipeline, support for A, B, C, D, F, M and Q extensions, and optional caches, BP, FPU, VM/MMU, AHB, RAMs, and peripherals.

项目地址:https://gitcode.com/gh_mirrors/cv/cvw
点击查看免费下载

cvw(CORE-V Wally)是一款开源可配置的 RISC-V 处理器,完整支持Zk 标量加密扩展(Zknd、Zkne、Zknh),让你用单条指令完成AES-128 硬件加速与SHA-256 哈希计算。本文将带你快速理解 Wally 的加密硬件架构、开启方法和实战示例,零基础上手。

1️⃣ 为什么需要硬件加密加速?

传统做法用软件实现 AES 和 SHA-256:查表、循环、字节搬移,在小核心上每个 128 位数据块的加密要执行成百上千条指令。

Wally 的解决方案是把加密算法"焊进"流水线——通过 RISC-V 官方Zkn 标量加密扩展,把最耗时的操作压缩成单周期指令:

扩展作用提供的关键指令
ZkneAES 加密aes64es(末轮加密)、aes64esm(中间轮加密)、aes64ks1i/aes64ks2(密钥扩展)
ZkndAES 解密aes64ds、aes64dsm、aes64im(密钥扩展 MixColumns)
Zknh哈希sha256sum0/1、sha256sig0/1、sha512sum0/1
Zbkb / Zbkc / Zbkx位操作辅助位反转、字节重排、CLMUL 等密码学基础运算

一条aes64esm指令就能在 1 个时钟周期内完成 SubBytes + ShiftRows + MixColumns + AddRoundKey 的全部工作;而 AES-128 总共 10 轮加密,整块密文生成只需约十几条指令,比纯软件实现快一个数量级以上。

2️⃣ 加密硬件藏在哪里?

Wally 的加密逻辑全部集成在**整数执行单元(IEU)**中,无需额外协处理器:

  • AES 电路:src/ieu/aes/ 下包含 S-Box、MixColumns、伽罗瓦域乘法器(galoismultforward8.sv)等全部子模块,其中 aes64e.sv 实现 RV64 的aes64es/aes64esm,aes32e.sv 对应 RV32 版本
  • SHA 电路:src/ieu/sha/sha256.sv 实现 SHA-256,另有sha512_32.sv/sha512_64.sv支持 SHA-512
  • 指令译码:src/ieu/bmu/bmuctrl.sv 中负责识别aes32esi、aes64esm、sha256sig0等加密指令并生成控制信号
  • 结果调度:src/ieu/kmu/(Crypto Management Unit)负责在 Zknd/Zkne/Zknh 多路硬件间选择结果并写回寄存器

这种"IEU 内置加密"的设计意味着:加密指令与整数指令共享流水线,对程序员完全透明,无需任何特权模式或特殊使能。

3️⃣ AES-128:单指令硬件加密全解

以 RV64 配置下的 AES-128 加密为例,整个流程分为三步:

① 密钥扩展:用aes64ks1i和aes64ks2两条指令,把 128 位原始密钥逐轮扩展成 10 组轮密钥。硬件把 S-Box 替换、字旋转、Rcon 异或全部在一个周期内完成。

② 中间轮加密:第 1~9 轮,每轮执行xor(AddRoundKey)+aes64esm(SubBytes/ShiftRows/MixColumns),每轮约 3 条指令。

③ 末轮加密:AES 最后一轮没有 MixColumns,由aes64es指令单独处理,与中间轮硬件复用同一套 S-Box 和移位电路(见 src/ieu/kmu/zknde64.sv 中的注释说明)。

💡性能直觉:AES-128 全加密 ≈ 2 条密钥扩展 + 9 轮 × 3 条 + 3 条末轮 ≈32 条指令,对比软件实现动辄上千条查表/循环指令。

仓库还提供了一个完整的学习对照:软件版 AES-128(含 FIPS 197 标准测试向量)见 examples/crypto/aes/aes.c,伽罗瓦域乘法与 S-Box 逆元表的推导见 examples/crypto/gfmul/gfmul.c。理解了软件流程,再看硬件单指令就一目了然。

4️⃣ SHA-256:用 4 条指令压缩一个消息块

SHA-256 的瓶颈在 64 轮压缩循环,而sha256sum/sha256sig指令组把它变成了批量操作:

  • sha256sig0/sha256sig1:一次生成消息扩展字 W[16]~W[63] 中的 8 个字(含 σ₀、σ₁ 非线性变换),整个 512 位消息块只需 8 条 sig 指令
  • sha256sum0/sha256sum1:一次推进 8 轮压缩循环(含 Σ₀、Σ₁ 大置换和 Ch/Maj 逻辑),64 轮压缩只需 8 条 sum 指令

也就是说,压缩一个 512 位消息块只需 16 条加密指令,核心逻辑实现在 src/ieu/sha/sha256.sv。仓库的 examples/crypto/sha/ 目录提供了独立的 SHA-256/SHA-512 精简硬件实现与 Python 参考程序(详见 README),方便你单独验证哈希行为。

5️⃣ 如何开启 Zk 扩展:配置清单

Wally 的加密功能通过配置参数启用,以 config/rv32gc/config.vh 为例:

localparam logic ZKND_SUPPORTED = 1; // AES 解密 localparam logic ZKNE_SUPPORTED = 1; // AES 加密 localparam logic ZKNH_SUPPORTED = 1; // SHA-256/512

三个参数相互独立,可按面积/功耗预算裁剪。若只想验证某一项,仓库在 config/derivlist.txt 中预置了派生配置,直接选用即可:

派生配置名基线说明
zkne_rv32gcrv32gc仅开启 AES 加密(ZKNE_SUPPORTED = 1)
zknd_rv32gcrv32gc仅开启 AES 解密
zknh_rv32gcrv32gc仅开启 SHA 哈希
zkne_rv64gc/zknh_rv64gc等rv64gcRV64 对应版本

所有参数的完整定义可在 config/shared/parameter-defs.vh 中查阅。

6️⃣ 实战演练:两条最短路径上手

仓库自带两套"教科书级"汇编示例,直接展示了如何用 Zk 指令写加密程序:

  1. AES-128 硬件加密:examples/exercises/18p10/aes128.S —— 从 FIPS 197 标准测试向量出发,完整实现密钥扩展 + 10 轮加密,参考输出见 aes128.reference_output
  2. SHA-256 硬件哈希:examples/exercises/18p7/sha256.S —— 按 NIST FIPS 180-4 规范加载消息、用sha256sig/sha256sum完成压缩

配套的软件对照示例集中在 examples/crypto/ 目录,建议按"先读软件实现 → 再读硬件示例汇编"的顺序学习,理解成本最低。

7️⃣ 文件导航速查表

你想做的事去哪里
阅读 AES 加密硬件实现src/ieu/aes/
阅读 SHA-256 硬件实现src/ieu/sha/sha256.sv
查看加密指令译码逻辑src/ieu/bmu/bmuctrl.sv
开启/裁剪加密功能config/rv32gc/config.vh、config/derivlist.txt
学习 AES-128 汇编实战examples/exercises/18p10/aes128.S
学习 SHA-256 汇编实战examples/exercises/18p7/sha256.S
软件对照实现(C 语言)examples/crypto/aes/aes.c

总结

Wally 的 Zk 标量加密扩展把 AES 与 SHA 从"软件密集型任务"变成了"硬件单周期操作":aes64esm一条指令顶软件上百条查表,sha256sum一组指令压缩整个消息块。配合独立的ZKND/ZKNE/ZKNH配置开关和现成的派生配置,你可以根据自己的面积预算自由裁剪加密能力。无论是对 RISC-V 密码学扩展做研究,还是设计安全 IoT SoC,这份仓库都提供了从 RTL 到汇编示例的完整学习路径。

【免费下载链接】cvw

CORE-V Wally is a configurable RISC-V Processor associated with RISC-V System-on-Chip Design textbook. Contains a 5-stage pipeline, support for A, B, C, D, F, M and Q extensions, and optional caches, BP, FPU, VM/MMU, AHB, RAMs, and peripherals.

项目地址:https://gitcode.com/gh_mirrors/cv/cvw
点击查看免费下载
上一篇:Terminalizer新闻媒体:在新闻采编中的终极应用指南
下一篇:悟空IM:高性能分布式通讯服务的终极指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考