#signature #lattice #key-pair #generate-keys #dilithium

无需std fips204

FIPS 204 (草案): 模块-格基数字签名

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 密码学

Download history 145/week @ 2024-05-04 12/week @ 2024-05-11 19/week @ 2024-05-18 189/week @ 2024-05-25 32/week @ 2024-06-01 27/week @ 2024-06-08 128/week @ 2024-06-15 19/week @ 2024-06-22 10/week @ 2024-06-29 16/week @ 2024-07-06 2/week @ 2024-07-13 26/week @ 2024-07-20 58/week @ 2024-07-27 117/week @ 2024-08-03 31/week @ 2024-08-10

232 每月下载量

MIT/Apache

1.5MB
1.5K SLoC

IntegrityChain: FIPS 204 模块-格基数字签名标准

crate Docs Build Status Apache2/MIT licensed Rust Version

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(())
# }

Rust 文档位于每个对应于以下所需安全参数模块下面。

备注

  • 此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