两大全新LMS库发布:抗量子密码签名实战指南

Trail of Bits开源纯Rust与Go实现的LMS后量子数字签名库,详解状态型哈希签名机制的技术特性、安全风险及在Sigstore生态中的集成方案,助力抗量子迁移实践。

宣布两个新的LMS库

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)中的随机数重用攻击。

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