首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >预硅侧信道评估:用 RTL 仿真搭一条可复现的 TVLA / ADLA 流水线

预硅侧信道评估:用 RTL 仿真搭一条可复现的 TVLA / ADLA 流水线

原创
作者头像
用户12439200
发布2026-09-11 11:44:33
发布2026-09-11 11:44:33
650
举报
文章被收录于专栏:FIBEMATEFIBEMATE

关于 FIBEMATE:FIBEMATE 是一个开源的后量子密码(PQC)工程验证平台,覆盖算法元数据注册表、CBOM 盘点、CI 策略门禁、KAT 自测与硬件加速基准五条流水线。本文的全部数据来自其独立子项目 pqc-hw-bench(github.com/Lennonhaha/pqc-hw-bench)——一个以统一方法论测量 ML-KEM / ML-DSA 在 FPGA 与 CPU 上延迟、吞吐、资源与能效的基准框架。本篇聚焦其中的预硅功耗侧信道评估流水线,构建脚本、测试向量与原始统计结果全部开源。官网:fibemate.net


§1 为什么要在流片之前做侧信道评估

物理侧信道测量需要硬件平台:采集设备(示波器、电流探针或 ChipWhisperer 一类专用板)、被测板、同步触发与屏蔽环境。这套门槛决定了多数团队的实际做法——等到流片或上板之后再评估。而此时若检出泄露,修改成本已经从「改 RTL」上升为「改版图、重新流片」。

由此产生的需求是:在没有物理测量平台的条件下,能否在 RTL 阶段就筛掉一部分明显的泄露。答案是可以,但必须清楚它筛掉的是什么。

本系列第 3 篇给出了 NTT 核的资源与时序基准。本篇是其延续:同一块设计,在功耗维度上如何做一次可复现的、可被引用的预硅评估。


§2 预硅评估能回答什么,不能回答什么

物理测量测的是真实电流/电磁轨迹;RTL 仿真测不到这些量。折中方案是采用功耗模型代理。CMOS 动态功耗的主项为:

其中 α(翻转率)正比于信号的汉明距离(Hamming Distance, HD):HD(v₀, v₁) = popcount(v₀ ⊕ v₁)。因此,在每个周期累加关键数据通路上若干信号的 HD,就得到一个与动态功耗正相关的标量——这就是业界通用的 HW/HD 模型。

本项目采用的正是这一路径(Telescope 式预硅评估,Liu/Schaumont, ACM AsiaCCS 2025):RTL 行为仿真 + toggle 计数 + 统计检验

必须明确三条边界:

  1. HD 模型不含静态功耗,也不含电压/频率缩放、工艺偏差与温度效应;
  2. 只覆盖数据通路的值依赖特性,不含电磁辐射与故障注入维度;
  3. 预硅结果不能替代流片后的物理 TVLA 测量——它是筛选,不是认证。

把「预硅 PASS」表述为「侧信道安全」,是对该方法最常见的误用。


§3 实验设计:为什么是「同分布异值」而不是 fixed-vs-random

标准 TVLA 使用 fixed-vs-random 设计:一组固定明文、一组随机明文,用于检测秘密依赖。本项目 DUT 是 ML-KEM 的 NTT 变换,其输入是多项式系数(在实际方案中可能含秘密),因此采用同分布异值设计:

输入分布

种子

A

均匀伪随机系数 U[0, 3328]

0xA11CE

B

均匀伪随机系数 U[0, 3328]

0xC0FFEE

两组的分布相同、取值不同。若 toggle 计数分布出现显著差异,说明数据通路功耗依赖输入取值——这是一个潜在的泄露信号;若无差异,则得到一个干净基线。

一个容易被忽略的细节:RTL 仿真是确定性的,没有测量噪声。因此组内标准差反映的是输入取值带来的多样性,而非采集噪声。这恰好是值依赖检测所需要的量;但也意味着不能把这里的 stdev 与实测轨迹的噪声水平做任何横向比较。

