trailofbits/go-slh-dsa
GitHub: trailofbits/go-slh-dsa
一个用 Go 语言实现的 FIPS 205 无状态哈希数字签名算法库,提供抗量子计算的数字签名能力。
Stars: 8 | Forks: 1
# 无状态哈希数字签名算法 (SLH-DSA, FIPS 205)
本仓库使用 Go 实现了 [FIPS 205](https://nvlpubs.nist.gov/nistpubs/fips/nist.fips.205.pdf)。
[](https://github.com/trailofbits/go-slh-dsa/actions/workflows/ci.yml)
## 安装
```
go get https://github.com/trailofbits/go-slh-dsa
```
## 用法
```
import (
"crypto/rand"
"github.com/trailofbits/go-slh-dsa/slh_dsa"
)
// First, specify the desired parameter set by name
parameterSet, err := slh_dsa.GetParamSet("SLH-DSA-SHA2-128f")
// Alternatively, `parameterSet := slh_dsa.SlhDsaSha2_128f()`
// To generate a key
sk, pk, err := slh_dsa.SLHKeygen(parameterSet)
// To save/load keys
sk_bytes := sk.Bytes()
pk_bytes := pk.Bytes()
loaded_sk, err := slh_dsa.LoadSecretKey(parameterSet, sk_bytes)
loaded_pk, err := slh_dsa.LoadPublicKey(parameterSet, pk_bytes)
// To sign a message. The library implements crypto.Signer
// Note: message should be a []byte
sig_bytes, err := sk.Sign(rand.Reader, message, nil)
// To verify a message
// First, deserialize the signature
sig, err := slh_dsa.LoadSignature(parameterSet, sig_bytes)
if pk.Verify(sig, message, []byte{}) {
// ok
}
// Serialize the signature as bytes
sig_bytes = sig.Bytes()
// Deserialize bytes to a Signature object
loaded_sig, err := slh_dsa.LoadSignature(parameterSet, sig_bytes)
```
## 测试
本项目包含模糊测试和变异测试,以确保实现的质量和稳健性。
### 模糊测试
要运行模糊测试,请使用以下命令:
```
go test -fuzz=FuzzSignAndVerify -fuzztime 60s ./slh_dsa
go test -fuzz=FuzzLoaders -fuzztime 60s ./slh_dsa
```
这将运行模糊测试 60 秒。
### 变异测试
要运行变异测试,首先需要安装 `go-gremlins`:
```
go install github.com/go-gremlins/gremlins@latest
```
然后,运行以下命令:
```
gremlins -v ./...
```
标签:CVE, EVTX分析, EVTX分析, FIPS 205, Go语言, NIST标准, SHA-2, SLH-DSA, SPHINCS+, 变异测试, 后量子密码学, 密码学库, 密钥生成, 抗量子计算, 数字签名, 无状态哈希数字签名, 日志审计, 程序破解, 签名验证