जुड़े हुए डेटा के साथ पुष्टि किया गया एन्क्रिप्ट (सुरक्षित) किया गया डेटा (एडीएडी)

डेटा एन्क्रिप्शन के लिए, Authenticated Encryption with Associated Data (AEAD) प्रिमिटिव का इस्तेमाल सबसे ज़्यादा किया जाता है. यह ज़्यादातर ज़रूरतों के लिए सही है.

एईएडी में ये प्रॉपर्टी होती हैं:

  • Secrecy: प्लेनटेक्स्ट की लंबाई के अलावा, उसके बारे में कुछ भी पता नहीं होता.
  • भरोसेमंद: एन्क्रिप्ट किए गए सादे टेक्स्ट को बिना पता चले बदलना नामुमकिन है.
  • सिमेट्रिक: सादे टेक्स्ट को एन्क्रिप्ट करने और एन्क्रिप्ट किए गए टेक्स्ट को डिक्रिप्ट करने के लिए, एक ही पासकोड का इस्तेमाल किया जाता है.
  • रैंडमाइज़ेशन: एन्क्रिप्ट करने की प्रोसेस रैंडम होती है. एक ही सादे टेक्स्ट वाले दो मैसेज, अलग-अलग एन्क्रिप्ट किए गए टेक्स्ट जनरेट करते हैं. हमलावर यह नहीं जान सकते कि कौनसे सादे टेक्स्ट को एन्क्रिप्ट करने पर कौनसा टेक्स्ट मिलेगा. अगर आपको इससे बचना है, तो इसके बजाय डिटरमिनिस्टिक एईएडी का इस्तेमाल करें.

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

AEAD का इस्तेमाल, सादे टेक्स्ट को एन्क्रिप्ट करने के लिए, उससे जुड़े खास डेटा के साथ किया जा सकता है. मान लें कि आपके पास एक डेटाबेस है, जिसमें user-id और encrypted-medical-history फ़ील्ड हैं. इस मामले में, encrypted-medical-history को एन्क्रिप्ट (सुरक्षित) करते समय, user-id को असोसिएटेड डेटा के तौर पर इस्तेमाल किया जा सकता है. इससे, हमलावर को किसी उपयोगकर्ता की मेडिकल हिस्ट्री को दूसरे उपयोगकर्ता के खाते में ट्रांसफ़र करने से रोका जा सकता है.

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

डिजिटल बटन का टाइप चुनें

हम ज़्यादातर मामलों में AES128_GCM का इस्तेमाल करने का सुझाव देते हैं. हालांकि, अलग-अलग ज़रूरतों के लिए कई तरह की कुंजियां उपलब्ध हैं. AES128, 128-बिट की सुरक्षा देता है और AES256, 256-बिट की सुरक्षा देता है.

मोड चुनते समय, सुरक्षा से जुड़ी दो अहम पाबंदियां होती हैं:

  1. क्यूपीएस: एक ही कुंजी से कितने मैसेज एन्क्रिप्ट किए गए हैं?
  2. मैसेज का साइज़: मैसेज कितने बड़े हैं?

इस्तेमाल किए जा सकने वाले की टाइप:

  • 16-बाइट के इनिशलाइज़ेशन वेक्टर (आईवी) के साथ AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256), अच्छी सीमाओं वाला सबसे सुरक्षित मोड है.
    • की-कमिटिंग.
  • AES-EAX (AES128_EAX, AES256_EAX), AES128_CTR_HMAC_SHA256 की तुलना में थोड़ा कम सुरक्षित और थोड़ा तेज़ है.
  • AES-GCM (AES128_GCM, AES256_GCM) आम तौर पर सबसे तेज़ मोड होता है. इसमें मैसेज की संख्या (232) और मैसेज के साइज़ (हर मैसेज के लिए ~64 जीबी) पर सख्त सीमाएं होती हैं. इन सीमाओं को पार करने पर, AES-GCM पूरी तरह से काम करना बंद कर देता है. इससे प्लेन टेक्स्ट और AES-GCM की इंटरनल कुंजी के पुष्टि वाले हिस्से को लीक होने से नहीं रोका जा सकता.
    • एईएस-जीसीएम न तो मज़बूत [ABN] है और न ही की-कमिटिंग [GLR]. ऐसा साइफ़रटेक्स्ट जनरेट किया जा सकता है जिसे दो अलग-अलग कुंजियों से डिक्रिप्ट किया जा सकता है. इसकी वजह से, प्रैक्टिकल अटैक हो सकते हैं [DGRW]. अगर कुंजी को हमलावर ने चुना है, तो अपने थ्रेट मॉडल की ध्यान से समीक्षा करें.
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) [RFC8452] में, गलती से नॉन्स का दुरुपयोग होने से रोकने की सुविधा होती है. साथ ही, यह AES-GCM की तरह ही बेहतर परफ़ॉर्म करता है. रैंडम IVs वाले AES-GCM-SIV के लिए, मैसेज की संख्या और मैसेज के साइज़ की सीमाएं, AES-GCM की सीमाओं से काफ़ी ज़्यादा हैं. इन सीमाओं को पार करने पर, AES-GCM-SIV कम नुकसान पहुंचाता है: यह सिर्फ़ यह लीक करता है कि दो मैसेज एक जैसे हैं. AES-GCM-SIV का इस्तेमाल करना ज़्यादा सुरक्षित है. हालांकि, इसका इस्तेमाल कम किया जाता है.
    • रैंडम नॉन्स के लिए सीमाएं:
      • 232 मैसेज, जहां हर प्लेनटेक्स्ट ज़्यादा से ज़्यादा 8 जीबी का हो
      • 248 मैसेज, जहां हर प्लेनटेक्स्ट ज़्यादा से ज़्यादा 32 MiB का हो
      • 64 मैसेज, जहां हर प्लेनटेक्स्ट ज़्यादा से ज़्यादा 128 केआईबी का हो
    • Java में इस्तेमाल करने के लिए, Conscrypt इंस्टॉल करें.
    • यह ADGKLS के लिए, की-कमिटिंग नहीं है.
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305) में, AES-GCM की तुलना में मैसेज की संख्या और साइज़ की सीमा ज़्यादा होती है. हालांकि, इसके फ़ेल होने पर (ऐसा होने की संभावना बहुत कम है), कुंजी का डेटा भी लीक हो जाता है. यह हार्डवेयर से तेज़ी लाने की सुविधा का इस्तेमाल नहीं करता है. इसलिए, जिन मामलों में हार्डवेयर से तेज़ी लाने की सुविधा उपलब्ध होती है उनमें यह एईएस मोड से धीमा हो सकता है.
    • यह LGR, की-कमिटिंग नहीं है.

एईएडी के सादे टेक्स्ट को एन्क्रिप्ट करने के वायर फ़ॉर्मैट के बारे में ज़्यादा जानें.

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

AEAD को लागू करने से ये फ़ायदे मिलते हैं:

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

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

मान लें कि मुझे डेटा एन्क्रिप्ट करना है और सादे टेक्स्ट को एन्क्रिप्ट करके, उसे उसके कॉन्टेक्स्ट से बाइंड करना है.