每安全比特的 Gas 值:EVM 上 PQ 签名的标准化基准测试
祝大家节日快乐。
关于本帖中AA/ERC-4337/PQ签名的讨论,请继续跟进:
我最终找到了一个不断隐晦出现的缺失环节:
我们没有标准化的单位来比较 EVM 上不同安全级别的不同签名方案。
大多数比较都使用“每次验证的气体消耗量”,但这实际上混杂了多种因素:
不同的安全目标(例如,~128 位 ECDSA 与 Cat3/Cat5 PQ 方案),
不同的验证表面(EOA 与 ERC-1271 / AA),
有时基准测试范围也不同(纯粹的验证与完整的 handleOps 管道)。
这使得回答诸如以下基本工程问题变得困难:
“在明确的假设条件下,ML-DSA-65 在 EVM 上相对于 Falcon 是否可行?”
我建造的
一个小型基准测试实验室 + 数据集,具有明确的来源和明确的安全性分母:
仓库: GitHub - pipavlo82/gas-per-secure-bit:PQ 签名和 VRF 的每安全位 Gas 基准测试。
核心思想:
gas_per_secure_bit = gas_verify / security_bits我特意列出了两个分母,因为两种观点都很有用:
指标 A — 基线归一化(128 位基线)
这回答了以下问题: “每个 128 位基准单元的成本是多少?”
gas_per_128b = gas_verify / 128这并不是说每个方案都是 128 位安全的;这只是一个预算/标准化工具。
指标 B — 安全等效位(已声明的约定)
这回答了以下问题: “在已声明的规范化约定下,每个‘安全位’的成本是多少?”
gas_per_sec_equiv_bit = gas_verify / security_equiv_bits目前,我的签名采用以下明确的约定:
| 方案 | NIST类别(如适用) | 安全等效位 |
|---|---|---|
| ECDSA(secp256k1) | — | 128 |
| ML-DSA-65(FIPS-204,第 3 类) | 3 | 192 |
| 猎鹰-1024(5类) | 5 | 256 |
我使用简单的映射 Cat{1,3,5} → {128,192,256} 作为声明的规范化约定(欢迎更好的社区约定)。
注意: security_equiv_bits是一个声明的用于可比性的规范化约定。它并非安全证明,也不是 NIST 提供的“比特”值。
类别来源:
溯源性和可重复性
目前所有数据均为单次运行的 gas 快照(未取平均值),并具有完整的来源信息:
repo 、 commit 、 bench_name 、 chain_profile和notes字段。
没有隐藏的平均值计算,也没有“N 次最佳”的选择——只有其他人可以重新运行的可复现快照。
结果(当前快照)
图表(安全等效位)
原始 SVG 文件(推荐):
GitHub页面:
(这些长椅的表面材质并不完全相同;请将其视为标准化数据集视图,而非单一排名。)
几个关键行(基线归一化——除以 128)
| 方案/台架 | 气体 | 每128桶气体 | 笔记 |
|---|---|---|---|
| ECDSA ecrecover | 21,126 | 165 | 经典基线;非 PQ 安全(Shor) |
| Falcon 获取用户操作哈希 | 218,333 | 1,705 | 小型AA基元 |
| ML-DSA-65 PreA (隔离热路) | 1,499,354 | 11,714 | 优化计算核心 |
| 猎鹰完全验证 | 10,336,055 | 80,751 | PQ 完全验证 |
| ML-DSA-65 验证 POC | 68,901,612 | 538,294 | 端到端概念验证 |
安全等效归一化(除以 security_equiv_bits)
| 方案/台架 | 气体 | 安全等效位 | 每秒气体当量 |
|---|---|---|---|
| Falcon 获取用户操作哈希 | 218,333 | 256 | 853 |
| ML-DSA-65 PreA | 1,499,354 | 192 | 7,809 |
| 猎鹰完全验证 | 10,336,055 | 256 | 40,375 |
| ML-DSA-65 验证 POC | 68,901,612 | 192 | 358,863 |
让我印象深刻的是:
ML-DSA-65 PreA 的能耗约为7,809 gas/安全当量比特(Cat3 等效)。
Falcon-1024 完全验证着陆点约为40,375 气体/安全等效比特(Cat5 等效)
对于这些特定的卧推凳来说,这大约是5.2 倍的差距。
这并非“ML-DSA 整体上优于 Falcon”;而是一个范围更窄的论断:
如果避免在链上重新计算繁重的公共结构,一些 ML-DSA 验证面可以变得更加 EVM 友好。
“PreA”的含义(以及它如何改变现状)
在标准的 ML-DSA 验证中,很大一部分成本实际上是:
ExpandA + 将公共矩阵转换为 NTT 域。
“PreA”路径通过接受预先计算的A_ntt ,并将其与CommitA绑定,来隔离热算术核心(NTT域中的A·z − c·t₁),以防止矩阵替换。
在我的方案中, A_ntt由公钥种子( rho )派生而来,然后通过 CommitA 进行绑定以防止替换。
这是一个明确的工程设计要点(尤其是在 AA 环境中):将大型公共结构移到链下,但保持其加密绑定。
粗略分解(当前线束):
使用链上 ExpandA+NTT(A) 的完整 compute_w 计算量约为 6480 万 gas
孤立基质多层核心(PreA):约150万气体
执行:
ML-DSA-65 验证器: GitHub - pipavlo82/ml-dsa-65-ethereum-verification
基准测试实验室: GitHub - pipavlo82/gas-per-secure-bit:PQ 签名和 VRF 的每安全位 Gas 基准测试。
这对AA/ERC-7913为何重要?
在AA中,你所关心的单位很少是“孤立地验证一个签名”。
您关心的是稳定的 ABI 表面和候选方案之间的可比性。
ERC-7913提供了一个通用的验证接口。
我的工作假设是:如果我们希望通过精心设计(而不是猜测)来推广 PQ,我们需要:
共享基准测试方案
显式安全分母,
以及类似的表面(纯验证与AA管线)。
欢迎提出问题/反馈
1) EVM 上的哈希/XOF 布线
对于 EVM 实现:我们想要 (a) 严格的 FIPS SHAKE 布线,(b) 基于 Keccak 的非一致性变体,还是 (c) 在数据集中显式标记的双模实现?
2)双指标方法是否合理?
基线归一化对预算编制很有用;安全等效比特对每个安全单位的诚实效率很有用。对同时报告这两项指标有任何异议吗?
3) PreA 标准化选项
在匿名戒酒互助会(AA)的背景下,哪种方法最不坏?
调用数据(很大,但无状态),
每个密钥的存储空间,
预编译,
混合绑定与 CommitA 绑定?
可重复性快速入门
git clone https://github.com/pipavlo82/gas-per-secure-bit cd gas-per-secure-bitRESET_DATA=0 MLDSA_REF= "feature/mldsa-ntt-opt-phase12-erc7913-packedA" \./scripts/run_vendor_mldsa.shRESET_DATA=0 ./scripts/run_ecdsa.shQA_REF=main RESET_DATA=0 ./scripts/run_vendor_quantumaccount.sh tail -n 20 data/results.csv感谢阅读——我非常乐意接受关于惯例、更好的威胁模型框架以及接下来要添加哪些方案/面的建议。
链接
基准测试仓库: GitHub - pipavlo82/gas-per-secure-bit:PQ 签名和 VRF 的每安全位 Gas 基准测试。
ML-DSA-65 实现: GitHub - pipavlo82/ml-dsa-65-ethereum-verification
图表(原始 SVG): https://raw.githubusercontent.com/pipavlo82/gas-per-secure-bit/main/docs/gas-per-sec-equiv-bit-chart.svg
ERC-7913:签名验证器
最初的AA/PQ讨论: 通往后量子以太坊交易的道路是由账户抽象(AA)铺就的。





