डेटा एन्क्रिप्शन के लिए, असोसिएटेड डेटा (AEAD) प्राइमिटिव वाला पुष्टि किया गया एन्क्रिप्शन सबसे सामान्य प्राइमिटिव है. यह ज़्यादातर ज़रूरतों के हिसाब से सही होता है.
AEAD में ये प्रॉपर्टी होती हैं:
- Secrecy: साफ़ टेक्स्ट के बारे में, उसकी लंबाई के अलावा कुछ भी नहीं पता होता.
- प्रामाणिकता: बिना पता लगाए, एन्क्रिप्ट (सुरक्षित) किए गए टेक्स्ट को बदला नहीं जा सकता.
- सिमेट्रिक: सादा टेक्स्ट को एन्क्रिप्ट करने और एन्क्रिप्ट किए गए टेक्स्ट को डिक्रिप्ट करने के लिए, एक ही पासकोड का इस्तेमाल किया जाता है.
- किसी भी क्रम में लगाना: एन्क्रिप्शन को किसी भी क्रम में लगाया जाता है. एक ही प्लैटफ़ॉर्म के दो मैसेज, अलग-अलग सिफरटेक्स्ट देते हैं. हैकर यह नहीं जान सकते कि कौनसा सिफरटेक्स्ट, किसी दिए गए प्लैटेक्स्ट से जुड़ा है. अगर आपको इससे बचना है, तो इसके बजाय Deterministic AEAD का इस्तेमाल करें.
आपके बच्चे का डेटा
AEAD का इस्तेमाल, सिर्फ़ उस डेटा से जुड़े सिफरटेक्स्ट को जोड़ने के लिए किया जा सकता है. मान लें कि आपके पास user-id
और encrypted-medical-history
फ़ील्ड वाला डेटाबेस है. इस स्थिति में, encrypted-medical-history
को एन्क्रिप्ट करते समय, user-id
का इस्तेमाल, उससे जुड़े डेटा के तौर पर किया जा सकता है. इससे, हमलावर किसी उपयोगकर्ता के इलाज का इतिहास, दूसरे उपयोगकर्ता के इलाज के इतिहास में नहीं डाल सकता.
कुंजी का टाइप चुनना
हमारा सुझाव है कि ज़्यादातर कामों के लिए AES128_GCM का इस्तेमाल करें. हालांकि, अलग-अलग ज़रूरतों के लिए अलग-अलग तरह की कुंजियां होती हैं. 256-बिट की सुरक्षा के लिए, नीचे AES128 को AES256 से बदलें. आम तौर पर ये उपाय अपनाएं:
- 16-बाइट के शुरुआती वेक्टर (IV) वाला AES128_CTR_HMAC_SHA256, सबसे सुरक्षित मोड है.
- AES128_EAX, AES128_CTR_HMAC_SHA256 की तुलना में थोड़ा कम कंज़र्वेटिव और थोड़ा तेज़ है.
- AES128_GCM आम तौर पर सबसे तेज़ मोड होता है. इसमें मैसेज की संख्या और मैसेज के साइज़ पर सख्त पाबंदियां होती हैं. जब सादा टेक्स्ट और उससे जुड़े डेटा की लंबाई (नीचे दी गई) की इन सीमाओं को पार किया जाता है, तो AES128_GCM काम नहीं करता और पासकोड का डेटा लीक हो जाता है.
- AES128_GCM_SIV की रफ़्तार, AES128_GCM की रफ़्तार के बराबर ही होती है. मैसेज की संख्या और साइज़ के लिए, इस एन्क्रिप्शन प्रोटोकॉल की सीमाएं AES128_GCM जैसी ही हैं. हालांकि, इन सीमाओं से ज़्यादा मैसेज भेजने पर, यह एन्क्रिप्शन प्रोटोकॉल उतना खतरनाक नहीं होता जितना AES128_GCM. इस प्रोटोकॉल से सिर्फ़ यह जानकारी लीक हो सकती है कि दो मैसेज एक जैसे हैं. इसलिए, इसका इस्तेमाल AES128_GCM के मुकाबले ज़्यादा सुरक्षित होता है. हालांकि, इसका इस्तेमाल कम किया जाता है. Java में इसका इस्तेमाल करने के लिए, आपको Conscrypt इंस्टॉल करना होगा.
- XChaCha20Poly1305 में, AES128_GCM की तुलना में मैसेज की संख्या और मैसेज के साइज़ की सीमा काफ़ी ज़्यादा है. हालांकि, अगर यह काम नहीं करता है (इसकी संभावना बहुत कम है), तो यह कुंजी का कॉन्टेंट भी लीक करता है. इसमें हार्डवेयर से तेज़ी नहीं लाई जाती. इसलिए, हार्डवेयर से तेज़ी लाने की सुविधा उपलब्ध होने पर, यह एईएस मोड से धीमा हो सकता है.
सुरक्षा से जुड़ी गारंटी
AEAD लागू करने से ये फ़ायदे मिलते हैं:
- CCA2 सुरक्षा.
- पुष्टि करने के लिए, कम से कम 80-बिट की सुरक्षा होनी चाहिए.
- कम से कम 232 मैसेज को एन्क्रिप्ट (सुरक्षित) करने की सुविधा, जिनमें कुल 250 बाइट हों. चुने गए 232 प्लैनटेक्स्ट या चुने गए 2-32 सिफरटेक्स्ट के साथ, किसी भी हमले के सफल होने की संभावना 2-32 से ज़्यादा नहीं होती.
इस्तेमाल के उदाहरण
देखें, मुझे डेटा एन्क्रिप्ट करना है और मुझे सिर्फ़ उस डेटा को एन्क्रिप्ट करना है जो मेरे काम का है.