डेटा एन्क्रिप्शन के लिए, पुष्टि किए गए डेटा के साथ एन्क्रिप्शन (एईएडी) प्रिमिटिव का इस्तेमाल सबसे ज़्यादा किया जाता है. यह ज़्यादातर ज़रूरतों के लिए सही है.
एईएडी में ये प्रॉपर्टी होती हैं:
- Secrecy: प्लेनटेक्स्ट की लंबाई के अलावा, उसके बारे में कुछ भी पता नहीं होता.
- भरोसेमंद: एन्क्रिप्ट किए गए सादे टेक्स्ट को बिना पता चले बदलना नामुमकिन है.
- सिमेट्रिक: सादे टेक्स्ट को एन्क्रिप्ट करने और एन्क्रिप्ट किए गए टेक्स्ट को डिक्रिप्ट करने के लिए, एक ही पासकोड का इस्तेमाल किया जाता है.
- रैंडमाइज़ेशन: एन्क्रिप्ट करने की प्रोसेस रैंडम होती है. एक ही सादे टेक्स्ट वाले दो मैसेज, अलग-अलग एन्क्रिप्ट किए गए टेक्स्ट जनरेट करते हैं. हमलावरों को यह पता नहीं चल पाता कि कौनसा साइफ़रटेक्स्ट, दिए गए प्लेनटेक्स्ट से मेल खाता है. अगर आपको इससे बचना है, तो इसके बजाय डिटरमिनिस्टिक एईएडी का इस्तेमाल करें.
आपके बच्चे का डेटा
AEAD का इस्तेमाल, सादे टेक्स्ट को एन्क्रिप्ट करने के लिए, उससे जुड़े खास डेटा को जोड़ने के लिए किया जा सकता है. मान लें कि आपके पास एक डेटाबेस है, जिसमें user-id और encrypted-medical-history फ़ील्ड हैं. इस स्थिति में, user-id को encrypted-medical-history को एन्क्रिप्ट (सुरक्षित) करते समय,
उससे जुड़ा डेटा के तौर पर इस्तेमाल किया जा सकता है. इससे हमलावर को किसी उपयोगकर्ता की मेडिकल हिस्ट्री को दूसरे उपयोगकर्ता के खाते में ट्रांसफ़र करने से रोका जा सकता है.
इससे जुड़ा डेटा देना ज़रूरी नहीं है. अगर ऐसा तय किया गया है, तो डिक्रिप्ट करने की प्रोसेस सिर्फ़ तब पूरी होगी, जब एन्क्रिप्ट और डिक्रिप्ट, दोनों कॉल में एक जैसा डेटा पास किया गया हो.
कुंजी का टाइप चुनें
हम ज़्यादातर मामलों में AES128_GCM का इस्तेमाल करने का सुझाव देते हैं. हालांकि, अलग-अलग ज़रूरतों के लिए कई तरह की कुंजियां उपलब्ध हैं. AES128, 128-बिट की सुरक्षा देता है और AES256, 256-बिट की सुरक्षा देता है.
मोड चुनते समय, सुरक्षा से जुड़ी दो अहम पाबंदियां होती हैं:
- क्यूपीएस: एक ही कुंजी से कितने मैसेज एन्क्रिप्ट किए गए हैं?
- मैसेज का साइज़: मैसेज कितने बड़े हैं?
इस्तेमाल किए जा सकने वाले की टाइप:
- 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 की इंटरनल की के पुष्टि वाले हिस्से को लीक कर देता है.
- 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 की तुलना में मैसेज की संख्या और साइज़ की सीमा ज़्यादा होती है. हालांकि, इसके फ़ेल होने पर (ऐसा होने की संभावना बहुत कम है), कुंजी का डेटा भी लीक हो जाता है. इसे हार्डवेयर से तेज़ी से नहीं किया जाता. इसलिए, उन स्थितियों में यह AES मोड से ज़्यादा समय ले सकता है जहां हार्डवेयर से तेज़ी लाने की सुविधा उपलब्ध है.
- यह कुंजी-कमिट करने वाला LGR नहीं है.
एईएडी के सादे टेक्स्ट को एन्क्रिप्ट करने के वायर फ़ॉर्मैट के बारे में ज़्यादा जानें.
सुरक्षा की गारंटी
AEAD लागू करने से ये फ़ायदे मिलते हैं:
- CCA2 सुरक्षा.
- पुष्टि करने का तरीका कम से कम 80-बिट का होना चाहिए.
- कम से कम 232 मैसेज को एन्क्रिप्ट (सुरक्षित) करने की क्षमता, जिसमें कुल 250 बाइट शामिल हैं. चुने गए 232 सामान्य टेक्स्ट या चुने गए सिफ़र टेक्स्ट में से किसी भी टेक्स्ट पर किए गए हमले के सफल होने की संभावना 2-32 से ज़्यादा नहीं है.
इस्तेमाल के उदाहरण
मुझे डेटा एन्क्रिप्ट (सुरक्षित) करना है और मुझे साइफ़रटेक्स्ट को उसके कॉन्टेक्स्ट से बाइंड करना है.