监测信号共 5 个:写回总线 ram_din、蝶形输出 bf_a_out / bf_b_out、RAM 读总线 ram_dout_a / ram_dout_b。每组执行 128 次完整 NTT 变换,每次输出一个总 toggle 计数。


§4 双统计量与阈值:为什么 TVLA 之外还要 ADLA

4.1 Welch t-test(TVLA 口径)

判定:|t| < 4.5 → PASS。该阈值为业界 TVLA 惯例值,对应显著性约 3.4×10⁻⁶。

4.2 两样本 Anderson-Darling(ADLA 口径)

TVLA 只比较均值,对同均值、异方差或异分布的情形存在盲区——而 shuffling、随机抖动这类防护手段恰恰会制造这种盲区。ADLA 检验的是两条经验 CDF 是否相等(Mikulec / Breier / Hou, arXiv:2603.18647, 2026):

判定:A² < 11.99 → PASS。

关于该阈值的来源与含义需要说明三点。

其一,11.99 的推导方式。 该值并非经验取整,而是原论文在显著性水平 α ≈ 3.4×10⁻⁶ 下,对两样本 AD 统计量的极限分布 A²_∞ 求上 (1−α) 分位数得到的(Pearson 曲线拟合)。原论文为与标准 TVLA 直接比较,主动采用了与 |t| > 4.5 相同的 α,因此两个判定界在"假阳性率"这一维度上经过统一标定,可以并置使用。

其二,标定一致不等于检验能力相同。 两个统计量的原假设并不相同——Welch t 检验的是均值相等,AD 检验的是完整分布函数相等。同一 α 只意味着两者在各自原假设下的假阳性率一致,不意味着对同一组数据的检出能力相同。对某些泄露形态,ADLA 更敏感;对另一些则未必。

其三,阈值取自极限分布而施加于有限样本统计量,属渐近近似,原论文亦按此方式使用。本项目沿用该阈值而非自行标定,因此上述三点同样是本项目的适用前提。

一处必须声明的迁移边界:ADLA 原论文的验证对象是 ChipWhisperer-Husky 采集的神经网络推理物理功耗迹(MNIST MLP,目标板 Atmel SAM4S / ARM Cortex-M4,含 shuffling 与 random jitter 防护)。本项目将其统计量用于预硅 RTL 仿真的 toggle 计数,属于跨领域方法借鉴——统计量本身与阈值推导是通用的,但"该阈值在预硅 toggle 计数场景下的实际功效"并未由原论文建立。这一点的后果由 §7 的效力边界部分承担。

两个统计量组合后出现三种可区分的结果:

结果

含义

处置

TVLA PASS + ADLA PASS

当前模型下未检出值依赖

基线干净

TVLA FAIL

均值差异,强值依赖信号

排查数据通路分支与乘加时序

TVLA PASS + ADLA FAIL

同均值异分布,疑似被 shuffling / jitter 掩盖

深入分析 CDF 差异

只跑 TVLA 会漏掉第三行——这正是引入第二个统计量的理由。


§5 流水线:四个阶段与一条命令

组件

工具

RTL 仿真

iverilog 12.0(hardware/sim/tb_ntt_toggle_tvla.v)

向量生成

scripts/gen_ntt_vectors.py(xorshift64,确定性)

一键编排

scripts/run_tvla_sim.py

统计分析

scripts/analyze_toggle.py(纯标准库,无第三方依赖)

四个阶段:

  1. gen — 生成 sim/vectors_{A,B}.mem(正变换)或 sim/inv/vectors_{A,B}.mem(逆变换),ASCII hex,每行 256 个系数;
  2. compile — iverilog 编译 testbench 与 8 个 RTL 源文件,逆变换追加 -DMODE_INV,非默认轮数追加 -DRUNS_A/B
  3. simvvp 输出 TOGGLE <grp> <run> <count>sim/toggle_raw.txt
  4. analyze — 双统计量计算并落盘 results/raw/ntt-toggle-tvla-{fwd,inv}-b2b3.json

