【免费下载链接】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.
cvw(CORE-V Wally)是一款开源可配置的 RISC-V 处理器,完整支持Zk 标量加密扩展(Zknd、Zkne、Zknh),让你用单条指令完成AES-128 硬件加速与SHA-256 哈希计算。本文将带你快速理解 Wally 的加密硬件架构、开启方法和实战示例,零基础上手。
1️⃣ 为什么需要硬件加密加速?
传统做法用软件实现 AES 和 SHA-256:查表、循环、字节搬移,在小核心上每个 128 位数据块的加密要执行成百上千条指令。
Wally 的解决方案是把加密算法"焊进"流水线——通过 RISC-V 官方Zkn 标量加密扩展,把最耗时的操作压缩成单周期指令:
| 扩展 | 作用 | 提供的关键指令 |
|---|---|---|
| Zkne | AES 加密 | aes64es(末轮加密)、aes64esm(中间轮加密)、aes64ks1i/aes64ks2(密钥扩展) |
| Zknd | AES 解密 | 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_rv32gc | rv32gc | 仅开启 AES 加密(ZKNE_SUPPORTED = 1) |
zknd_rv32gc | rv32gc | 仅开启 AES 解密 |
zknh_rv32gc | rv32gc | 仅开启 SHA 哈希 |
zkne_rv64gc/zknh_rv64gc等 | rv64gc | RV64 对应版本 |
所有参数的完整定义可在 config/shared/parameter-defs.vh 中查阅。
6️⃣ 实战演练:两条最短路径上手
仓库自带两套"教科书级"汇编示例,直接展示了如何用 Zk 指令写加密程序:
- AES-128 硬件加密:examples/exercises/18p10/aes128.S —— 从 FIPS 197 标准测试向量出发,完整实现密钥扩展 + 10 轮加密,参考输出见 aes128.reference_output
- 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.
相关推荐
Cosmos 仓库中的纯 C AES 实现:AES-128/192/256 加解密与流加密实战指南
Cosmos 仓库中的纯 C AES 实现:AES 128/192/256 加解密与流加密实战指南 本篇指南以 Cosmos 仓库 code/cryptogra
教程示例工程Ryujinx 模拟器:从零跑通 Switch 游戏的完整安装配置清单
Ryujinx 模拟器:从零跑通 Switch 游戏的完整安装配置清单 Ryujinx 让你直接在 PC 上跑 Switch 游戏:主界面就是游戏库,按名称、版
硬件仿真图形学**JavaScript SHA-256/SHA-224加密库全面解析**
JavaScript SHA 256/SHA 224加密库全面解析 项目基础介绍及编程语言 js sha256 是一个由陈义全(emn178)开发并维护的轻量级
密码学
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考