Drive API की मदद से, क्लाइंट-साइड एन्क्रिप्शन वाली फ़ाइलें मैनेज करना

क्लाइंट-साइड एन्क्रिप्शन (सीएसई) यह पक्का करता है कि आपका डेटा, Drive के सर्वर तक पहुंचने से पहले ही एन्क्रिप्ट (सुरक्षित) हो जाए. इससे आपको अपने डेटा पर कंट्रोल मिलता है. इस गाइड में, Drive API का इस्तेमाल करके, सीएसई फ़ाइलों को प्रोग्राम के हिसाब से एन्क्रिप्ट (सुरक्षित) और अपलोड करने के साथ-साथ डाउनलोड और डिक्रिप्ट (सुरक्षित नहीं) करने की प्रोसेस के बारे में बताया गया है. इसमें, लागू करने के तरीके की जांच करने और उसे मान्य करने के लिए सुझाए गए तरीके भी शामिल हैं.

शुरू करने से पहले

एन्क्रिप्ट (सुरक्षित) की गई फ़ाइलों को मैनेज करने से पहले, Google Workspace डोमेन सेट अप करें. इसके लिए, यहां दी गई चेकलिस्ट का इस्तेमाल करें:

पुष्टि करना और अनुमति देना

Drive API और KACLS के साथ इंटरैक्ट करने के लिए, आपको पुष्टि करने का कोई तरीका चुनना होगा. इस विकल्प से, इन दोनों सेवाओं के साथ आपके इंटरैक्शन पर असर पड़ता है:

  • व्यक्ति: किसी व्यक्ति के तौर पर पुष्टि करने के लिए, OAuth फ़्लो का इस्तेमाल करें, ताकि उस व्यक्ति की ओर से कार्रवाई की जा सके. स्टैंडर्ड /wrap और /unwrap एंडपॉइंट का इस्तेमाल करें. साथ ही, उस उपयोगकर्ता के लिए Google ऑथराइज़ेशन टोकन दें.
  • एडमिन: डोमेन में मौजूद अन्य उपयोगकर्ताओं के तौर पर काम करने के लिए, डोमेन-वाइड डेलिगेशन (डीडब्ल्यूडी) वाले सेवा खाते का इस्तेमाल करें. Google के अनुमति वाले टोकन के बिना, /privilegedwrap और /privilegedunwrap एंडपॉइंट का इस्तेमाल करें.

क्रेडेंशियल बनाने के बारे में ज़्यादा जानकारी के लिए, ऐक्सेस क्रेडेंशियल बनाना गाइड देखें.

डोमेन के IdP की पुष्टि करने की सुविधा

अपने आईडीपी से पुष्टि करने के लिए, आपको OAuth क्लाइंट आईडी कॉन्फ़िगर करना होगा. साथ ही, इसकी क्लाइंट सीक्रेट फ़ाइल डाउनलोड करनी होगी. आपके ऐप्लिकेशन को अपने आईडीपी से पुष्टि करने वाला टोकन पाना होगा, ताकि वह आपके KACLS से किए गए अनुरोधों की पुष्टि कर सके. इस टोकन की ज़रूरत इसलिए होती है, ताकि आपका ऐप्लिकेशन डेटा एन्क्रिप्शन कुंजी को ऐक्सेस कर सके.

क्रेडेंशियल को सुरक्षित तरीके से मैनेज करना

आपका ऐप्लिकेशन, Drive API और आईडीपी (IdP) से पुष्टि करने के लिए संवेदनशील क्रेडेंशियल मैनेज करता है. इनमें शामिल हैं:

  • आईडीपी से मिला गोपनीय डेटा, जैसे कि क्लाइंट-सीक्रेट-फ़ाइल
  • Google का गोपनीय डेटा, जैसे कि सेवा खाते की निजी कुंजी वाली फ़ाइल
  • ऐप्लिकेशन में सेव किया गया सीक्रेट मटीरियल, जैसे कि सेव किए गए क्रेडेंशियल

आपको यह पक्का करना होगा कि इन सभी क्रेडेंशियल को सुरक्षित तरीके से सेव किया गया हो.

सीमाएं और कोटा

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

एन्क्रिप्ट (सुरक्षित) की गई फ़ाइल का स्ट्रक्चर

Drive में अपलोड और डाउनलोड करने के लिए, क्लाइंट-साइड एन्क्रिप्शन वाली फ़ाइल का यह फ़ॉर्मैट होना चाहिए.

+-------------------+
| Magic header      |
+-------------------+
| Encrypted Chunk 1 |
+-------------------+
| Encrypted Chunk 2 |
+-------------------+
| ...               |
+-------------------+
| Encrypted Chunk N |
+-------------------+

मैजिक हेडर

