两大新型LMS后量子签名库重磅开源

Trail of Bits团队开源了基于Rust和Go的Leighton-Micali哈希签名(LMS)实现,这是一种经过充分研究的NIST标准化后量子数字签名算法,可抵御量子计算机攻击。

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

LMS是一种有状态的基于哈希的签名方案,2019年通过RFC 8554标准化,并于2020年纳入联邦信息处理标准。该算法专门设计用于抵抗量子计算机攻击,能够应对RSA和ECDSA等传统代数签名方案面临的安全威胁。与其他后量子签名设计不同,LMS在NIST大规模后量子密码标准化项目完成前就已标准化。经过多年研究,其安全边界已得到充分验证。

与其他后量子签名方案相比,LMS作为基于哈希的方案仅依赖于SHA256等抗碰撞哈希函数的安全性。虽然其签名长度比NIST最新标准化的基于格的签名方案更长,但实现更简单且需要更少的新型密码学假设。

LMS的独特之处在于其有状态性——签名者必须跟踪密钥已签名的消息数量,每新签名一次就递增计数器。若私钥在同一计数器值下重复使用,攻击者可组合两个签名来伪造新消息签名。这种状态要求严重限制了方案的可用性和安全性,因此NIST特别警告该方案仅适用于能严格控制私钥使用的场景。

相比SLH-DSA(SPHINCS+)等无状态哈希签名,LMS的主要优势是签名长度大幅缩短(约4KB vs 40KB)。但代价是有状态方案难以直接集成到现有应用中,私钥状态管理会带来复杂的安全隐患。不过对于代码签名等受控环境,LMS是理想的现实测试场景。

RustCrypto实现

我们的Rust实现具有以下特性:

  • 支持no-std环境
  • 无需堆内存分配
  • 完全兼容现有digest和signature包
  • 分别为公私钥实现SignerMut和Verifier特性

该实现采用强类型设计并优化内存使用。虽然引入ArrayVec会略微增加某些签名场景的内存需求,但避免了泛型和GenericArray带来的复杂性。当前版本要求签名和密钥在反序列化前必须知晓LMS参数,但用户可通过枚举覆盖所有算法类型来实现动态参数解析。

Go实现

为Sigstore生态系统开发的Go实现则更为灵活:

  • 允许少量堆分配来跟踪变长数据(如私钥中的哈希数量)
  • 由于语言特性限制,需要在调用点重新指定LMS参数
  • 专为受控环境设计,没有Rust版本的通用性限制

后量子密码工程持续进行

我们正在开发另一个Rust后量子标准库,即将开源。如需定制后量子密码模块或其他非主流加密库,我们的密码学团队可提供:

  • 完全按需求设计的代码库
  • 项目完成后的所有权移交
  • 与标准安全审计同品质的代码审查

欢迎联系销售团队开启项目合作。

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