
RSA सार्वजनिक-कुंजी क्रिप्टोग्राफी के लिए शुद्ध Rust लाइब्रेरी: कुंजी निर्माण, PKCS#1 v1.5 और OAEP एन्क्रिप्शन/डिक्रिप्शन, PSS हस्ताक्षर, साथ ही कुंजी आयात/निर्यात।
शुद्ध Rust में एक पोर्टेबल RSA कार्यान्वयन।
use rsa::{Pkcs1v15Encrypt, RsaPrivateKey, RsaPublicKey};
let mut rng = rand::rng();
let bits = 2048;
let priv_key = RsaPrivateKey::new(&mut rng, bits).expect("failed to generate a key");
let pub_key = RsaPublicKey::from(&priv_key);
// Encrypt
let data = b"hello world";
let enc_data = pub_key.encrypt(&mut rng, Pkcs1v15Encrypt, &data[..]).expect("failed to encrypt");
assert_ne!(&data[..], &enc_data[..]);
// Decrypt
let dec_data = priv_key.decrypt(Pkcs1v15Encrypt, &enc_data).expect("failed to decrypt");
assert_eq!(&data[..], &dec_data[..]);
नोट: यदि आप
RsaPrivateKey::newका उपयोग करते समय असामान्य रूप से धीमी कुंजी निर्माण समय का सामना करते हैं, तो आप रिलीज़ मोड में कंपाइल करने या अपनीCargo.tomlमें निम्नलिखित जोड़ने का प्रयास कर सकते हैं। उच्च अनुकूलन स्तरों के साथ निर्माण करने पर कुंजी निर्माण बहुत तेज़ होती है, लेकिन इससे कंपाइल समय थोड़ा बढ़ जाएगा।[profile.debug] opt-level = 3
वर्तमान में चरण 1 (v) 🚧 पर है।
1.0 🚢 जारी होने से पहले तीन चरण होंगे।
इस क्रेट को Include Security द्वारा एक सुरक्षा ऑडिट प्राप्त हुआ है, जिसमें केवल एक छोटी सी खोज थी जिसे बाद में संबोधित कर दिया गया है।
अन्य ज्ञात समस्याओं के लिए हमारे issue ट्रैकर पर [खुले सुरक्षा मुद्दों] को देखें।
विशेष रूप से [मॉड्यूलर घातांक का कार्यान्वयन स्थिर समय (constant time) नहीं है], लेकिन समय परिवर्तनशीलता को [रैंडम ब्लाइंडिंग] का उपयोग करके छिपाया जाता है, जो एक सामान्य रूप से उपयोग की जाने वाली तकनीक है। यह क्रेट Marvin Attack के प्रति संवेदनशील है, जो एक नेटवर्क हमलावर द्वारा निजी कुंजी पुनर्प्राप्ति को सक्षम कर सकता है (देखें RUSTSEC-2023-0071)।
आप इस मुद्दे को कम करने पर हमारे कार्य को #390 में अनुसरण कर सकते हैं।
यह क्रेट Rust 1.85 या उच्चतर का समर्थन करता है।
भविष्य में MSRV को बदला जा सकता है, लेकिन यह एक मामूली संस्करण वृद्धि के साथ किया जाएगा।
निम्नलिखित में से किसी एक के अंतर्गत लाइसेंस प्राप्त है
आपकी पसंद पर।
जब तक आप स्पष्ट रूप से अन्यथा नहीं कहते, Apache-2.0 लाइसेंस में परिभाषित अनुसार, कार्य में शामिल करने के लिए आपके द्वारा जानबूझकर प्रस्तुत किया गया कोई भी योगदान, बिना किसी अतिरिक्त शर्तों या शर्तों के, उपरोक्तानुसार द्वि-लाइसेंस प्राप्त होगा।