
مكتبة Rust خالصة للتشفير بالمفتاح العام RSA: توليد المفاتيح، تشفير/فك تشفير PKCS#1 v1.5 وOAEP، توقيعات PSS، بالإضافة إلى استيراد/تصدير المفاتيح.
تطبيق محمول لـ RSA بلغة Rust خالصة، مع مخططات تشفير وتوقيع محددة في 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، يمكنك محاولة الترجمة في وضع الإصدار (release mode) أو إضافة ما يلي إلى ملفCargo.tomlالخاص بك. يكون توليد المفاتيح أسرع بكثير عند البناء بمستويات تحسين أعلى، لكن هذا سيزيد وقت الترجمة قليلًا.[profile.debug] opt-level = 3
حاليًا في المرحلة 1 (v) 🚧
ستكون هناك ثلاث مراحل قبل إصدار 1.0 🚢.
خضعت هذه الحزمة لـتدقيق أمني واحد من Include Security، مع ملاحظة واحدة بسيطة فقط تم معالجتها منذ ذلك الحين.
راجع [المشكلات الأمنية المفتوحة] على متتبع المشكلات الخاص بنا للمشكلات المعروفة الأخرى.
على وجه الخصوص، تنفيذ [الرفع المعياري (modular exponentiation) ليس بزمن ثابت]،
لكن تباين التوقيت يتم إخفاؤه باستخدام [التعمية العشوائية (random blinding)]، وهي تقنية
شائعة الاستخدام. هذه الحزمة عرضة لـهجوم Marvin الذي قد يمكّن
مهاجمًا عبر الشبكة من استرداد المفتاح الخاص (راجع RUSTSEC-2023-0071).
يمكنك متابعة عملنا على التخفيف من هذه المشكلة في #390.
تدعم هذه الحزمة Rust 1.85 أو أعلى.
في المستقبل يمكن تغيير MSRV، لكن ذلك سيتم عبر رفع رقم الإصدار الفرعي (minor version bump).
مرخّصة بموجب أي من
حسب اختيارك.
ما لم تنص صراحةً على خلاف ذلك، فإن أي مساهمة تُقدَّم عمدًا لإدراجها في العمل من قبلك، كما هو محدد في رخصة Apache-2.0، ستكون مرخّصة بشكل مزدوج كما هو مذكور أعلاه، دون أي شروط أو أحكام إضافية.