3个版本
0.1.2 | 2024年3月15日 |
---|---|
0.1.1 | 2024年2月10日 |
0.1.0 | 2023年12月30日 |
#725 in 密码学
420KB
1.5K SLoC
IntegrityChain: FIPS 205无状态基于哈希的数字签名标准
FIPS 205(初始公开草案)是专为服务器、桌面、浏览器和嵌入式应用程序编写的纯Rust实现的FIPS 205无状态基于哈希的数字签名标准。代码仓库包括C FFI和Python绑定。
这个crate使用纯Rust实现了FIPS 205 草案标准,具有最小和主流依赖。所有十二组(!)安全参数集都是完全功能的。该实现不需要标准库,例如,不需要#[no_std]
,没有堆分配,例如不需要alloc
,并公开了RNG
,因此适用于从服务器到裸机的所有应用程序。API已稳定,代码偏向于安全性和正确性;随着标准的成熟,将实现进一步的性能优化。此crate将迅速跟踪FIPS 205的任何更改。
有关目标功能的完整描述,请参阅https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.205.ipd.pdf。
功能非常简单易用,如下例所示。
use fips205::slh_dsa_shake_128s; // Could use any of the twelve security parameter sets.
use fips205::traits::{SerDes, Signer, Verifier};
# use std::error::Error;
#
# fn main() -> Result<(), Box<dyn Error>> {
let msg_bytes = [0u8, 1, 2, 3, 4, 5, 6, 7];
// Generate key pair and signature
let (pk1, sk) = slh_dsa_shake_128s::try_keygen_vt()?; // Generate both public and secret keys
let sig_bytes = sk.try_sign_ct(&msg_bytes, true)?; // Use the secret key to generate signature
// Serialize the public key, and send with message and signature bytes
let (pk_send, msg_send, sig_send) = (pk1.into_bytes(), msg_bytes, sig_bytes);
let (pk_recv, msg_recv, sig_recv) = (pk_send, msg_send, sig_send);
// Deserialize the public key, then use it to verify the msg signature
let pk2 = slh_dsa_shake_128s::PublicKey::try_from_bytes(&pk_recv)?;
let v = pk2.try_verify_vt(&msg_recv, &sig_recv)?;
assert!(v);
# Ok(())
# }
详细的Rust 文档位于以下每个对应于所需安全参数的模块下。
注意
- 这个crate完全功能齐全,与FIPS 205的第一个初始公开草案相对应。
- 恒时保证仅针对源代码级别,并且是正在进行的工作。
- 请注意,FIPS 205在第3.1节中对随机性有具体要求,因此公开了
RNG
。 - 需要Rust 1.70或更高版本。最低支持的Rust版本可能会在未来更改,但将以次要版本号的增加方式进行。
- 此库的所有默认功能均受SemVer保护。
- 此软件是实验性的,仍在积极开发中 - 使用风险自负!
许可证
内容根据您的选择,受Apache License 2.0或MIT许可证的许可。
贡献
除非您明确说明,否则根据Apache-2.0许可证定义,您有意提交以包含在本工作中的任何贡献,将双重许可如上所述,没有任何额外条款或条件。
依赖项
~1.5-2.2MB
~31K SLoC