Sui 中使用的加密库 Fastcrypto 打破了多项速度记录,我们在基准测试和安全分析方面的工作修复了大量安全漏洞,同时通过发现新颖的优化技巧为创新打开了大门。

在伦敦帝国理工学院国际性能工程会议 (ICPE) 的基准测试研讨会上,最近发表了一篇论文《Fastcrypto:通过持续基准测试开创密码学》,描述了我们对 Fastcrypto 库中的加密函数进行的持续和系统的基准测试。

此次演讲是软件系统负载测试和基准测试研讨会中“性能测试创新:策略和技术”环节的一部分。此次会议吸引了来自学术界和业界的嘉宾,包括 MongoDB 和亚马逊的代表,他们也在同一研讨会上发言。

我们重点介绍了 Fastcrypto 库的系统性和持续性基准测试,该库是数字签名、哈希函数和零知识证明等加密函数的集合。在 Fastcrypto 中,所有函数在发布时和按需进行持续基准测试,结果在线发布。可以轻松比较类似的函数,并且我们保留历史数据以便能够跟踪一段时间内的性能。

演示强调了这些基准如何促进 Fastcrypto 和 Sui 开发中更明智的决策,影响依赖项和使用方式的选择,以及优化开发人员资源的重点。

根据基准做出合格的决策

论文中的案例研究解决了在 Sui 中为验证者选择签名方案的挑战。对于向 Sui 提交交易的用户,交易必须由法定人数的验证者签名,并合并到交易证书中。法定人数约为 100 名验证者,权益分布均匀,法定人数由 67 名验证者组成,这意味着每个验证者必须验证每笔交易 67 个签名。

BLS 签名方案允许将多个签名像单个签名一样进行验证,但它比 EdDSA 等替代方案慢得多。详细的基准测试显示,这两种方案的盈亏平衡点在 40 到 45 个签名之间。因此,对于 Sui 来说,使用 BLS 效率更高,这确实是目前所使用的方法。

EdDSA 和 BLS 签名方案的基准测试显示,40 到 45 个批量签名的盈亏平衡点,表明借助 Sui 的验证器池,BLS 是一个性能良好的选择。

“如果软件速度突然变快了很多,你也应该感到担忧”

演示还展示了基准测试如何发现意外的软件行为。其中一个例子涉及实现 EdDSA 签名方案的库,该方案假定公钥应被缓存并作为签名函数的输入提供。如果提供了错误的公钥,则可能导致提取私钥(如我们的 ed25519-unsafe-libs GitHub 中所示)。

之所以检测到此问题,是因为某些库表现出异常快速的性能,绕过了公钥的派生并使用可能不正确的公钥作为参数。虽然基准测试通常旨在加速软件,但“如果软件突然快了很多,你也应该担心”,正如研讨会上的一位观众所指出的那样。