trailofbits/lms-go

GitHub: trailofbits/lms-go

Go 语言实现的 RFC 8554 Leighton-Micali 哈希签名算法,提供抗量子计算攻击的有状态数字签名能力。

Stars: 13 | Forks: 2

# Leighton-Micali 基于哈希的签名 本代码库包含 [Leighton-Micali Hash-Based Signatures (RFC 8554)](https://datatracker.ietf.org/doc/html/rfc8554) 的实现。 ## 安全须知 LMS 签名是有状态的:用户务必注意,切勿使用同一个内部 LM-OTS 私钥签署多条 消息。为避免灾难性后果,必须在签名算法的多次调用之间维护状态。 在使用我们的 LMS 实现时,内部计数器 (`q`) 会在返回每个签名之前 递增。 如果 LMS 私钥被持久化到存储中,您 **必须** 在生成每个签名后、将其释放给 应用程序其余部分之前,更新持久化存储。未能遵守此要求属于您的应用程序中的 安全漏洞。 关于无状态基于哈希的签名算法,请参阅 [SPHINCS+](https://sphincs.org)。 注意:本项目未经外部审计,但整个代码库 已由 Trail of Bits 的密码学家进行了内部审查。 ## 安装 ``` go get https://github.com/trailofbits/lms-go ``` ## 用法 ``` seckey, err := lms.NewPrivateKey(common.LMS_SHA256_M32_H10, common.LMOTS_SHA256_N32_W4) pubkey, err := seckey.Public() // The optional nil argument can be a user-chosen RNG sig, err := seckey.Sign([]byte("example"), nil) sig_valid := pubkey.Verify([]byte("example"), sig) ``` ### 密钥管理 在密钥管理方面,我们对用户的要求并不多。任何更改内部 状态的操作都使用指针调用来更新内部状态。 将私钥持久化到长期存储时,用户必须非常小心, 确保 **同一私钥绝不会从磁盘读取两次**。这将导致 存在两个处于相同状态的私钥,因此当它们都用于签署 消息时,LMOTS 私钥将被重复使用,这被认为 **后果严重**。 ## 许可证 本代码库根据 [3-Clause BSD License](https://opensource.org/license/bsd-3-clause/) 授权。 ## 贡献 如果您有兴趣为本代码库做贡献,请参阅 [CONTRIBUTING.md](/CONTRIBUTING.md) 获取更多信息。
标签:CVE, EVTX分析, EVTX分析, Go, Golang, Leighton-Micali, LM-OTS, LMS, PQC, RFC 8554, Ruby工具, SHA-256, Trail of Bits, 加密算法, 后量子密码学, 哈希签名, 安全编程, 密码学, 开发库, 手动系统调用, 抗量子, 数字签名, 日志审计, 状态签名, 网络安全, 隐私保护