मैजिक हेडर को फ़ाइल सिग्नेचर या मैजिक नंबर भी कहा जाता है. यह एक कॉन्स्टेंट बाइट सीक्वेंस होता है. इसे फ़ाइल की शुरुआत में रखा जाता है, ताकि फ़ाइल के फ़ॉर्मैट की पहचान की जा सके. फ़ाइल की शुरुआत 0x99 0x5E 0xCC 0x5E बाइट से होनी चाहिए.

एन्क्रिप्ट (सुरक्षित) किए गए चंक

फ़ाइल को 2MiB के हिस्सों में बांटा जाना चाहिए. हर चंक को Google Tink लाइब्रेरी के, एईएस-जीसीएम कुंजी टाइप के साथ, 'एसोसिएटेड डेटा के साथ पुष्टि किया गया एन्क्रिप्शन (एईएडी)' प्रिमिटिव का इस्तेमाल करके एन्क्रिप्ट किया जाता है. इसमें चंक इंडेक्स और फ़ाइनल चंक फ़्लैग को एसोसिएटेड डेटा के तौर पर इस्तेमाल किया जाता है. Drive API का इस्तेमाल करने वाले और इस स्पेसिफ़िकेशन के मुताबिक कोड के उदाहरण के लिए, ओपन सोर्स डेमो देखें.

फ़ाइल को एन्क्रिप्ट (सुरक्षित) करके अपलोड करना

सीएसई फ़ाइल अपलोड करने के लिए, आपके ऐप्लिकेशन को पुष्टि करनी होगी. साथ ही, सीएसई टोकन का अनुरोध करना होगा. इसके अलावा, फ़ाइल के कॉन्टेंट को स्थानीय तौर पर एन्क्रिप्ट (सुरक्षित) करना होगा, एन्क्रिप्शन कुंजी को रैप करना होगा, और आखिर में एन्क्रिप्ट किए गए कॉन्टेंट और मेटाडेटा को Google Drive पर अपलोड करना होगा.

सीएसई टोकन पाना

Drive API Files:generateCseToken तरीके को कॉल करके, Google Drive से सीएसई टोकन का अनुरोध करें. पक्का करें कि आपने अनुरोध में fileId क्वेरी पैरामीटर शामिल न किया हो. किसी फ़ोल्डर में फ़ाइल बनाने के लिए, फ़ोल्डर आईडी के साथ parent क्वेरी पैरामीटर शामिल करें. अगर parent को शामिल नहीं किया जाता है, तो फ़ाइल को उपयोगकर्ता के मेरी ड्राइव के रूट फ़ोल्डर में बनाया जाता है. जवाब में, अपलोड के लिए एक यूनीक फ़ाइल आईडी और JWT ऑथराइज़ेशन टोकन शामिल होता है. यह टोकन, कुंजी रैपिंग के चरण के लिए ज़रूरी है.

डेटा को स्थानीय तौर पर एन्क्रिप्ट (सुरक्षित) करना

  1. फ़ाइल के लिए यूनीक डेटा एन्क्रिप्शन की (डीईके) जनरेट करने के लिए, Google Tink का इस्तेमाल करें.
  2. एन्क्रिप्ट (सुरक्षित) की गई फ़ाइल के स्ट्रक्चर के मुताबिक, फ़ाइल के कॉन्टेंट को एन्क्रिप्ट (सुरक्षित) करें.

Compute Resource Key Hash

संसाधन कुंजी का हैश कैलकुलेट करने के लिए:

  1. generateCseToken से मिले jwt ऑथराइज़ेशन टोकन से resource_name और perimeter_id निकालें. अगर perimeter_id मौजूद नहीं है, तो खाली स्ट्रिंग का इस्तेमाल करें.
  2. साइन करने के लिए, कुंजी के तौर पर सादे टेक्स्ट वाली डीईके और डेटा के तौर पर स्ट्रिंग ResourceKeyDigest:my_resource_name:my_perimeter_id का इस्तेमाल करके, एचएमएसी-SHA256 का हिसाब लगाएं.
  3. इसके बाद, हैश किए गए नतीजे को Base64 में बदलें.

ज़्यादा जानकारी के लिए, संसाधन कुंजी का हैश देखें.

एन्क्रिप्शन कुंजी को रैप करना

डीईके को सुरक्षित रखने के लिए, उसे अपने बाहरी KACLS का इस्तेमाल करके एन्क्रिप्ट (रैप) करें.

  1. सही एंडपॉइंट को कॉल करें:
  2. सादा टेक्स्ट डीईके, IdP पुष्टि करने वाला टोकन, Google का अनुमति टोकन (अगर ज़रूरी हो), JWT से मिला resource_name, और reason पास करें.
  3. KACLS से रैप्ड डीईके (डब्ल्यूडीईके) पाएं.

डिस्क पर अपलोड करें

