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

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

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

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

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

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

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

डोमेन आईडीपी की मदद से पुष्टि करना

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

क्रेडेंशियल सुरक्षित रखना

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

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

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

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

क्लाइंट-साइड एन्क्रिप्ट (सुरक्षित) की गई फ़ाइलों पर, Drive की सामान्य सीमाएं और कोटा लागू होते हैं. शेयर की गई ड्राइव की सीमाओं, सामान्य फ़ाइल और फ़ोल्डर की सीमाओं, और अपने कोटा को मैनेज करने के तरीके के बारे में जानें. इसके अलावा, आपके इंपोर्ट टूल को Key Access Control List Service (KACLS) और Identity Provider (IdP) की दर की सीमाओं को मैनेज करना होगा.

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

Drive, अपलोड और डाउनलोड के लिए, क्लाइंट-साइड एन्क्रिप्ट (सुरक्षित) की गई फ़ाइल के इस फ़ॉर्मैट का इस्तेमाल करता है.

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

मैजिक हेडर

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

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

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

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

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

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

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

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

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

संसाधन कुंजी का हैश कंप्यूट करना

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

राउंडट्रिप एन्क्रिप्शन और डिक्रिप्शन की जांच करना

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

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

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

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

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