6个版本
0.2.2 | 2024年8月2日 |
---|---|
0.2.1 | 2024年6月19日 |
0.2.0 | 2024年5月25日 |
0.1.2 | 2024年5月6日 |
0.1.0 | 2023年12月29日 |
#280 in 密码学
232 每月下载量
1.5MB
1.5K SLoC
IntegrityChain: FIPS 204 模块-格基数字签名标准
FIPS 204 (初始公开草案) 模块-格基数字签名标准,纯Rust编写,适用于服务器、桌面、浏览器和嵌入式应用程序。源代码库包括基准测试、嵌入式目标、恒时统计测量、模糊测试和WASM执行示例。
此crate以纯Rust实现FIPS 204 草案标准,依赖性最小且主流,**且不包含任何不安全代码**。所有三个安全参数集都完全功能化和经过测试。实现的关键生成和签名功能在恒时运行,不需要标准库,例如 #[no_std]
,没有堆分配,例如不需要 alloc
,并公开了 RNG
,因此适用于从裸机到全范围的各类应用程序。API已稳定,代码高度侧重于安全和正确性;随着标准的成熟,将实现进一步的性能优化。此crate将迅速跟踪FIPS 204的任何变化。
有关目标功能的完整描述,请参阅https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.204.ipd.pdf。
功能非常简单易用,以下示例展示了这一点。
// Use the desired target parameter set.
# use std::error::Error;
#
# fn main() -> Result<(), Box<dyn Error>> {
# #[cfg(all(feature = "ml-dsa-44", feature = "default-rng"))] {
use fips204::ml_dsa_44; // Could also be ml_dsa_65 or ml_dsa_87.
use fips204::traits::{SerDes, Signer, Verifier};
let message = [0u8, 1, 2, 3, 4, 5, 6, 7];
// Generate key pair and signature
let (pk1, sk) = ml_dsa_44::try_keygen()?; // Generate both public and secret keys
let sig = sk.try_sign(&message)?; // Use the secret key to generate a message signature
// Serialize then send the public key, message and signature
let (pk_send, msg_send, sig_send) = (pk1.into_bytes(), message, sig);
let (pk_recv, msg_recv, sig_recv) = (pk_send, msg_send, sig_send);
// Deserialize the public key and signature, then verify the message
let pk2 = ml_dsa_44::PublicKey::try_from_bytes(pk_recv)?;
let v = pk2.verify(&msg_recv, &sig_recv); // Use the public to verify message signature
assert!(v);
# }
# Ok(())
# }
备注
- 此crate完全功能化,对应于FIPS 204的第一个初始公开草案。
- 恒时保证仅针对MSRV的源代码级别,并通过手动审查/检查、嵌入式目标和
dudect
动态测试进行确认。 - 请注意,FIPS 204在第3.5.1节对随机性有特定要求,因此公开了
RNG
。 - 需要 Rust 1.70 或更高版本。最低支持的 Rust 版本可能会在未来更改,但将以较小的版本增量(当主要版本大于 0 时)进行更改。
- 此库的所有默认启用功能均受
SemVer
保护。 - FIPS 204 草案标准和此软件是实验性的 -- 使用风险自负!
许可证
内容可根据您的选择,受 Apache 许可证 2.0 版 或 MIT 许可证 保护。
贡献
除非您明确声明,否则您提交的任何有意包含在作品中的贡献,根据 Apache-2.0 许可证的定义,将按上述方式双重许可,不附加任何额外条款或条件。
依赖项
~1.4–2.1MB
~29K SLoC