深度解析DKLs23阈值签名库安全审计:漏洞发现与修复实践
背景介绍
2023年10月,我们对Silence Laboratories的DKLs23阈值签名方案(TSS)库Silent Shard进行了安全审计——这是当时新型协议的首批生产级实现之一,该协议使用不经意传输(OT)替代传统的Paillier密码学。我们的审查发现了可能导致密钥销毁攻击的严重漏洞,Silence Laboratories已及时修复。
本次审计得出三个关键经验:
- DKLs23规范赋予实现者选择子协议(基础OT、OT扩展、配对乘法)的极大自由度,需要仔细研究规范和实施选择
- 基于OT的系统通常比基于Paillier的系统更不易出错,一旦防止选择性中止攻击,只需要更简单的安全验证
- 所有TSS方案都需要关注安全P2P通信、广播和共识验证等基础要素
创新库——Silent Shard
Silence Laboratories是一个由学术和工业界科学家组成的团队,构建了名为Silent Shard的多功能TSS库。该团队旨在为各种应用和用例提供TSS支持,包括加密货币钱包MetaMask。
为支持ECDSA签名,Silence Laboratories基于当时新颖的DKLs23协议构建了Silent Shard库。许多常见的ECDSA协议(如CGGMP21)依赖Paillier加密系统的同态特性来执行特定的ECDSA签名操作。DKLs23协议是一个根本不同的协议,使用称为不经意传输(OT)的密码学原语,而不是Paillier。这种基于OT的方法在过去几年中因其竞争性能和基于Paillier系统的脆弱性(例如最近的BitForge和TSShock漏洞)而受到更多关注。
审计方法
我们与Silence Laboratories的项目从手动审查随附文档开始,并包括与Silence Laboratories的定期咨询以澄清某些问题。实现TSS协议,特别是DKLs23,是一项非常复杂的任务,因为规范充满了复杂的符号和许多子协议,每个子协议都有自己的尖锐边缘和安全问题。
除了手动审查外,我们使用相关工具对Rust代码库进行自动化分析。特别是:
- 使用cargo-audit和Clippy识别已知易受攻击的依赖项和常见Rust错误
- 使用cargo-llvm-cov分析代码库的测试覆盖率并确定额外测试最有价值的热点
- 使用Trail of Bits的自定义Rust工具Dylint,识别Trail of Bits在先前项目中发现的更常见Rust错误和代码质量问题
关键发现
在项目过程中,我们共识别了15个安全问题。其中两个高危安全问题可能导致密钥销毁攻击,甚至可能引发密钥恢复攻击:
TOB-SILA-6:各方之间的通信通道可以重用随机数 TSS协议有严格的通信要求以保持协议安全。特别是协议中的各方必须拥有安全配对通道以防止消息被读取或篡改。加密使用的随机数实现错误可能允许恶意方更改两方之间的协议消息,从而阻止他们签署消息。这被称为密钥销毁攻击。为解决此问题,Silence Laboratories团队更新了通信通道,为通道中的每个方向使用不同的密钥,防止同一加密密钥使用相同随机数两次。
TOB-SILA-12:实现错误处理选择性中止攻击 这些TSS协议的关键设计之一是正确检测和处理其他方的恶意行为。我们在恶意行为处理中发现了一个导致恐慌的错误,阻止各方正确识别恶意方。没有正常运作的可识别中止,协议中的各方要么必须指责协议中的所有人(或某些随机子集),这可能导致密钥销毁攻击,要么不指责或惩罚任何人,这可能导致密钥提取攻击。Silence Laboratories修补了实现以返回明确的AbortProtocolAndBanReceiver错误,其中包括要禁止的方的ID。
我们识别的其他一些发现也可能导致密钥销毁攻击和其他问题。所有安全问题的详细列表可在我们的完整报告中访问。
我们的报告还包括代码质量建议,旨在增强代码可读性、可维护性和健壮性。一些建议涉及使用特定类型以提高可读性和一致性,公共库函数参数的全面文档记录,以及减少不必要的不安全代码使用。更多信息请参阅报告附录C。
侧信道分析
对Silence Laboratories的Silent Shard DKLs23库的安全审查包括分析实现是否存在潜在的侧信道漏洞。我们发现代码库通过在使用适当的情况下使用subtle等crate的恒定时间代码,很大程度上防止了侧信道攻击。然而,有一个函数eval_pprf,时序信息可能泄露有关秘密值的一些信息。正如我们在报告中描述的那样,我们认为与此问题相关的风险相当低,因为实际攻击即使不是完全不可行也很困难。但为了深度防御,我们包括了使此函数恒定时间从而不泄露任何不必要信息的建议。针对此问题,Silence Laboratories提交了一个补丁来消除此时序泄漏。更多细节请参见我们报告中的附录D。
建议
除了提供解决我们识别的15个安全问题和代码质量问题的建议外,我们在项目结束后向Silence Laboratories提供了两个长期建议。对DKLs23实现的第一个建议是改进文档,特别是错误处理文档,考虑到处理恶意行为在TSS系统中的重要性以及我们识别的错误处理问题。
我们的另一个主要建议是向代码库引入额外的负面测试。特别是,负面测试本可以检测和防止我们识别的一些问题,如TOB-SILA-1和TOB-SILA-2。对额外负面测试的需求也通过我们使用cargo-llvm-cov的分析得到确认。
自我们的项目结束以来,我们很高兴地说,Silence Laboratories已解决了15个安全问题中的14个,并部分解决了剩余的信息性问题。根据我们的长期建议,Silence Laboratories还投资于额外的文档和测试。
保护TSS协议
我们赞扬Silence Laboratories在这个项目上高效协作的工作,以及他们对我们的发现和建议的及时响应。像这样的审计展示了加强代码库安全性的主动方法,是提供多功能TSS工具包的重要一步。
随着这个项目的结束,我们的密码学团队现在已经对ECDSA、Schnorr和BLS签名的所有主要TSS协议进行了多次安全评估。此外,所有主要TSS协议都聘请我们提供工程服务,为所有相关签名方案构建Go和Rust实现。如果您需要任何TSS协议的安全审查或工程,请联系我们!我们提供免费的办公时间会议,可以根据我们这些系统的丰富经验提供有影响力的建议。