两种新型LMS库发布:基于Rust和Go的后量子签名实现

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

宣布两个新的LMS库

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

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

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

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

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

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

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

如果这不是立即显而易见的,那么要求这种状态也严重限制了这些方案的可用性和安全性。例如,这将私钥(及其状态)存储到某种持久化存储(这通常是密钥的典型做法)变得极其危险,因为这引入了旧状态被重用的可能性,特别是对于多线程应用程序。这就是为什么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

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