本文提出一种通过EIP-7702委托将现有以太坊EOA升级为量子安全钱包的方案,无需更改地址、迁移资产或共识。
感谢 @gnosed 的贡献。
任何已进行过一次交易的以太坊 EOA,其 secp256k1 公钥都会永久留在链上,这使得量子计算机可以通过 Shor 算法提取该密钥。我们展示了如何通过单次 EIP-7702 交易,将任何现有 EOA 改造为后量子安全方案,无需更改地址、无需迁移资产、也无需共识变更。该 EOA 将执行委托给一个 GatedWallet 合约,该合约只接受在隐藏公钥下对 ECDSA 知识的 ZK 证明。该密钥永远不会出现在链上。
工作实现:longfellow-zk-hiddenpk。
基准测试:Apple M1 上证明耗时 87 毫秒 / 验证耗时 65 毫秒 / 证明大小 226 KB。
这扩展了 2022 年的文章《基于 ECDSA-ZK 的量子证明密钥对》,该文章指出了正确的目标,但未解决委托和验证流程的问题。
| 方法 | 地址稳定 | 无需资产迁移 | 无需共识变更 | 公钥永不进入内存池 |
|---|---|---|---|---|
| 迁移至后量子地址 | 否 | 否 | 否 | 是(后量子安全) |
| 临时密钥轮换 [1] | 是 | 是 | 是 | 否 |
| 新的后量子智能钱包 | 否 | 否 | 是 | 是 |
| 本文 | 是 | 是 | 是 | 是 |
临时密钥轮换是最接近的先前构造。每次轮换交易都会在内存池中广播当前公钥,为 CRQC 留下提取私钥的时间窗口。而本文方案不存在该窗口。
Falcon、Dilithium (ML-DSA) 和 SPHINCS+ 是正确的长期答案。但它们目前对大多数以太坊钱包不可用。
瓶颈在于钱包软件之下的基础设施层。大多数机构钱包运行在 HSM 或 MPC 协议上。当前一代 HSM 仅支持 ECDSA、RSA 和 EdDSA。硬件刷新周期为两到五年。MPC 钱包面临同样问题:门限 ECDSA 已有经过审计的生产协议(GG18、CGGMP21),而门限 ML-DSA 尚未成熟。此外,后量子迁移需要新的地址方案、共识变更,以及针对更大签名(ML-DSA 为 2.4-3.3 KB,而 ECDSA 仅为 65 字节)重新谈判 calldata 经济性。
隐藏公钥构造并非替代 ECDSA,而是对其进行封装。HSM 或 MPC 层继续内部运行 ECDSA。ZK 证明层位于其上(钱包软件中),链上验证器仅能看到在承诺密钥下进行了 ECDSA 签名的证明。这是当前生产环境中,为 MPC 和 HSM 钱包提供量子安全的最快可行路径。
设置。 用户的 EOA A 签署一条 EIP-7702 SetCode 授权,指向一个 GatedWallet 合约。这是最后一次使用 sk_A。该合约存储一个值:pkHash_B = H(pkx_B || pky_B),其中 pk_B 是用户新的隐藏密钥对,在链下生成,永不广播。
(注:当前实现使用 SHA-256 计算 pkHash_B,因为 Longfellow-ZK 尚不支持电路内的 Keccak。正在添加 Keccak 以与以太坊地址方案对齐。)
稳态。 对于之后的每笔交易,用户的钱包在设备上生成一个 ZK 证明 π:
\exists\,(pk_B, r, s) \;\text{ 满足 }\; \mathrm{ECDSA.verify}(pk_B,\,(r,s),\,e) = 1 \;\wedge\; H(pk_B) = pkHash_B
其中 e = H(\mathtt{userOpHash} \;|\!|\; \mathtt{chainid} \;|\!|\; \mathtt{nonce}) 将该证明绑定到该特定操作。证明放入 ERC-4337 UserOperation 的 signature 字段,并由公共打包器转发。GatedWallet.execute 进行验证,成功后对 addr_A 的资产执行操作。
contract GatedWallet {
bytes32 public immutable pkHash;
IZKVerifier public immutable zkVerifier;
uint256 public nonce;
function execute(
address to, uint256 value, bytes calldata data, bytes calldata proof
) external {
require(msg.sender == address(this), "仅限自身调用"); // EIP-7702 惯用模式
bytes32 e = keccak256(abi.encode(keccak256(data), block.chainid, nonce));
require(zkVerifier.verify(proof, pkHash, e), "证明无效");
nonce++;
(bool ok,) = to.call{value: value}(data);
require(ok);
}
}
msg.sender == address(this) 检查是标准的 EIP-7702 模式:EOA 自身签名的交易进入 execute 时,msg.sender = addr_A = address(this)。任何直接的外部调用在到达 ZK 检查前就会被拒绝。
在初始部署期间,电路中的可靠性漏洞将是关键风险。GatedWallet 可以要求同时存在两种签名:
\text{授权} \iff \underbrace{\mathrm{ECDSA.verify}(pk_1,\,sig_1,\,e)}_{\text{经典保护,} pk_1 \text{暴露}} \;\wedge\; \underbrace{\mathrm{ZK.verify}(\pi,\,pkHash_2,\,e)}_{\text{隐藏密钥保护,后量子安全}}
这为两种失效模式提供了独立保护。通过 Shor 算法提取 sk_1 的量子攻击者无法花费资产,因为 pk_2 是隐藏的,Shor 算法无法作用于它。ZK 的可靠性漏洞允许攻击者伪造证明,但未经 sk_1 无法生成有效的 sig_1。任何一种保护都能抵御某种失效。
经过数年部署和独立审计后,通过一次新的 EIP-7702 SetCode 交易指向不含经典保护的 GatedWallet,移除 ecrecover 检查。
Groth16 和 KZG-PLONK 依赖于结构参考字符串的离散对数困难性。它们不是后量子可靠的。Ligero 和 WHIR 将可靠性归约到哈希碰撞抗性,且无需可信设置。当前实现使用 Longfellow-ZK(C++,Google),它是 Ligero 的一个变体,利用基于 CRT 的 Reed-Solomon 来处理 secp256k1 的 FFT 不友好域(v_2(p^2-1) = 5)。独立的 Rust 移植版本见 zk-cred-longfellow。
PSE 的 zkID 项目 正从身份角度解决相同的电路原语:用于以太坊上隐私保护身份的 ECDSA-ZK 凭证。其 Circom 电路、链上验证器和移动端证明库可直接复用于隐藏公钥钱包模式。该栈的成熟度是此构造目前即可部署的重要原因之一。
标准 ECDSA 验证需要:
R = u_1 \cdot G + u_2 \cdot pk, \quad u_1 = e \cdot s^{-1}, \quad u_2 = r \cdot s^{-1}
两次可变基点标量乘法,约占当前电路约束的 70%。
由于证明者生成了签名并持有 sk 和随机数 k,他们可以直接证明签名方程:
pk = sk \cdot G, \qquad r = (k \cdot G).x, \qquad s = k^{-1}(e + r \cdot sk) \bmod n
改为两次固定基点标量乘法(基点 G 为常数,因此预计算表可将约束数量减少 4-8 倍),加上简单的模运算。预计总体约束减少 3-5 倍,使证明大小从约 226 KB 降至约 50-80 KB,Gas 消耗从约 3 M 降至约 800 K,且无需任何协议变更。
重要一点:完全放弃 ECDSA 而仅证明 pk = sk \cdot G 是行不通的。该陈述与任何交易无关。ECDSA 是交易完整性机制:(r, s) 承诺到 e = H(\mathtt{userOpHash} \;|\!|\; \mathtt{chainid} \;|\!|\; \mathtt{nonce}),使得每个证明恰好对一个操作有效。指定证明者优化仅改变电路路径;它保留了交易绑定。
在 Apple M1、单核、Release 构建、kLigeroRate = 7、kLigeroNreq = 132 条件下测量。
| 指标 | 数值 |
|---|---|
| 电路输入 | 7,694 |
| 公开输入 | 258 |
| 总证明时间 | ~87 ms |
| 验证时间 | ~65 ms |
| 证明大小 | 226 KB |
| 链上 Gas | ~3 M |
证明大小细分:32 B Merkle 根、17.6 KB 和值检查、213.9 KB RS 列公开(132 列)。在具备 calldata 压缩的 L2 上,Gas 可降低 10-50 倍。采用指定证明者优化后,无需任何协议变更即可降至约 800 K。
- 原文链接: ethresear.ch/t/upgrade-a...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!
作者暂未设置收款二维码