我们审查首批DKLs23库之一的心得 - The Trail of Bits博客
Joop van de Pol、Jim Miller和Joe Doyle
2025年6月10日
密码学, 审计
2023年10月,我们审计了Silence Laboratories的DKLs23阈值签名方案(TSS)库Silent Shard——这是当时使用不经意传输(OT)替代传统Paillier密码学的创新协议的首批生产实现之一。我们的审查发现了可能导致密钥销毁攻击的严重缺陷,Silence Laboratories已及时修复。
我们的审计得出了三个关键经验。首先,DKLs23规范赋予实现者选择子协议(基础OT、OT扩展、成对乘法)的显著自由度,需要仔细研究规范和实施选择。其次,基于OT的系统通常比基于Paillier的系统更不容易出错,一旦防止了选择性中止攻击,就需要更简单的安全验证。最后,所有TSS方案都需要关注安全P2P通信、广播和共识验证等基础要素。
在这篇博客文章中,我们介绍了我们的流程,深入探讨了我们发现的关键问题,并讨论了加强实施安全性和正确性的建议。查看完整的Silence Laboratories DKLs23审查报告获取更多细节!
一个大胆的新库 - 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,是一项非常复杂的任务,因为规范充满了复杂的符号和许多子协议,每个子协议都有自己的尖锐边缘和安全问题。为了让您更好地理解这一点,以下是主要DKLs23协议的截图,该协议跨越了四页文本:
图1: 主要DKLs23协议跨越了四页密集的规范,每个符号(𝓕Com、𝓕RVOLE等)代表其自己复杂的子协议
如果您没有被需要理解和跟踪的所有不同变量所淹没,还请记住,每个𝓕Com、𝓕RVOLE、𝓕Zero等符号都是其自己复杂的子协议,具有自己密集的符号和安全考虑。其中一些子协议实际上是在以前的出版物中定义的,因此您还必须进行大量的参考文献追踪。
除了手动审查,我们使用相关工具对Rust代码库进行自动化分析。特别是,我们使用cargo-audit和Clippy来识别已知易受攻击的依赖项和常见的Rust错误。我们还使用cargo-llvm-cov来分析代码库的测试覆盖率,并识别额外测试最有价值的热点。最后,我们使用了Trail of Bits的自定义Rust工具Dylint,该工具识别了Trail of Bits在以前项目中发现的更常见的Rust错误和代码质量问题。
关键发现
在项目过程中,我们总共识别了15个安全问题。在这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协议的安全审查或工程,请联系我们!我们提供免费的办公时间会话,我们可以基于我们这些系统的丰富经验提供有影响力的建议。