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

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

AEAD में ये प्रॉपर्टी होती हैं:

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

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

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

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

कुंजी का टाइप चुनें

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

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

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

कुंजी के इन टाइप का इस्तेमाल किया जा सकता है:

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

AEAD सिफ़रटेक्स्ट के वायर फ़ॉर्मैट के बारे में ज़्यादा जानें.

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

AEAD लागू करने पर ये सुविधाएं मिलती हैं:

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

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

मुझे डेटा एन्क्रिप्ट (सुरक्षित) करना है और मुझे साइफ़रटेक्स्ट को उसके कॉन्टेक्स्ट से बाइंड करना है.