Trail of Bits公开披露两个影响Binance阈值签名方案库(tss-lib)及其主要活跃分叉项目的漏洞。受影响代码库包括:
- Binance的tss-lib
- Clover Network的threshold-crypto
- Keep Network的keep-ecdsa
- Swingby的tss-lib
- THORchain的tss-lib
- ZenGo X的curv
攻击者只需在密钥生成或重新共享协议启动时配置恶意ID,即可窃取其他用户的私钥或使其节点崩溃。
阈值签名方案是强大的密码学工具,但需要零知识证明、承诺方案和可验证秘密共享等复杂非标准化原语。由于缺乏实施指南,实践中常出现类似我们披露的这两个漏洞。
阈值签名方案原理
阈值签名允许用户组共同控制签名私钥,与多重签名(multisig)的区别在于:多重签名每个用户持有独立密钥,而阈值签名中每个用户持有同一密钥的份额。阈值签名只需生成一个组签名。
可验证秘密共享(VSS)
Shamir秘密共享通过生成t-1次随机多项式(常数项设为密钥值),在n个不同点求值创建份额。Feldman方案在此基础上增加了可验证性。
漏洞技术细节
-
零值泄露漏洞:当多项式在x=0处求值时直接泄露常数项密钥。虽然多数实现通过检查ID非零来防护,但未对椭圆曲线群阶取模检查,导致设置ID为群阶q时仍会泄露密钥。
-
模运算崩溃漏洞:计算拉格朗日系数时,若IDi ≡ SelfID (mod q),会导致模逆不存在。脆弱实现未验证模逆直接解引用空指针。
ZKDocs发布
我们推出非标准化密码原语文档ZKDocs,包含秘密共享等协议的完整实现细节和安全考量。例如关于零值份额漏洞的详细分析可在ZKDocs的秘密共享章节查阅。
时间线
2021.10.19 发现tss-lib数据泄露
2021.12.06 向各厂商报告
截至2021.12.20,除Clover外所有厂商均已修复
Binance、Keep Network等团队已提交修复补丁。我们呼吁开发者:
- 模运算前必须进行模约简
- 始终验证模逆和模平方根操作
- 必要时联系专业审计