两大全新LMS库发布:Rust与Go实现的后量子签名方案

Trail of Bits团队开源纯Rust与Go实现的Leighton-Micali哈希签名(LMS)方案,这是经NIST标准化的抗量子数字签名算法。文章详细解析LMS的状态管理特性、与无状态方案的性能对比,以及两种语言实现的差异化设计考量。

宣布两个新的LMS库 - Trail of Bits博客

Trail of Bits密码学团队很高兴地宣布,我们开源了纯Rust和Go实现的Leighton-Micali基于哈希的签名(LMS)方案。这是一种经过充分研究的NIST标准化后量子数字签名算法。如果您或您的组织正在寻求向数字签名的后量子支持过渡,这两个实现都经过我们多位密码学家的工程设计和审查,请尝试使用!

对于Rust代码库,我们与RustCrypto团队合作,将我们的实现集成到RustCrypto/signatures仓库中,以便在crate发布后立即与他们的生态系统一起使用。

我们的Go实现由Hewlett Packard Enterprise(HPE)资助,作为Sigstore生态系统中更大的后量子准备度工作的一部分。我们要特别感谢HPE和Tim Pletcher对这项高影响力工作的支持与合作!

LMS:一种有状态的后量子签名方案

LMS是一种有状态的基于哈希的签名方案,于2019年通过RFC 8554标准化,随后于2020年纳入联邦信息处理标准。这些算法经过精心设计,以抵抗量子计算机攻击,这可能威胁到传统的代数签名方案,如RSA和ECDSA。与其他后量子签名设计不同,LMS在NIST的大型后量子密码学标准化计划完成之前就已标准化。LMS已经研究了多年,其安全边界得到了很好的理解,因此这些方案在相对较短的时间内(至少与其他标准相比)被选中和标准化并不令人惊讶。

与其他后量子签名方案一样,LMS是一种基于哈希的方案,仅依赖于抗碰撞哈希函数(如SHA256)的安全性。基于哈希的签名方案比最近由NIST标准化的基于格的签名方案具有更长的签名,但它们实现更简单,需要更少的新颖密码学假设。这是我们选择首先开发基于哈希的签名的主要原因。

与当今常用的任何签名算法不同,LMS是一种有状态方案。签名者必须跟踪使用密钥签名的消息数量,每次新签名时递增计数器。如果私钥多次使用相同的计数器值,攻击者可以结合两个签名来伪造新消息的签名。这类似于加密方案(如AES-GCM)中的nonce重用攻击。

如果不立即显而易见,要求这种状态也严重限制了这些方案的可用性和安全性。例如,这将您的私钥(及其状态)存储到某种持久存储(通常是密钥的典型做法)变得极其危险,因为这引入了旧状态被重用的可能性,特别是对于多线程应用程序。这就是为什么NIST在其标准中发出以下警告:

有状态的基于哈希的签名方案对量子计算机的发展是安全的,但由于其安全性依赖于仔细的状态管理,它们不适合一般使用。它们最适用于可以仔细控制私钥使用且在量子密码学标准化过程完成之前需要过渡到后量子安全数字签名方案的应用。

与无状态基于哈希的签名(如SLH-DSA(SPHINCS+))相比,像LMS这样的有状态算法的主要好处是签名大小显著缩短:LMS的签名约为4KB,而类似安全级别的SLH-DSA签名接近40KB。缺点是有状态方案(如LMS)不能轻易插入现有应用程序。在签名方案中管理私有状态使得集成到更高级别的应用程序变得复杂,并且容易产生微妙和危险的安全漏洞。然而,用于代码签名的精心管理环境是在现实世界中测试有状态后量子签名的绝佳场所,我们认为Sigstore有效地满足了NIST的要求。

RustCrypto实现

我们的Rust实现支持no-std,不需要堆分配,此外与当前可用的digest和signature crate完全兼容。特别是,我们分别在私钥和公钥上实现了SignerMut和Verifier特性。

我们工作的目标是提供一个更强类型的替代方案,同时也不过度分配内存。虽然ArrayVec是解决泛型和GenericArray引起的头痛的合适替代方案,但在某些签名情况下以略高的内存需求为代价,它确实引入了以前不存在的额外crate依赖,这是我们想要避免的。目前,在我们的实现中,签名和密钥都必须知道其LMS参数,然后才能反序列化和验证签名。这对于大多数用例来说应该足够了,但如果必须使用未知参数,那么将一个枚举组合在一起,覆盖所有潜在的算法类型,并在解析算法类型后使用正确的TryFrom实现,并不太困难。

Go实现

另一方面,我们的Go实现不那么挑剔。我们被要求为Sigstore构建一个LMS实现,这是一个更受控制的环境,没有一般RustCrypto实现假设的相同限制。因此,我们的实现使用了一些小的堆分配来跟踪一些可变长度数据,例如私钥中的哈希数量。Go是一种不如Rust聪明的语言,这意味着我们不能真正在各种LMS模式上参数化它,因此需要在一些调用站点进行额外的工作来重新指定LMS参数。

更多后量子工程即将到来!

与世界其他地方一样,我们仍处于后量子密码学开发和部署的早期阶段。我们一直在探索机会,帮助团队采用更安全的密码学,无论是否有量子计算机的威胁。

我们的密码学团队目前正在用Rust开发另一个后量子标准,所以请期待另一个开源代码库很快发布!如果您的团队需要一个后量子密码学(或任何其他在开源社区中未得到广泛支持的密码库)模块,以满足您的确切需求,请联系我们!

我们的团队具备设计和构建代码库的能力,融入您的所有设计要求,并在项目结束时将所有权转移给您。我们甚至会执行内部代码审计,其质量与我们提供的标准安全代码审查相同。与我们的销售团队联系,开始您的下一个Trail of Bits项目。

如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News

页面内容 LMS:一种有状态的后量子签名方案 RustCrypto实现 Go实现 更多后量子工程即将到来! 近期文章 非传统创新者奖学金 在您的PajaMAS中劫持多代理系统 我们构建了MCP始终需要的安全层 利用废弃硬件中的零日漏洞 Inside EthCC[8]:成为智能合约审计员 © 2025 Trail of Bits。 使用Hugo和Mainroad主题生成。

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