
एक गीगाबाइट-प्रति-सेकंड, मल्टी-थ्रेडेड फ़ाइल एन्क्रिप्शन इंजन। लॉक-फ्री, ट्रिपल-बफ़र्ड io_uring पाइपलाइन, रेयॉन समानांतर चंकिंग, और हार्डवेयर-त्वरित AEADs (AES-256-GCM / ChaCha20) का उपयोग करके अत्यधिक थ्रूपुट प्राप्त करता है।
Rust में निर्मित एक मल्टी-थ्रेडेड AEAD एन्क्रिप्शन इंजन। ट्रिपल-बफर्ड io_uring पाइपलाइन, Rayon के माध्यम से समानांतर चंक प्रोसेसिंग, और ring के माध्यम से असेंबली-ऑप्टिमाइज्ड सिफर का उपयोग करके गीगाबाइट-प्रति-सेकंड थ्रूपुट पर फ़ाइलों को एन्क्रिप्ट और डिक्रिप्ट करता है।
⚠️ अस्वीकरण: प्रयोगात्मक सॉफ्टवेयर ⚠️
यह प्रोजेक्ट अत्यंत नया है और वर्तमान में उत्पादन या मिशन-महत्वपूर्ण उपयोग के लिए अनुशंसित नहीं है। हालांकि क्रिप्टोग्राफिक प्राइमिटिव (AES-256-GCM, ChaCha20-Poly1305 via ring) और प्रारूप डिज़ाइन सुदृढ़ हैं, कोडबेस का औपचारिक सुरक्षा ऑडिट या व्यापक वास्तविक दुनिया परीक्षण नहीं हुआ है। अपने जोखिम पर उपयोग करें। संवेदनशील डेटा की सुरक्षा के लिए, इस प्रोजेक्ट के परिपक्व होने तक GnuPG, age, या OpenSSL जैसे युद्ध-परीक्षित टूल का उपयोग करने पर विचार करें।
ring (असेंबली-ऑप्टिमाइज्ड)--memory के माध्यम से कॉन्फ़िगरेबल)ring के माध्यम से seal_in_place_separate_tag / open_in_place हॉट लूप में आवंटन को कम करता हैO_DIRECT I/O को सक्षम करते हैं, NVMe पर DMA-स्पीड रीड/राइट के लिए कर्नेल पेज कैश को बायपास करते हैं। बफर पूल 4096-बाइट संरेखण के साथ std::alloc का उपयोग करते हैंcargo bench (Criterion, 10 नमूने प्रति माप) के साथ बेंचमार्क किया गया। कुंजी व्युत्पत्ति शामिल नहीं है - संख्याएँ केवल शुद्ध क्रिप्टो थ्रूपुट दर्शाती हैं।
हार्डवेयर:
I/O पर नोट: Criterion अस्थायी फ़ाइलें /tmp में लिखता है, जो इस सिस्टम पर tmpfs (RAM-समर्थित) है। O_DIRECT के साथ, कर्नेल tmpfs पर वास्तविक अतुल्यकालिक DMA का उपयोग नहीं कर सकता, इसलिए ये संख्याएँ सिफर थ्रूपुट + io_uring ओवरहेड को DMA बायपास लाभ के बिना दर्शाती हैं। एक वास्तविक Gen4 NVMe ड्राइव पर, O_DIRECT पेज-कैश डबल-बफ़रिंग को समाप्त करता है और DMA को सीधे संरेखित बफर पूल में सक्षम करता है, जिससे काफी अधिक थ्रूपुट मिलना चाहिए।
| फ़ाइल आकार | AES-256-GCM एन्क्रिप्ट | ChaCha20 एन्क्रिप्ट | AES-256-GCM डिक्रिप्ट | ChaCha20 डिक्रिप्ट |
|---|---|---|---|---|
| 64 KiB | 244 MiB/s | 233 MiB/s | 233 MiB/s | 234 MiB/s |
| 1 MiB | 1.08 GiB/s | 882 MiB/s | 1010 MiB/s | 876 MiB/s |
| 16 MiB | 1.10 GiB/s | 923 MiB/s | 1.06 GiB/s | 988 MiB/s |
| 64 MiB | 984 MiB/s | 935 MiB/s | 988 MiB/s | 973 MiB/s |
| 256 MiB | 1.00 GiB/s | 1015 MiB/s | 1.01 GiB/s | 1.02 GiB/s |
चंक आकार स्वीप (AES-256-GCM, 64 MiB फ़ाइल):
| चंक आकार | थ्रूपुट |
|---|---|
| 64 KiB | 1.01 GiB/s |
| 256 KiB | 1.05 GiB/s |
| 1 MiB | 1.07 GiB/s |
| 4 MiB | 988 MiB/s |
| 8 MiB | 988 MiB/s |
| 16 MiB | 1.00 GiB/s |
यह इंजन सिफर संचालन के लिए ring (असेंबली-ऑप्टिमाइज्ड AES-NI / NEON / ARMv8-CE) और I/O के लिए ट्रिपल-बफर्ड io_uring पाइपलाइन का उपयोग करता है। तीन पूर्व-आवंटित बफर पूल पाइपलाइन के माध्यम से घूमते हैं: जबकि पूल A के राइट्स कर्नेल में पूरे हो रहे हैं, पूल B को Rayon द्वारा CPU पर एन्क्रिप्ट किया जा रहा है, और पूल C के रीड्स कर्नेल को सबमिट किए जा रहे हैं। यह I/O विलंबता को क्रिप्टो गणना के साथ ओवरलैप करता है।
क्यों AES-256-GCM छोटी फ़ाइलों पर ChaCha20-Poly1305 से तेज़ है:
ring का AES-GCM बैकएंड x86-64 पर उपलब्ध AES-NI + CLMUL हार्डवेयर निर्देशों का शोषण करता है, जो इसे ChaCha20 (जो एक सॉफ्टवेयर सिफर है) पर हार्डवेयर लाभ देता है। बड़े आकारों पर दोनों सिफर ~1.0 GiB/s पर अभिसरित होते हैं, जो दर्शाता है कि बाधा सिफर थ्रूपुट से I/O सबमिशन ओवरहेड में स्थानांतरित हो जाती है।
क्यों पीक थ्रूपुट 1-16 MiB पर है, 256 MiB पर नहीं: छोटी फ़ाइलों (1-16 MiB) में कुछ चंक होते हैं, इसलिए Rayon समानांतरता कुशल है और कार्यशील सेट कैश में फिट होता है। 64-256 MiB पर, io_uring पाइपलाइन पूरी तरह से सक्रिय है (तीन बैच इन-फ़्लाइट), लेकिन प्रति-SQE सबमिशन और CQE पूर्णता ओवरहेड चंक गणना के साथ स्केल होता है। ट्रिपल-बफर डिज़ाइन सुनिश्चित करता है कि I/O और क्रिप्टो ओवरलैप हों, इस लागत को आंशिक रूप से छिपाते हुए।
क्यों ~1.0 GiB/s, न कि 10+ GiB/s: आधुनिक AES-NI प्रति कोर 2-4 GiB/s धक्का दे सकता है। 12 थ्रेड्स के साथ, कच्चा सिफर थ्रूपुट 10 GiB/s से अधिक हो सकता है। तीन कारक अंतर की व्याख्या करते हैं:
PIPELINE_DEPTH=3 के साथ, किसी भी समय केवल तीन बैच पाइपलाइन के माध्यम से घूमते हैं। स्थिर-अवस्था ओवरलैप के लिए कम से कम तीन बैचों की आवश्यकता होती है; जो फ़ाइलें एक या दो बैचों में फिट होती हैं, उन्हें पाइपलाइनिंग से लाभ नहीं होता है।