You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

阈值签名在EVM区块链上如何拥有固定地址/公钥?相关技术疑问

关于EVM上TSS阈值签名的核心疑问解答

你的初始理解修正

先直接纠正两个关键误解:

  • TSS钱包不需要依赖链上智能合约作为地址,它可以直接对应一个标准EOA(外部拥有账户)地址,和普通外部账户完全兼容,无需额外合约验证逻辑。
  • 两方TSS场景下完全可以离线生成合法的EOA地址,不需要第三方合约授权。

关键原理拆解

1. TSS如何生成固定EOA地址?

TSS的核心是密码学秘密共享机制:

  • 多方在离线状态下,通过安全的密钥生成协议(如GG18、DKG)共同计算出共享的私钥分片,但整个过程中从未出现完整私钥。
  • 这个共享私钥对应的公钥是固定的,按照EVM标准由公钥推导的EOA地址(keccak256(公钥[1:])[-20:])自然也是固定的,和普通EOA地址生成规则完全一致。

2. TSS签名的验证逻辑(无需合约)

当需要签名交易时,各方用自己的私钥分片执行签名协议,最终合成一个标准ECDSA签名(和普通EOA签名格式完全相同)。

  • 这个签名可以直接被EVM内置的ecrecover函数验证,不需要额外智能合约——因为它本质上就是对应那个固定EOA地址的合法签名,和普通用户用私钥签出的结果没有任何区别。

3. 无完整私钥能否生成对应同一地址的签名?

完全可以。以下是两方TSS的极简流程示例:

密钥生成阶段

  • 方A生成随机数a,计算公钥分片A = a*G(G为椭圆曲线基点),安全发送给方B;
  • 方B生成随机数b,计算公钥分片B = b*G,安全发送给方A;
  • 双方共同计算总公钥P = A + B = (a+b)*G,对应的EOA地址为addr = keccak256(P[1:])[-20:],此时双方都不知道完整私钥a+b。

签名阶段

  • 签署消息m时,方A计算临时公钥r1 = k1*G(k1为临时随机数),发送给方B;
  • 方B计算临时公钥r2 = k2*G,发送给方A;
  • 双方计算合并后的临时公钥R = r1 + r2,再分别计算签名分片:s1 = k1^{-1}(hash(m) + r*a) mod n、s2 = k2^{-1}(hash(m) + r*b) mod n(n为椭圆曲线阶);
  • 最终合成完整签名s = (s1^{-1} + s2^{-1})^{-1} mod n,得到标准ECDSA签名(R, s);
  • 用EVM的ecrecover验证时,会从签名恢复出公钥P,对应地址就是之前生成的固定addr。

整个过程中没有任何一方拥有完整私钥,但最终签名完全符合EVM的验证标准,对应固定的EOA地址。

TSS vs 多签(MultiSig)的核心区别

  • 多签是基于智能合约的逻辑,需要部署合约作为钱包地址,签名是多个EOA的签名集合,由合约验证签名数量是否达标;
  • TSS是纯密码学层的解决方案,钱包地址是标准EOA,签名是单一的标准ECDSA签名,和普通账户无差异,不需要链上合约。

内容的提问来源于stack exchange,提问作者Anters Bear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:45:27