Quantum-Blockchains/dilithium

GitHub: Quantum-Blockchains/dilithium

纯 Rust 实现的 CRYSTALS-Dilithium 和 ML-DSA 后量子数字签名算法库,提供抗量子计算攻击的密钥生成与签名验证功能。

Stars: 27 | Forks: 9

# crystals-dilithium 纯 Rust 实现: - CRYSTALS-Dilithium(`dilithium2`、`dilithium3`、`dilithium5`) - ML-DSA(`ml_dsa_44`、`ml_dsa_65`、`ml_dsa_87`) 该代码库基于参考实现构建,包含针对内部向量和 ACVP 风格数据集的测试覆盖。 ## 安全说明 此项目尚未经过第三方安全审计。生产环境使用前应进行您自己的安全审查。 ## 构建 ``` cargo build --release ``` ## 快速开始(Dilithium) ``` use crystals_dilithium::dilithium2::Keypair; let seed = [42u8; 32]; let msg = b"hello world"; let keypair = Keypair::generate(Some(&seed)).unwrap(); let signature = keypair.sign(msg); let is_verified = keypair.verify(msg, &signature); assert!(is_verified); ``` ## 快速开始(ML-DSA) ``` use crystals_dilithium::ml_dsa_44::Keypair; use crystals_dilithium::RandomMode; let seed = [7u8; 32]; let msg = b"hello world"; let keypair = Keypair::generate(Some(&seed)).unwrap(); let sig = keypair.sign(msg, None, RandomMode::Deterministic).unwrap(); assert!(keypair.verify(msg, &sig, None)); ``` ## ML-DSA 模式 ML-DSA API 支持三种签名/验证流程: 1. 纯模式 - 签名:`sign(msg, ctx, rand)` - 验证:`verify(msg, sig, ctx)` 2. 预哈希模式 - 签名:`prehash_sign(msg, ctx, rand, ph)` - 验证:`prehash_verify(msg, sig, ctx, ph)` - `ph` 是来自 `prehash::PH` 的受支持预哈希算法之一 3. 内部模式(仅用于 ACVP/内部测试) - 需要特性:`acvp-internal` - 签名/验证预构建输入:`sign_internal`、`verify_internal`、`sign_mu`、`verify_mu` `RandomMode` 控制 ML-DSA 签名中的随机数/随机性行为: - `RandomMode::Deterministic`:确定性签名 - `RandomMode::Hedged`:随机化(基于 RNG)签名 - `RandomMode::Fixed(bytes)`:固定随机数流(仅限 `acvp-internal`) 注意: - `ctx` 是可选的上下文数据,最多 255 字节。 - API 变体可在 `ml_dsa_44`、`ml_dsa_65` 和 `ml_dsa_87` 中获取。 ### 模式示例 纯模式: ``` use crystals_dilithium::ml_dsa_65::Keypair; use crystals_dilithium::RandomMode; let kp = Keypair::generate(Some(&[9u8; 32])).unwrap(); let msg = b"pure mode"; let sig = kp.sign(msg, Some(b"app:v1"), RandomMode::Deterministic).unwrap(); assert!(kp.verify(msg, &sig, Some(b"app:v1"))); ``` 预哈希模式: ``` use crystals_dilithium::ml_dsa_65::Keypair; use crystals_dilithium::prehash::PH; use crystals_dilithium::RandomMode; let kp = Keypair::generate(Some(&[10u8; 32])).unwrap(); let msg = b"prehash mode"; let sig = kp .prehash_sign(msg, None, RandomMode::Hedged, PH::SHA256) .unwrap(); assert!(kp.prehash_verify(msg, &sig, None, PH::SHA256)); ``` 内部模式(`acvp-internal`)仅用于 ACVP/内部向量。 ## 错误处理(推荐) 密钥生成和密钥反序列化现在返回 `Result`,以避免在格式错误的输入上发生 panic。 ``` use crystals_dilithium::dilithium2::PublicKey; fn parse_public_key(bytes: &[u8]) -> Result { PublicKey::from_bytes(bytes) } ``` 同样适用于: - `Keypair::generate(...)` - `Keypair::from_bytes(...)` - `SecretKey::from_bytes(...)` - `PublicKey::from_bytes(...)` ## 测试 ``` cargo test ``` ACVP 内部测试向量已启用特性门控: ``` cargo test --test acvp_internal --features acvp-internal ``` ## 基准测试 Criterion 基准测试: ``` cargo bench ``` ## 文档 ``` cargo doc --open ``` ## 许可证 GPL-3.0-only。参见 [LICENSE](LICENSE)。
标签:cryptographic library, CRYSTALS-Dilithium, CVE, lattice-based cryptography, ML-DSA, post-quantum, PQC, Rust, 可视化界面, 后量子密码学, 密码学, 密钥对生成, 手动系统调用, 数字签名, 格基密码, 签名验证, 网络流量审计, 通知系统, 量子抗性