
تشفير Rust بدون أي تبعيات افتراضية: BLAKE3، Ed25519/X25519، تجزئات، MACs، KDFs، AEADs، ومجاميع فحص مع تسريع كامل عبر SIMD/ASM
rscrypto يوفر بدائيات تشفير نقية مكتوبة بلغة Rust، وتجزئات تشفيرية وسريعة،
وتجزئة كلمات مرور، ومجاميع اختبارية خلف نموذج ميزات واحد.
لا يمتلك أي اعتماد على C/FFI إنتاجي أو OpenSSL أو مكتبات النظام. الميزات المفردة تدعم بناءات ضيقة النطاق؛ بينما تؤلف الميزات الشاملة أسطحًا أكبر.
استخدم ميزة مفردة واحدة لبدائية واحدة، أو مجموعة لبدائيات فرعية، أو full لسطح الصندوق الكامل. الخلفية المحمولة بلغة Rust حاضرة دائمًا. إن SIMD وASM مجرد مسرّعات.
لقطة معايير منشورة: متوسط هندسي 1.59x عبر منفّذي Linux مقابل المنافسين الخارجيين الأسرع، مع 4,052 / 6,750 فوزًا و 6,101 / 6,750 فوزًا أو تعادلًا.
الأدلة المحلية على macOS Apple Silicon: متوسط هندسي 1.37x مقابل المنافسين الخارجيين الأسرع، مع 382 / 774 فوزًا و 708 / 774 فوزًا أو تعادلًا.
النتائج الخام والمنهجية والخسائر المعروفة موجودة في
benchmark_results/OVERVIEW.md.
الرسم: بطاقة نتائج المعايير. القيم الأعلى من 1.00x تعني أن rscrypto أسرع من أسرع تنفيذ خارجي مطابق.
no_std وWASM والخادم وCLI والمدمجة والمقيّدة بالتدقيق تستخدم نفس نموذج الميزات المفردة.rscrypto صندوق بدائيات. ليس حزمة TLS، ولا عدة PKI، ولا مخزن مفاتيح، ولا تنفيذ بروتوكول. لا يدّعي التحقق من FIPS 140-3، أو تدقيقًا من طرف ثالث، أو تحققًا رسميًا، أو سلوك زمن ثابت على مستوى الصندوق كاملًا.
بناء SHA-2 أدنى النطاق no_std:
[dependencies]
rscrypto = { version = "0.7.8", default-features = false, features = ["sha2"] }
حزمة البدائيات الكاملة مع تفعيل العشوائية من نظام التشغيل:
[dependencies]
rscrypto = { version = "0.7.8", features = ["full", "getrandom"] }
استخدم default-features = false لبناءات no_std. فعّل getrandom فقط عندما تحتاج واجهات برمجية تولّد الأملاح أو المفاتيح أو قيم nonce أو إنتروبيا توليد مفاتيح RSA من نظام التشغيل.
use rscrypto::Sha256;
let one_shot = Sha256::digest(b"hello world");
let mut h = Sha256::new();
h.update(b"hello ");
h.update(b"world");
assert_eq!(h.finalize(), one_shot);
الشكل العام للواجهة هو لمرة واحدة عند الملاءمة، وبثّي عند الحاجة.
استخدم docs/types.md عندما تحتاج إلى خريطة الأنواع الكاملة، وdocs/features.md عندما تحتاج إلى أصغر مجموعة ميزات.
السمات (flags) متدرجة حسب الاستخدام:
sha2, blake3, aes-gcm, ed25519, x25519, ml-kem, crc32, إلخ.hashes, checksums, macs, kdfs, password-hashing, aead, signatures, key-exchange.الجرد الكامل للميزات: docs/features.md.
الجرد العام للأنواع: docs/types.md.
يقدّم rscrypto ادعاءات زمن ثابت محدودة النطاق ومقيدة بالإصدارات للعمليات الحاملة للأسرار فقط، وليس لكل دالة في الصندوق. يسجّل ct.toml مجموعة البدائيات/الإعدادات المرشحة؛ وهو لا ينشئ ادعاءً عامًا بحد ذاته. لا يوجد ادعاء إلا عندما يتضمّن إصدار GitHub الموقّع المطابق حزمة موثّقة rscrypto-X.Y.Z-ct-evidence.tar.gz تجتاز جميع البوابات المطلوبة لذلك الإصدار والالتزام والهدف والملف الشخصي ومجموعة الميزات بالضبط.
المُلّاك ذوو الحجم الثابت الحاملون للأسرار لا يطبّقون PartialEq أو Eq. تعيد دوال ct_eq الخاصة بهم CtDecision مبهمًا؛ ويجب على المستدعين استهلاكه صراحةً عبر declassify() للحصول على بت قابل للتفرع. تُبقي واجهات التحقق تلك الحدود داخلية وتعيد Result مبهمًا واحدًا. هذه مقاومة لسوء الاستخدام عند حدود واجهة Rust البرمجية، وليست إثباتًا بشأن كود الآلة النهائي.
الأسطح المرشحة الرئيسية الحاملة للأسرار في ct.toml هي التحقق من MAC/الوسوم، وشكل فشل المصادقة في AEAD، وضرب الكميات العددية في X25519، وتوقيع Ed25519 واشتقاق المفتاح العام السري، والتوقيع المُعمّى ECDSA P-256/P-384، والأسطح السرية لتوليد مفتاح ML-KEM-512/768/1024 والتغليف وفك التغليف، وفروع توقيع/فك تشفير RSA الخاصة، ومقارنات مختارة للتحقق من كلمات المرور.
التحليل العام، وتوليد المفاتيح غير المدرج، والعشوائية من نظام التشغيل، والتجزئات الخام، والمجاميع الاختبارية، والتجزئات غير التشفيرية، ومسارات قياس الأداء، وحسابات التحقق بالمفتاح العام ليست ادعاءات زمن ثابت شاملة. راجع docs/constant-time.md للاطلاع على الادعاء ونموذج التحقق بالضبط، وdocs/compliance.md لحدود المراجعة. الإصدارات حتى v0.6.4 لا تحتوي على هذه الحزمة، وبالتالي لا تحمل أي ادعاء زمن ثابت مقيد بالإصدار.
يُبقي rscrypto المسار المحمول بلغة Rust كمرجع حرفي بايت ببايت. لا يتم اختيار نوى ISA إلا عندما يدعمها الهدف وCPU وقت التشغيل.
مصفوفة المنصات الكاملة: docs/platforms.md.
يقدّم rscrypto ادعاءات زمن ثابت محدودة النطاق فقط عندما ينشر إصدار مطابق حزمة الأدلة المطلوبة، وليس أبدًا لكل واجهة أو بناء. المُلّاك السريون ذوو الحجم الثابت المذكورون في docs/secret-ownership.md يكتبون فوق البايتات التي يملكونها عند الإفلات ويُخفون Debug؛ ولا يمتد الادعاء إلى نسخ المستدعي. تستخدم إخفاقات التحقق أخطاء مبهمة، وتقوم عمليات فتح AEAD الفاشلة بمسح مخازن إخراج المستدعي. مخرجات الإصدار مقيدة بوسوم موقّعة، وتُنشر عبر crates.io Trusted Publishing، وتغطيها مصادقات أصل البناء في GitHub.
لا يُدّعى وجود تدقيق من طرف ثالث، أو شهادة FIPS 140-3، أو إثبات رسمي على مستوى الصندوق كاملًا. أبلغ عن الثغرات عبر الإبلاغ الخاص بالثغرات على GitHub أو SECURITY.md، وليس عبر القضايا العامة.
examples/، docs/features.md، docs/types.mdSECURITY.md، THREAT_MODEL.md، docs/constant-time.md، docs/compliance.mddocs/test-vector-coverage.md، docs/platforms.md، Rust 1.91.0.
يُستخدم إصدار nightly المثبّت في rust-toolchain.toml لفحوصات Miri واللغط والبنى غير المألوفة.
مرخّص بموجب ترخيص مزدوج Apache-2.0 أو MIT، وفق خيارك.
| المهمة | الميزة | ابدأ من هنا |
|---|
| ختم/فتح AEAD | chacha20poly1305,getrandom | examples/aead_seal_open.rs |
| توقيعات Ed25519 وECDSA | ed25519,ecdsa-p256,getrandom | examples/signatures.rs |
| التحقق RSA-PSS | rsa | examples/rsa_pss_verify.rs |
| السر المشترك ML-KEM | ml-kem,getrandom | examples/mlkem_encapsulation.rs |
| تجزئة كلمات مرور Argon2id وscrypt | password-hashing,getrandom | examples/password_hashing.rs |
| الاحتياج | المتضمن | مسار الميزة |
|---|
| تجزئات تشفيرية | SHA-2, SHA-3, SHAKE, cSHAKE128/256, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOF | hashes أو ميزات مفردة |
| MACs وKDFs | HMAC-SHA-2/SHA-3, KMAC128/256, Poly1305 مستقل، HKDF-SHA-2, PBKDF2-HMAC-SHA-2 | auth أو ميزات مفردة |
| تجزئة كلمات المرور | بدائيات Argon2d/i/id الخام وscrypt KDFs؛ سجلات كلمات مرور PHC مولّدة ومحدودة | auth, argon2, scrypt, phc-strings |
| بدائيات المفتاح العام | توقيع/تحقق ECDSA P-256/P-384، توقيعات Ed25519، توقيع/تحقق RSA/OAEP/RSAES-PKCS1-v1_5/توليد مفاتيح، تبادل مفاتيح X25519، KEMs الخاصة بـ ML-KEM-512/768/1024 | auth, signatures, key-exchange, ecdsa, ecdsa-p256, ecdsa-p384, ed25519, rsa, x25519, ml-kem |
| تشفير AEAD | AES-128/256-GCM, AES-128/256-GCM-SIV, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128 | aead أو ميزات مفردة |
| مجاميع اختبارية | CRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMe | checksums أو ميزات مفردة |
| تجزئات سريعة | XXH3-64/128, RapidHash V3-64 | xxh3, rapidhash |
std, alloc, getrandom, parallel, serde, portable-only؛ serde-secrets يُدرج المواد السرية صراحةً في serde.| عائلة الهدف | أمثلة التسريع |
|---|
| x86 / x86_64 | SSE4.2, AVX2, AVX-512, AES-NI, SHA-NI, VAES, VPCLMULQDQ |
| Arm / AArch64 / Apple Silicon | NEON, AES, PMULL, SHA2, SHA3, SVE2-PMULL |
| IBM Z | CPACF, MSA, VGFM, حساب z/Vector ML-KEM |
| POWER / ppc64le | إضافات المتجهات والتشفير POWER8/9/10 |
| RISC-V | RVV, Zbc, Zvkned, Zvbc |
| WASM | SIMD128 حيثما كان متاحًا، وتراجع محمول في كل مكان |
docs/migration/CONTRIBUTING.mdCHANGELOG.md، docs/release.md