
सर्वर, डेस्कटॉप, ब्राउज़र और एम्बेडेड अनुप्रयोगों के लिए (ड्राफ्ट) FIPS 203 Module-Lattice-based Key-Encapsulation Mechanism Standard का शुद्ध Rust कार्यान्वयन।
FIPS 203 (प्रारंभिक सार्वजनिक प्रारूप) Module-Lattice-Based Key-Encapsulation Mechanism मानक, जो शुद्ध Rust में सर्वर, डेस्कटॉप, ब्राउज़र और एम्बेडेड अनुप्रयोगों के लिए लिखा गया है। स्रोत रिपॉजिटरी में बेंचमार्किंग, एक एम्बेडेड टारगेट, constant-time सांख्यिकीय माप, फज़िंग, WASM निष्पादन, C FFI और Python बाइंडिंग्स प्रदर्शित करने वाले उदाहरण शामिल हैं।
यह crate FIPS 203 ड्राफ्ट मानक को शुद्ध Rust में न्यूनतम और मुख्यधारा निर्भरताओं के साथ लागू करता है, और बिना किसी unsafe कोड के। तीनों सुरक्षा पैरामीटर सेट पूरी तरह से समर्थित और परीक्षित हैं। यह कार्यान्वयन constant-time में संचालित होता है (rho के अलावा, जो encapsulation कुंजी का हिस्सा है और trust boundary के पार स्पष्ट रूप में भेजा जाता है), इसे standard library की आवश्यकता नहीं होती, जैसे #[no_std], इसमें कोई heap आवंटन नहीं होता, जैसे alloc की आवश्यकता नहीं, और वैकल्पिक रूप से RNG को उजागर करता है ताकि यह bare-metal तक के अनुप्रयोगों की पूरी श्रृंखला के लिए उपयुक्त हो। 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 दस्तावेज़ नीचे दिए गए वांछित सुरक्षा पैरामीटर के अनुरूप प्रत्येक मॉड्यूल के अंतर्गत उपलब्ध है।
dudect गतिशील परीक्षणों के माध्यम से होती है।RNG उजागर किया गया है।सामग्री आपकी पसंद के अनुसार Apache License Version 2.0 या MIT license के अंतर्गत लाइसेंसित है।
जब तक आप स्पष्ट रूप से अन्यथा नहीं कहते, जैसा कि Apache-2.0 लाइसेंस में परिभाषित है, कार्य में शामिल करने के लिए आपके द्वारा जानबूझकर प्रस्तुत किया गया कोई भी योगदान, बिना किसी अतिरिक्त शर्तों या नियमों के, उपरोक्त रूप में दोहरे लाइसेंस के अंतर्गत होगा।