असोसिएट किए गए डेटा के साथ पुष्टि किए गए एन्क्रिप्शन को स्ट्रीम करना (स्ट्रीमिंग AEAD)

स्ट्रीमिंग AEAD प्रिमिटिव, स्ट्रीमिंग डेटा के लिए प्रमाणित एन्क्रिप्शन उपलब्ध कराता है. यह तब काम आता है, जब एन्क्रिप्ट किया जाने वाला डेटा इतना बड़ा हो कि उसे एक चरण में प्रोसेस नहीं किया जा सके. इसके सामान्य इस्तेमाल के उदाहरणों में, बड़ी फ़ाइलों या लाइव डेटा स्ट्रीम को एन्क्रिप्ट (सुरक्षित) करना शामिल है.

एन्क्रिप्ट (सुरक्षित) करने का काम ऐसे सेगमेंट में किया जाता है जो किसी साइफ़र टेक्स्ट में अपनी जगह से जुड़े होते हैं. साथ ही, उन्हें हटाया या उनका क्रम नहीं बदला जा सकता. एक सादे टेक्स्ट के सेगमेंट को दूसरे सादे टेक्स्ट में नहीं डाला जा सकता. किसी मौजूदा साइफ़रटेक्स्ट में बदलाव करने के लिए, पूरी डेटा स्ट्रीम को फिर से एन्क्रिप्ट (सुरक्षित) किया जाना चाहिए.1

डिक्रिप्ट करना तेज़ है, क्योंकि एक बार में सादे टेक्स्ट का सिर्फ़ एक हिस्सा ही डिक्रिप्ट और पुष्टि किया जाता है. पूरे सादे टेक्स्ट को प्रोसेस किए बिना ही पार्शियल टेक्स्ट को ऐक्सेस किया जा सकता है.

स्ट्रीमिंग AEAD, AEAD परिभाषा को पूरा करता है और OAE2-सुरक्षित होता है. उनमें ये प्रॉपर्टी होती हैं:

  • सीक्रेसी: सादे टेक्स्ट के बारे में सिर्फ़ उसकी लंबाई के बारे में कुछ जानकारी मौजूद नहीं है.
  • Authenticity: एन्क्रिप्ट (सुरक्षित) किए गए सादे टेक्स्ट को, एन्क्रिप्ट किए गए सादे टेक्स्ट में बदलना मुमकिन नहीं है.
  • सिमेट्रिक: सादे टेक्स्ट को एन्क्रिप्ट (सुरक्षित) और साइफ़रटेक्स्ट को डिक्रिप्ट करने के लिए, एक ही पासकोड का इस्तेमाल किया जाता है.
  • किसी भी क्रम में लगाने की सुविधा: एन्क्रिप्ट (सुरक्षित) करने का तरीका किसी भी क्रम में लगाया जाता है. एक ही सादे टेक्स्ट वाले दो मैसेज से अलग-अलग सादे टेक्स्ट मिलते हैं. हमलावर यह नहीं जान सकते कि किसी दिए गए सादे टेक्स्ट से साइफ़रटेक्स्ट किस तरह का है.

आपके बच्चे का डेटा

स्ट्रीमिंग 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 MB मेमोरी का उपयोग किया जाता है.
  • AES128_GCM_HKDF_4केबी, ~4 केबी मेमोरी का इस्तेमाल करता है. अगर आपके सिस्टम में ज़्यादा मेमोरी नहीं है, तो यह बढ़िया विकल्प है.
  • AES128_CTR_HMAC_SHA256_1MB (या AES256_CTR_HMAC_SHA256_1MB) ज़्यादा पारंपरिक विकल्प होता है.

सुरक्षा की गारंटी

स्ट्रीमिंग AEAD लागू करने की सुविधा:

  • CCA2 सुरक्षा.
  • पुष्टि करने की कम से कम 80-बिट क्षमता.
  • कुल 251 बाइट2 वाले कम से कम 264 मैसेज3 को एन्क्रिप्ट (सुरक्षित) किया जा सकता है . ज़्यादा से ज़्यादा 232 चुने गए सादे टेक्स्ट या चुने गए सादे टेक्स्ट के साथ कोई भी हमला नहीं होने की संभावना 2-32 से ज़्यादा होती है.

इस्तेमाल का उदाहरण

मुझे बड़ी फ़ाइलों या डेटा स्ट्रीम को एन्क्रिप्ट (सुरक्षित) करना है वाला लेख देखें.


  1. इस पाबंदी की वजह AES-GCM साइफ़र का इस्तेमाल करना. एक ही जगह पर किसी अलग सादे टेक्स्ट वाले सेगमेंट को एन्क्रिप्ट (सुरक्षित) करना, IV को फिर से इस्तेमाल करने के बराबर होगा. इससे AES-GCM की सुरक्षा की गारंटी का उल्लंघन होता है. दूसरी वजह यह है कि इससे रोल-बैक हमलों से बचा जा सकता है. इनमें हमलावर, पहचान किए बिना फ़ाइल के पिछले वर्शन को वापस लाने की कोशिश कर सकता है.

  2. 232 सेगमेंट इस्तेमाल किए जा सकते हैं. हर सेगमेंट में segment_size - tag_size बाइट का सादा टेक्स्ट है. एक एमबी के सेगमेंट के लिए, सादे टेक्स्ट का कुल साइज़ 232 * (220-16) ~= 251 बाइट होता है.

  3. डिराइव्ड कुंजी (128-बिट) और नॉन्स प्रीफ़िक्स (इंडिपेंडेंट रैंडम 7-बाइट वैल्यू) के कॉम्बिनेशन को दोबारा इस्तेमाल करने पर, स्ट्रीमिंग AEAD असुरक्षित हो जाता है. हमारे पास कोलीशन रेज़िस्टेंस 184-बिट है, जिसका मतलब है 264 मैसेज. अगर हमें लगता है कि सफलता की संभावना 2-32 से कम होनी चाहिए.