स्ट्रीमिंग AEAD प्रिमिटिव स्ट्रीमिंग डेटा के लिए प्रमाणित एन्क्रिप्शन उपलब्ध कराता है. यह तब काम आता है, जब एन्क्रिप्ट किया जाने वाला डेटा एक चरण में प्रोसेस करने के लिए बहुत बड़ा हो. आम तौर पर, बड़ी फ़ाइलों या लाइव डेटा स्ट्रीम को एन्क्रिप्ट करने के लिए, इस सुविधा का इस्तेमाल किया जाता है.
एन्क्रिप्ट (सुरक्षित) करने का काम ऐसे सेगमेंट में किया जाता है जो उनकी जगह की जानकारी में एन्क्रिप्ट किए गए टेक्स्ट से जुड़े होते हैं. इन्हें हटाया या फिर से क्रम में नहीं लगाया जा सकता. एक सिफरटेक्स्ट के सेगमेंट को किसी दूसरे सिफरटेक्स्ट में डाला नहीं जा सकता. किसी मौजूदा सिफरटेक्स्ट में बदलाव करने के लिए, पूरी डेटा स्ट्रीम को फिर से एन्क्रिप्ट करना होगा.1
डिक्रिप्ट करने की प्रोसेस तेज़ी से होती है, क्योंकि एक बार में सिर्फ़ सिफरटेक्स्ट का एक हिस्सा डिक्रिप्ट और पुष्टि की जाती है. पूरे सिफरटेक्स्ट को प्रोसेस किए बिना, कुछ हिस्से का सादा टेक्स्ट पाया जा सकता है.
स्ट्रीमिंग AEAD लागू करने से, AEAD की परिभाषा पूरी होती है और nOAE से सुरक्षित रहते हैं. इनमें ये प्रॉपर्टी होती हैं:
- Secrecy: सामान्य टेक्स्ट, इसकी लंबाई के अलावा, और कुछ नहीं जानता.
- प्रामाणिकता: साइफ़रटेक्स्ट में मौजूद एन्क्रिप्ट (सुरक्षित) किए गए सादे टेक्स्ट का पता लगाए बिना उसे बदला नहीं जा सकता.
- सिमेट्रिक: सादा टेक्स्ट को एन्क्रिप्ट करने और एन्क्रिप्ट किए गए टेक्स्ट को डिक्रिप्ट करने के लिए, एक ही पासकोड का इस्तेमाल किया जाता है.
- किसी भी क्रम में लगाना: एन्क्रिप्शन को किसी भी क्रम में लगाया जाता है. एक ही प्लैटेक्स्ट वाले दो मैसेज से अलग-अलग सिफरटेक्स्ट मिलते हैं. हैकर यह नहीं जान सकते कि कौनसा सिफरटेक्स्ट, किसी दिए गए प्लैटेक्स्ट से जुड़ा है.
आपके बच्चे का डेटा
स्ट्रीमिंग AEAD का इस्तेमाल, सिर्फ़ उस डेटा से जुड़े सिफरटेक्स्ट को जोड़ने के लिए किया जा सकता है. मान लें कि आपके पास user-id
और encrypted-medical-history
फ़ील्ड वाला डेटाबेस है. ऐसे मामले में, encrypted-medical-history
को एन्क्रिप्ट करते समय, user-id
का इस्तेमाल डेटा से जुड़े डेटा के तौर पर किया जा सकता है. इससे, हमलावर किसी उपयोगकर्ता के इलाज का इतिहास, दूसरे उपयोगकर्ता के इलाज के इतिहास में नहीं डाल सकता.
कुंजी का टाइप चुनना
हमारा सुझाव है कि ज़्यादातर कामों के लिए, AES128_GCM_HKDF_1MB का इस्तेमाल करें. आम तौर पर ये उपाय अपनाएं:
- AES128_GCM_HKDF_1MB (या AES256_GCM_HKDF_1MB) तेज़ विकल्प है. यह 264 फ़ाइलों को एन्क्रिप्ट कर सकता है. हर फ़ाइल में ज़्यादा से ज़्यादा 264 बाइट हो सकते हैं. एन्क्रिप्शन और डीक्रिप्शन की प्रोसेस के दौरान, ~1 एमबी का इस्तेमाल होता है.
- AES128_GCM_HKDF_4KB, ~4 केबी मेमोरी इस्तेमाल करता है. अगर आपके सिस्टम में ज़्यादा मेमोरी नहीं है, तो यह अच्छा विकल्प है.
- AES128_CTR_HMAC_SHA256_1MB (या AES256_CTR_HMAC_SHA256_1MB) से ज़्यादा बेहतर विकल्प है.
सुरक्षा से जुड़ी गारंटी
स्ट्रीमिंग AEAD लागू करने से ये फ़ायदे मिलते हैं:
- CCA2 सुरक्षा.
- पुष्टि करने के लिए, कम से कम 80-बिट का पासवर्ड इस्तेमाल करना ज़रूरी है.
- कम से कम 264 मैसेज3 को एन्क्रिप्ट करने की सुविधा, जिनमें कुल 251 बाइट2 हों. चुने गए 232 प्लेनटेक्स्ट या चुने गए 2-32 सिफरटेक्स्ट के साथ, किसी भी हमले के सफल होने की संभावना 2-32 से ज़्यादा नहीं होती.
इस्तेमाल के उदाहरण
मुझे बड़ी फ़ाइलों या डेटा स्ट्रीम को एन्क्रिप्ट करना है लेख पढ़ें.
-
इस पाबंदी की वजह यह है कि एईएस-जीसीएम साइफ़र का इस्तेमाल किया गया है. एक ही जगह पर किसी दूसरे प्लैटेक्स्ट सेगमेंट को एन्क्रिप्ट करना, आईवी का फिर से इस्तेमाल करने के बराबर होगा. इससे AES-GCM की सुरक्षा की गारंटी का उल्लंघन होता है. एक और वजह यह है कि इससे रोल-बैक अटैक को रोका जा सकता है. इस तरह के अटैक में, हमलावर फ़ाइल के पिछले वर्शन को बिना किसी जानकारी के वापस लाने की कोशिश कर सकता है. ↩
-
इसमें 232 सेगमेंट इस्तेमाल किए जा सकते हैं. हर सेगमेंट में
segment_size - tag_size
बाइट का सादा टेक्स्ट होता है. एक एमबी के सेगमेंट के लिए, सादा टेक्स्ट का कुल साइज़ 232 * (220-16) ~= 251 बाइट होता है. ↩ -
डेटा को स्ट्रीम करते समय एईएडी (एन्क्रिप्ट, एन्क्रिप्टेड डेटा को डिक्रिप्ट करने के लिए कुंजी, और डिक्रिप्ट किया गया डेटा) का इस्तेमाल तब असुरक्षित हो जाता है, जब डेरिव्ड की (128-बिट) और नॉन्स प्रीफ़िक्स (7-बाइट की स्वतंत्र रैंडम वैल्यू) का कॉम्बिनेशन दोहराया जाता है. हमारे पास 184-बिट टक्कर लगने से बचने की क्षमता है. अगर हमें सफलता की संभावना 2-32 से कम रखनी है, तो करीब 264 मैसेज का मतलब है. ↩