
RSA सार्वजनिक-कुंजी क्रिप्टोग्राफी के लिए शुद्ध Rust लाइब्रेरी: कुंजी निर्माण, PKCS#1 v1.5 और OAEP एन्क्रिप्शन/डिक्रिप्शन, PSS हस्ताक्षर, साथ ही कुंजी आयात/निर्यात।
शुद्ध Rust में एक पोर्टेबल RSA कार्यान्वयन, जिसमें एन्क्रिप्शन और हस्ताक्षर योजनाएँ PKCS#1 v2.2 (RFC8017) में निर्दिष्ट हैं।
| योजना | उद्देश्य | विनिर्देश |
|---|---|---|
| RSAES-OAEP | एन्क्रिप्शन | RFC8017 §7.1 |
| RSAES-PKCS1-v1_5 | एन्क्रिप्शन | RFC8017 §7.2 |
| RSASSA-PSS | हस्ताक्षर | RFC8017 §8.1 |
| RSASSA-PKCS1-v1_5 | हस्ताक्षर | RFC8017 §8.2 |
PKCS#1 v1.5 एन्क्रिप्शन केवल लेगेसी अनुप्रयोगों के साथ संगतता के लिए प्रदान किया गया है। नए एन्क्रिप्शन अनुप्रयोगों के लिए OAEP और PSS को प्राथमिकता दें।
ज्ञात कार्यान्वयन भेद्यताओं के लिए नीचे दी गई सुरक्षा चेतावनी देखें।
use rsa::{Oaep, RsaPrivateKey, RsaPublicKey};
use sha2::Sha256;
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, Oaep::<Sha256>::new(), &data[..]).expect("failed to encrypt");
assert_ne!(&data[..], &enc_data[..]);
// Decrypt
let dec_data = priv_key.decrypt_blinded(&mut rng, Oaep::<Sha256>::new(), &enc_data).expect("failed to decrypt");
assert_eq!(&data[..], &dec_data[..]);
नोट: यदि
RsaPrivateKey::newका उपयोग करते समय आपको असामान्य रूप से धीमा key generation समय अनुभव होता है, तो आप release mode में compile करने का प्रयास कर सकते हैं या अपनेCargo.tomlमें निम्नलिखित जोड़ सकते हैं। उच्च optimization स्तरों के साथ build करते समय key generation बहुत तेज़ होता है, लेकिन इससे compile समय थोड़ा बढ़ जाएगा।[profile.debug] opt-level = 3
वर्तमान में Phase 1 (v) पर 🚧
1.0 🚢 जारी होने से पहले तीन चरण होंगे।
इस crate को Include Security द्वारा एक security audit प्राप्त हुआ है, जिसमें केवल एक मामूली finding थी जिसे तब से संबोधित कर लिया गया है।
अन्य ज्ञात समस्याओं के लिए हमारे issue tracker पर open security issues देखें।
विशेष रूप से [modular exponentiation का implementation constant time नहीं है],
लेकिन timing variability को random blinding का उपयोग करके छिपाया जाता है, जो एक सामान्य रूप से
उपयोग की जाने वाली तकनीक है। यह crate Marvin Attack के प्रति संवेदनशील है जो एक network attacker द्वारा
private key recovery को सक्षम कर सकता है (देखें RUSTSEC-2023-0071)।
आप इस समस्या को कम करने पर हमारे काम को #390 में फ़ॉलो कर सकते हैं।
यह crate Rust 1.85 या उच्चतर का समर्थन करता है।
भविष्य में MSRV बदला जा सकता है, लेकिन यह minor version bump के साथ किया जाएगा।
निम्नलिखित में से किसी एक के अंतर्गत लाइसेंस प्राप्त
आपकी पसंद पर।
जब तक आप स्पष्ट रूप से अन्यथा न कहें, Apache-2.0 लाइसेंस में परिभाषित अनुसार, कार्य में शामिल करने के लिए आपके द्वारा जानबूझकर प्रस्तुत कोई भी योगदान, बिना किसी अतिरिक्त नियम या शर्तों के, ऊपर के अनुसार dual licensed होगा।