#secret-key #encapsulation #lattice #kem #kyber #send

no-std fips203

FIPS 203(草案):基于模块-格密钥封装机制

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

Download history 280/week @ 2024-04-24 140/week @ 2024-05-01 6/week @ 2024-05-15 16/week @ 2024-05-22 2/week @ 2024-05-29 8/week @ 2024-06-05 5/week @ 2024-06-12

每月下载679
fips203-ffi中使用

MIT/Apache

365KB
958

IntegrityChain: FIPS 203模块-基于格密钥封装机制标准

crate Docs Build Status Apache2/MIT licensed Rust Version

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);

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

注意

  • 此crate功能完全,对应于FIPS 203的第一个初始公开草案。
  • 恒时操作仅在MSRV的源代码级别上针对目标,并通过手动审查/检查、嵌入式目标和dudect动态测试进行确认。
  • 请注意,FIPS 203在第3.3节中对随机性提出了具体要求,因此暴露了RNG
  • 需要Rust 1.70 或更高版本。最低支持的Rust版本(MSRV)可能会在未来改变,但将采用小版本号升级(当主版本号大于0时)。
  • 此库的所有默认开启功能都受SemVer保护。
  • FIPS 203草案标准和本软件为实验性 -- 使用风险自负!

许可证

内容可按您的选择使用Apache许可证版本2.0MIT许可证

贡献

除非您明确说明,否则您提交的任何旨在包含在本作品中的贡献,如Apache-2.0许可证中定义,将按上述方式双重授权,不附加任何额外条款或条件。

依赖项

~1.5–2.2MB
~30K SLoC