阈值签名方案中的共享密钥破解漏洞分析

本文披露了影响Frost、DMZ21、GG20和GG18等阈值签名方案实现的Pedersen分布式密钥生成(DKG)阶段的拒绝服务漏洞,攻击者可秘密提高重构共享密钥所需的阈值,导致签名失效。

打破阈值签名方案中的共享密钥 - Trail of Bits博客

今天我们将披露一个拒绝服务漏洞,该漏洞影响基于Frost、DMZ21、GG20和GG18协议的多个阈值签名方案实现中的Pedersen分布式密钥生成(DKG)阶段。该漏洞允许单个恶意参与者秘密提高重构共享密钥所需的阈值,可能导致使用共享密钥生成的签名无效。

漏洞发现过程

我们去年在与Chainflip的合作中首次注意到这个漏洞。在审查Chainflip的Frost阈值签名方案实现时,我们发现其采用了不寻常的做法——这是我们从未见过的。通常这类异常现象表明代码库存在弱点或漏洞,但这次Chainflip的防御性编码实践反而保护了其实现免遭漏洞影响。通过格外谨慎,Chainflip还避免了在代码库中引入可能被单方利用来破坏协议密钥生成阶段创建的共享密钥的漏洞。

Pedersen DKG协议解析

该漏洞实际上很容易理解,但需要先了解Pedersen DKG协议背后的数学细节。Pedersen DKG协议基于Feldman的可验证秘密共享(VSS)方案,这是Shamir秘密共享方案的扩展。

设G是一个离散对数问题困难的交换群,g是G的生成元。在(t,n)-Feldman VSS方案中:

  1. 经销商生成随机t次多项式p(x) = a0 + a1x + … + atx^t
  2. 计算秘密份额si = p(i)
  3. 发布系数承诺Ai = g^ai
  4. 参与者可通过指数运算验证其份额

Pedersen DKG协议本质上是并行运行n个Feldman VSS方案实例,最终生成一个所有参与者都不知道的(t,n)-Shamir秘密共享值。

漏洞原理分析

我们发现,如果参与者在Pedersen DKG协议中使用次数T大于t的多项式pi(x),将导致最终多项式p(x)的次数变为T而非t。这意味着签名协议将需要T+1而非t+1参与者才能成功完成。如果其他参与者未检测到这一变化,攻击者可以秘密将阈值提高到超过参与者总数,从而使共享密钥无法使用。

影响范围

我们共发现10个实现存在此漏洞,包括:

  • Frost参考实现
  • ZCash Foundation的Frost实现
  • Penumbra基于decaf377的Frost实现
  • Frost-Dalek
  • Toposware的ICE-FROST实现
  • Trust Machines基于Frost的WSTS实现
  • FROST-BIP340
  • ZenGo-X的GG18和GG20实现
  • Safeheron的GG20实现
  • LatticeX的Open TSS GG20实现

披露过程

我们于2024年1月3日联系了相关维护者,其中7个团队确认收到披露,4个团队表示已修复或计划修复该问题。对于未回应的3个团队,我们于2024年2月7日进行了二次联系,随后Toposware也确认收到披露。

(全文完)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计