复现命令:

退出码约定:0 = 全部 PASS;1 = 基础设施错误(工具缺失、编译失败、日志行数不符);2 = 检出泄露。

把退出码接进 CI 才有意义。 项目中的 .github/workflows/tvla-regression.yml 在 push 或 PR 触及 RTL 及流水线文件时(亦支持 workflow_dispatch 手动触发),于 Ubuntu 环境安装 iverilog 并跑双模式冒烟。GitHub Actions 将步骤的非零退出视为失败,因此退出码 2 会使该 job 标记为 failed。

这里有两处需要如实说明,避免过度声称:

  1. 该 workflow 目前未被配置为 required status check,因此它的作用是在 PR 上标红,而不是阻止合并。若需真正阻断,需在分支保护中将其加入必需检查项。
  2. CI 跑的是 32 runs/组的冒烟模式,不是 §6 所报告的 128 runs/组。它能捕获明显的管道破坏或大幅回归,检出能力弱于完整测量(见 §7)。

即便如此,其工程价值仍然成立:一次性评估会随 RTL 演进而失效,而每次改动后自动重跑的评估不会。区别在于它当前是"预警"而非"闸门"——这两个词不能互换使用。


§6 测量结果

| 模式 | 组 | n | mean | stdev | TVLA |t| | ADLA A² | 判定 | |:--|:--|--:|--:|--:|--:|--:|:-- | --- | --- | | fwd | A | 128 | 1723.19 | 55.74 | 0.657 | 0.753 | PASS / PASS | | fwd | B | 128 | 1727.66 | 53.05 | | | | | inv | A | 128 | 3604.80 | 55.78 | 1.108 | 2.122 | PASS / PASS | | inv | B | 128 | 3596.85 | 58.90 | | | |

阈值:TVLA 4.5,ADLA 11.99。逆变换的 toggle 计数约为正变换的 2.1 倍,源于额外的 scale 乘法,属预期现象。

另有一项工程性证据:正变换在 B1(单模式原型)与 B2(完整流水线)两次独立实现下,均值、标准差、|t| 与 A² 逐位一致(0.657 / 0.753)。这表明从原型迁移到自动化管道的过程中未引入回归——管道重构前后的数值一致性,本身就是一个值得报告的指标

结论表述:在 HD toggle 模型下,NTT 核数据通路未检出输入值依赖的功耗差异


§7 「PASS」的效力边界:该样本量能检出多大的泄露

PASS 不等于无泄露,它只表示「在给定样本量与给定模型下未检出」。这个边界可以量化。

按本次观测到的组内标准差,在 n=128/组 的条件下,使 |t| 达到阈值 4.5 所需的最小均值差为:

模式

组内 stdev

标准误

检出所需均值差

相对均值

fwd

55.74 / 53.05

6.80

≈ 30.6 个 toggle

≈ 1.8%

inv

55.78 / 58.90

7.17

≈ 32.3 个 toggle

≈ 0.9%

含义是:量级小于均值 1.8%(正变换)的差异,在该样本量下无法与输入值本身的多样性区分开。若需检出更弱的泄露,必须增加 runs,而不是把 PASS 解读为绝对安全。

此外,ADLA 的 A² 随样本量的行为与 t 统计量不同,32 runs 的 CI 冒烟模式只用于回归防护(capture 明显的管道破坏),不具备与 128 runs 相同的检出能力——两者不可互相替代。


§8 适用边界声明

