9个版本
0.2.1 | 2024年5月1日 |
---|---|
0.2.0 | 2024年4月26日 |
0.1.6 | 2024年4月24日 |
0.1.3 | 2024年2月27日 |
0.1.0 | 2023年12月30日 |
#289 in 密码学
每月下载679次
在fips203-ffi中使用
365KB
958 行
IntegrityChain: FIPS 203模块-基于格密钥封装机制标准
FIPS 203(初始公开草案)是纯Rust编写的,用于服务器、桌面、浏览器和嵌入式应用程序的基于模块-格密钥封装机制标准。源代码库包括展示基准测试、嵌入式目标、恒时统计测量、模糊测试、WASM执行、C FFI和Python绑定的示例。
此crate以纯Rust实现了FIPS 203 草案标准,依赖关系最少、最主流,且没有任何不安全代码。完全支持并测试了所有三个安全参数集。实现以恒时操作(在rho之外,rho是封装键的一部分,在跨越信任边界的明文发送),不需要标准库,例如 #[no_std]
,没有堆分配,例如不需要 alloc
,并且可选地暴露了 RNG
,因此适用于从裸机到全范围的各类应用程序。API已稳定,代码在安全性和正确性方面有很高的优先级;随着标准的成熟,将实现进一步的性能优化。此crate将迅速跟踪FIPS 203的任何变化。
有关目标功能的完整描述,请参阅https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.203.ipd.pdf
功能极其简单易用,如下例所示。
// Use the desired target parameter set.
use fips203::ml_kem_512; // Could also be ml_kem_768 or ml_kem_1024.
use fips203::traits::{Decaps, Encaps, KeyGen, SerDes};
// Alice runs `try_keygen()` and then serializes the encaps key `ek` for Bob (to bytes).
let (alice_ek, alice_dk) = ml_kem_512::KG::try_keygen().unwrap();
let alice_ek_bytes = alice_ek.into_bytes();
// Alice sends the encaps key `ek_bytes` to Bob.
let bob_ek_bytes = alice_ek_bytes;
// Bob deserializes the encaps `ek_bytes` and then runs `encaps() to get the shared
// secret `ssk` and ciphertext `ct`. He serializes the ciphertext `ct` for Alice (to bytes).
let bob_ek = ml_kem_512::EncapsKey::try_from_bytes(bob_ek_bytes).unwrap();
let (bob_ssk_bytes, bob_ct) = bob_ek.try_encaps().unwrap();
let bob_ct_bytes = bob_ct.into_bytes();
// Bob sends the ciphertext `ct_bytes` to Alice
let alice_ct_bytes = bob_ct_bytes;
// Alice deserializes the ciphertext `ct` and runs `decaps()` with her decaps key
let alice_ct = ml_kem_512::CipherText::try_from_bytes(alice_ct_bytes).unwrap();
let alice_ssk_bytes = alice_dk.try_decaps(&alice_ct).unwrap();
// Alice and Bob will now have the same secret key
assert_eq!(bob_ssk_bytes, alice_ssk_bytes);
注意
- 此crate功能完全,对应于FIPS 203的第一个初始公开草案。
- 恒时操作仅在MSRV的源代码级别上针对目标,并通过手动审查/检查、嵌入式目标和
dudect
动态测试进行确认。 - 请注意,FIPS 203在第3.3节中对随机性提出了具体要求,因此暴露了
RNG
。 - 需要Rust 1.70 或更高版本。最低支持的Rust版本(MSRV)可能会在未来改变,但将采用小版本号升级(当主版本号大于0时)。
- 此库的所有默认开启功能都受SemVer保护。
- FIPS 203草案标准和本软件为实验性 -- 使用风险自负!
许可证
内容可按您的选择使用Apache许可证版本2.0或MIT许可证。
贡献
除非您明确说明,否则您提交的任何旨在包含在本作品中的贡献,如Apache-2.0许可证中定义,将按上述方式双重授权,不附加任何额外条款或条件。
依赖项
~1.5–2.2MB
~30K SLoC