每安全比特的 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)鋪就的。




