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

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

AEAD की ये प्रॉपर्टी हैं:

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

एसोसिएटेड डेटा

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

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

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

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

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

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

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

  • AES-CTR-HMAC (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) आम तौर पर सबसे तेज़ मोड होता है. इसमें मैसेज की संख्या (232) और मैसेज के साइज़ (~64 जीबी प्रति मैसेज) पर सबसे ज़्यादा पाबंदियां होती हैं. जब ये सीमाएं पार हो जाती हैं, तो एईएस-जीसीएम पूरी तरह से काम करना बंद कर देता है. ऐसा इसलिए होता है, क्योंकि यह सादा टेक्स्ट और एईएस-जीसीएम की इंटरनल कुंजी के पुष्टि वाले हिस्से को लीक कर देता है.
    • AES-GCM, मज़बूत [ABN] नहीं है. साथ ही, [GLR] के लिए, कुंजी को कमिट नहीं किया जा सकता. ऐसा सिफ़रटेक्स्ट जनरेट किया जा सकता है जिसे दो अलग-अलग कुंजियों से डिक्रिप्ट (सुरक्षित) किया जा सकता है. इससे, व्यावहारिक हमले [DGRW] हो सकते हैं. अगर कुंजी को हमलावर चुनता है, तो अपने थ्रेट मॉडल की समीक्षा ध्यान से करें. अगर यह बात आप पर लागू होती है, तो
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV), AES-GCM की तरह ही तेज़ है. इसकी सीमाएं, AES-GCM की तरह ही होती हैं. जैसे, मैसेज की संख्या और मैसेज का साइज़. हालांकि, जब ये सीमाएं पार हो जाती हैं, तो यह कम खतरनाक तरीके से काम करना बंद कर देता है. ऐसा हो सकता है कि यह सिर्फ़ यह जानकारी लीक करे कि दो मैसेज एक जैसे हैं. इस वजह से, इसका इस्तेमाल AES-GCM की तुलना में ज़्यादा सुरक्षित है. हालांकि, असल में इसका इस्तेमाल कम किया जाता है. Java में इसका इस्तेमाल करने के लिए, आपको Conscrypt इंस्टॉल करना होगा.
    • ADGKLS के लिए, कुंजी को कमिट नहीं किया जा सकता.
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305) में, AES-GCM की तुलना में मैसेज की संख्या और मैसेज के साइज़ की सीमाएं बहुत ज़्यादा होती हैं. हालांकि, जब यह काम करना बंद कर देता है (ऐसा होने की संभावना बहुत कम होती है), तो यह कुंजी से जुड़ा डेटा भी लीक कर देता है. यह हार्डवेयर से तेज़ी लाने की सुविधा के साथ काम नहीं करता. इसलिए, जिन स्थितियों में हार्डवेयर से तेज़ी लाने की सुविधा उपलब्ध होती है उनमें यह AES मोड की तुलना में धीमा हो सकता है.
    • LGR के लिए, कुंजी को कमिट नहीं किया जा सकता.

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

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

AEAD के साथ काम करने वाले टूल और फ़ॉर्मैट से ये सुविधाएं मिलती हैं:

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

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

डेटा को एन्क्रिप्ट (सुरक्षित) करना और सिफ़रटेक्स्ट को उसके कॉन्टेक्स्ट से बाइंड करना लेख पढ़ें.