
サーバー、デスクトップ、ブラウザ、および組み込みアプリケーション向けの、(ドラフト版) FIPS 203 Module-Latticeベース鍵カプセル化メカニズム標準のPure Rust実装。
FIPS 203(初期公開草案)モジュール格子ベース鍵カプセル化メカニズム標準を、サーバー、デスクトップ、ブラウザ、 組み込みアプリケーション向けに純粋な Rust で記述したものです。ソースリポジトリには、ベンチマーク、組み込みターゲット、定数時間の統計測定、ファジング、WASM 実行、C FFI、Python バインディングを示すサンプルが含まれています。
このクレートは、FIPS 203 ドラフト標準を、最小限かつ一般的な依存関係のみを使用し、純粋な Rust で実装しており、**
unsafe コードは一切使用していません**。3 つすべてのセキュリティパラメータセットが完全にサポートされ、テストされています。この実装は
定数時間で動作し(rho を除く。rho は信頼境界を越えて平文で送信されるカプセル化鍵の一部です)、
標準ライブラリを必要とせず(例: #[no_std])、ヒープ割り当てもなく(例: alloc 不要)、オプションで
RNG を公開するため、ベアメタルに至るまであらゆるアプリケーションに適しています。API は安定化されており、
コードは安全性と正確性を重視しています。標準が成熟するにつれて、さらなるパフォーマンス最適化が
実装される予定です。このクレートは、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 のドキュメントは、下記の目的の セキュリティパラメータに対応する各モジュールの下にあります。
dudect 動的テストによって行われます。RNG が公開されていることに注意してください。内容は、Apache License Version 2.0 または MIT ライセンス のいずれかを選択してライセンスされます。
明示的に別段の表明をしない限り、Apache-2.0 ライセンスで定義されているように、あなたが本作品に 含めるために意図的に提出した貢献は、追加の条件なしに上記のとおりデュアルライセンスされます。