एन्क्रिप्ट (सुरक्षित) की गई फ़ाइल के बड़े बाइनरी ऑब्जेक्ट (ब्लॉब) को अपलोड करने के लिए, Drive API files.create एंडपॉइंट का इस्तेमाल करें. फ़ाइल के मेटाडेटा में ये फ़ील्ड सेट करें:

  • id: यह generateCseToken से मिले रिस्पॉन्स में मौजूद फ़ाइल का यूनीक आईडी होता है.
  • mimeType: application/vnd.google-gsuite.encrypted; content="application/octet-stream".
    • content पैरामीटर को ओरिजनल फ़ाइल के एमआईएमई टाइप पर सेट किया जा सकता है.
  • clientEncryptionDetails:

ओपन सोर्स का उदाहरण

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

किसी फ़ाइल को डाउनलोड और डिक्रिप्ट करना

सीएसई फ़ाइल डाउनलोड करने के लिए, Google Drive से एन्क्रिप्ट (सुरक्षित) किया गया कॉन्टेंट और मेटाडेटा वापस पाना होता है. इसके बाद, आपको अपने KACLS से सादे टेक्स्ट के तौर पर डीईके का अनुरोध करना होता है. इसके बाद, फ़ाइल को स्थानीय तौर पर डिक्रिप्ट (सुरक्षित तरीके से बदलना) करना होता है.

फ़ाइल का मेटाडेटा और एन्क्रिप्ट (सुरक्षित) किया गया कॉन्टेंट वापस पाना

फ़ाइल का मेटाडेटा और कॉन्टेंट वापस पाने के लिए, Drive API के Files:get तरीके का इस्तेमाल करें. clientEncryptionDetails में DecryptionMetadata होता है. इसमें रैप्ड डीईके (डब्ल्यूडीईके) और केएसीएलएस की जानकारी वाला JWT शामिल होता है.

एन्क्रिप्ट (सुरक्षित) करने की कुंजी को अनरैप करना

  1. सही एंडपॉइंट को कॉल करें:
  2. WDEK, IdP पुष्टि करने वाला टोकन, Google अनुमति टोकन (अगर ज़रूरी हो), resource_name, और reason पास करें.
  3. KACLS से सादा टेक्स्ट वाला डीईके पाएं.

डेटा को स्थानीय तौर पर डिक्रिप्ट करना

  1. KACLS से मिले सादे टेक्स्ट वाले DEK का इस्तेमाल करके, सिफ़र को शुरू करें.
  2. शुरुआती मैजिक बाइट को छोड़ें और एन्क्रिप्ट की गई फ़ाइल के स्ट्रक्चर के हिसाब से, बाकी कॉन्टेंट को डिक्रिप्ट करें.

ओपन सोर्स का उदाहरण

डाउनलोड करने और डिक्रिप्ट करने की प्रोसेस का डेमो देखने के लिए, ओपन सोर्स डेमो देखें. इससे समस्या को हल करने का तरीका मिलता है और इसे एक अहम रेफ़रंस के तौर पर इस्तेमाल किया जा सकता है.

इंपोर्ट की गई फ़ाइलों की पुष्टि करना

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

Google Drive CSE में अपलोड किए गए कॉन्टेंट के ठीक से काम करने के लिए, यह ज़रूरी है कि उसे सही तरीके से एन्क्रिप्ट (सुरक्षित) किया गया हो और उसमें सही मेटाडेटा शामिल हो. यह पक्का करने की ज़िम्मेदारी आपकी है कि कॉन्टेंट मान्य हो और उसे डिक्रिप्ट किया जा सके.

राउंडट्रिप एन्क्रिप्शन और डिक्रिप्शन टेस्ट करना

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

Google Drive की मदद से स्पॉट-चेकिंग करना

पुष्टि करें कि अपलोड की गई फ़ाइलों में, Drive के वेब क्लाइंट में लॉक आइकॉन शामिल हो. अपलोड की गई कुछ फ़ाइलों को मैन्युअल तरीके से डाउनलोड करें. इससे यह पुष्टि की जा सकेगी कि वे उम्मीद के मुताबिक काम कर रही हैं. यह जांच, Google के सीएसई को लागू करने के तरीके का इस्तेमाल करके डिक्रिप्ट करने की कोशिश करती है. इससे, एन्क्रिप्शन या कुंजी रैपिंग लॉजिक से जुड़ी समस्याओं का पता लगाने में मदद मिलती है. मेरी ड्राइव और शेयर की गई ड्राइव, दोनों में मौजूद फ़ाइलें शामिल करें.

ओपन सोर्स डेमो

ओपन सोर्स Drive CSE Upload पैकेज, पूरी तरह से काम करने वाली Python लाइब्रेरी और कमांड-लाइन का उदाहरण देता है. यह इस गाइड में बताए गए, CSE के अपलोड और डाउनलोड करने के फ़्लो को लागू करता है. हमारा सुझाव है कि सीएसई इंटिग्रेशन बनाने से पहले, डेमो कोड की समीक्षा कर लें.