为便于引用,以下明确列出本篇结论不适用的范围:

  • 非物理实测。 无 ChipWhisperer、示波器或电流探针,全部基于 RTL 行为仿真。
  • 功耗模型为 HD toggle 计数,不含静态功耗、电压/频率缩放、工艺偏差与温度效应。
  • 仅覆盖数据通路的值依赖特性,不涉及电磁辐射、故障注入与缓存/微架构侧信道。
  • 样本量为 128 runs/组,检出能力见 §7;CI 模式为 32 runs/组,效力更低。
  • DUT 为 NTT 核tensor_ntt_schedulerntt_core_pipe),结论不可外推至完整 ML-KEM 实现或其他模块。
  • 阈值 4.5 / 11.99 引自文献,非本项目自行标定;二者按同一显著性水平 α ≈ 3.4×10⁻⁶ 标定,但检验的原假设与功效不同。
  • ADLA 的应用属跨领域借鉴:原论文在物理功耗迹上验证,本项目用于预硅 toggle 计数,该场景下的实际功效未经原论文验证(见 §4.2)。
  • CI 冒烟(32 runs/组)非强制门禁,当前配置为在 PR 上标红而非阻断合并(见 §5)。
  • 预硅 PASS 不构成侧信道安全认证,不能替代流片后的物理测量。

§9 结语

预硅侧信道评估的价值不在于给出「安全」结论,而在于把一部分本会在流片后才发现的问题提前到 RTL 阶段,并且可被他人复现与反驳。方法与阈值公开、测试向量确定性生成、统计量双口径、退出码接入 CI——四件事缺一,这份评估就只是一张自证清白的截图。

第 3 篇讨论的是「数字能不能被复现」,本篇讨论的是「结论能不能被推翻」。两者是同一件事的两面。


参考实践

  • 仓库:github.com/Lennonhaha/pqc-hw-bench(流水线脚本、测试向量、原始 JSON 全部在内)
  • 方法论文档docs/tvla-methodology.md(CC-BY-SA-4.0)
  • 主项目:github.com/Lennonhaha/fibemate · 官网 fibemate.net
  • ADLA 方法:J. Mikulec, J. Breier, X. Hou, Beyond TVLA: Anderson–Darling Leakage Assessment for Neural Network Side-Channel Leakage Detection, arXiv:2603.18647 [cs.CR],2026-03-19 提交(阈值 τ_A ≈ 11.99 与 α ≈ 3.4×10⁻⁶ 出自该文 §4.2;其验证平台为 ChipWhisperer-Husky 上的物理功耗迹)
  • 预硅评估路径:Telescope, Liu / Schaumont, ACM AsiaCCS 2025
  • CI 门禁.github/workflows/tvla-regression.yml(路径触发 + workflow_dispatch,32 runs/组 冒烟)
  • 原始数据results/raw/ntt-toggle-tvla-{fwd,inv}-b2b3.json

词汇注释

  • TVLA:Test Vector Leakage Assessment,基于 t 检验的泄露检测方法,惯例阈值 |t| = 4.5。
  • ADLA:Anderson-Darling Leakage Assessment,基于两样本 AD 统计量的分布相等检验,阈值 A² = 11.99。
  • HD / HW 模型:以汉明距离(相邻值异或的 popcount)或汉明重量作为动态功耗代理的模型。
  • toggle count:单位时间内信号翻转次数的累计值,此处作为动态功耗的代理观测量。
  • 预硅(pre-silicon):比特流上板之前的阶段,仅能依靠仿真与静态报告进行评估。

FIBEMATE · 开源后量子密码(PQC)工程验证平台 · fibemate.net · github.com/Lennonhaha/fibemate


本文数据均来自开源仓库 pqc-hw-bench,流水线脚本与原始统计结果可自由获取与核对。转载请注明出处。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • §1 为什么要在流片之前做侧信道评估
  • §2 预硅评估能回答什么,不能回答什么
  • §3 实验设计:为什么是「同分布异值」而不是 fixed-vs-random
  • §4 双统计量与阈值:为什么 TVLA 之外还要 ADLA
    • 4.1 Welch t-test(TVLA 口径)
    • 4.2 两样本 Anderson-Darling(ADLA 口径)
  • §5 流水线:四个阶段与一条命令
  • §6 测量结果
  • §7 「PASS」的效力边界:该样本量能检出多大的泄露
  • §8 适用边界声明
  • §9 结语
    • 参考实践
    • 词汇注释
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档