PGP एन्क्रिप्शन
PGP, एन्क्रिप्शन, डिक्रिप्शन, और हस्ताक्षर करने के एल्गोरिदम का स्टैंडर्ड सेट है. इससे क्रिप्टोग्राफ़िक निजता और पुष्टि की सुविधा मिलती है.
पेलोड को एन्क्रिप्ट करने के लिए PGP का इस्तेमाल करते समय, पार्टनर को इनका इस्तेमाल करना होगा:
- एक से ज़्यादा PGP पासकोड की मदद से, पेलोड को एन्क्रिप्ट और डिक्रिप्ट करना.
- एक से ज़्यादा पीजीपी पासकोड का इस्तेमाल करके, पेलोड पर हस्ताक्षर करना.
- कई हस्ताक्षरों वाले पेलोड की पुष्टि करना. इनमें से कोई भी हस्ताक्षर, Google की दी गई कुंजी वाला हस्ताक्षर हो सकता है.
- वेब-सेफ़ base64 कोड में बदले गए पेलोड को डिक्रिप्ट करना.
Google को दी गई PGP सार्वजनिक कुंजियों में, एन्क्रिप्शन के लिए इस्तेमाल की जाने वाली सब-की होनी चाहिए. सब-की की मदद से, मास्टर पासकोड को बदले बिना, पासकोड को बदला जा सकता है. पहचान की पुष्टि करने के लिए, मास्टर पासकोड का इस्तेमाल किया जाता है. निजी कुंजियां 2048 (या उससे ज़्यादा) बिट की आरएसए कुंजियां होनी चाहिए. इनकी समयसीमा एक साल होनी चाहिए. हालांकि, इनकी समयसीमा दो साल से ज़्यादा नहीं होनी चाहिए.
डेवलपमेंट शुरू करने से पहले, आपको Google के साथ पीजीपी पासकोड शेयर करने होंगे. इस चरण में, आपको पीजीपी की सार्वजनिक-निजी पासकोड जोड़ी जनरेट करनी होगी. इसके बाद, Google को सार्वजनिक पासकोड देना होगा और Google से सार्वजनिक पासकोड वापस पाना होगा. डेवलपमेंट के दौरान, आपको सिर्फ़ प्रोडक्शन के बाहर डेवलपमेंट और टेस्टिंग के लिए इस्तेमाल की जाने वाली सैंडबॉक्स कुंजियों का आदान-प्रदान करना होगा. प्रोडक्शन टेस्टिंग और लॉन्च से पहले, आपको प्रोडक्शन पासकोड का एक और एक्सचेंज करना होगा.
नई पीजीपी पासकोड जनरेट करना
मान लें कि आपके सिस्टम पाथ में GPG बाइनरी है, तो एक नया पासकोड जोड़ने के लिए, POSIX कमांड का इस्तेमाल किया जा सकता है.
$ gpg --full-generate-key
जब कहा जाए, तब कम से कम 2048 बिट की एन्ट्रोपी और 1 से 2 साल की समयसीमा वाली आरएसए पासकोड चुनें. इस निर्देश से, एक मुख्य कुंजी ('साइन' करने और 'सर्टिफ़िकेट जनरेट करने' के लिए SC लेबल वाली) और एक सब-की ('एन्क्रिप्ट करने' के लिए E लेबल वाली) बननी चाहिए.
PGP लाइब्रेरी कॉन्फ़िगरेशन
पेलोड भेजना
- हस्ताक्षर करते समय, आपको डाइजेस्ट एल्गोरिदम के तौर पर
SHA384
का इस्तेमाल करना चाहिए.SHA1
याMD5
का इस्तेमाल न करें - एन्क्रिप्ट करते समय, आपको सिमेट्रिक एन्क्रिप्शन एल्गोरिदम के तौर पर
AES256
का इस्तेमाल करना चाहिए.CAST5
याIDEA
का इस्तेमाल न करें - मैसेज को एन्क्रिप्ट या साइन करते समय, उस काम के हिसाब से सब-की चुनना न भूलें. साइन करने के लिए
CAN_SIGN
पासकोड और एन्क्रिप्ट करने के लिएENCRYPT_COMMS
/ENCRYPT_STORAGE
पासकोड का इस्तेमाल करें
पेलोड पाना
- किसी पेलोड की पुष्टि करते समय, पक्का करें कि आपकी लाइब्रेरी में
SHA384
जैसे आधुनिक हैश एल्गोरिदम काम करते हों. Google, 14 मई, 2023 से सभी नई 'की' पर इसका इस्तेमाल करना शुरू कर देगा. - किसी पेलोड को डिक्रिप्ट करते समय, पक्का करें कि आपकी लाइब्रेरी में
AES256
जैसे आधुनिक सिमेट्रिक एन्क्रिप्शन एल्गोरिदम काम करते हों. Google, 14 मई, 2023 से सभी नई कुंजियों पर इसका इस्तेमाल शुरू कर देगा.
GPG पेलोड एन्क्रिप्शन का उदाहरण
नीचे दिया गया कमांड, GPG का इस्तेमाल करते समय सुरक्षित विकल्प चुनने का उदाहरण है. यह उम्मीद की जाती है कि यह कार्रवाई किसी भरोसेमंद माहौल में की जाती है, जहां लोगों के पास निजी कुंजियों या संवेदनशील इनपुट फ़ाइलों का ऐक्सेस न हो.
gpg --output signed-and-encrypted.pgp \
--sign --digest-algo SHA384 \
--encrypt --cipher-algo AES256 \
--armor \
--recipient {key_id} \
input.txt
GPG, हर उस कार्रवाई के लिए बंडल से अपने-आप सही कुंजी चुन लेगा जिसे आपको करने के लिए कहा जाएगा.
JWS हस्ताक्षर के साथ JWE एन्क्रिप्शन
JSON वेब एन्क्रिप्शन (JWE), एक स्टैंडर्ड है. इसे rfc7516 ने तय किया है. इसका इस्तेमाल, ऐप्लिकेशन के लेवल पर कॉन्टेंट को एन्क्रिप्ट करने के लिए किया जाता है. JSON वेब सिग्नेचर (JWS), एक ऐसा स्टैंडर्ड है जिसे rfc7515 के मुताबिक, ऐप्लिकेशन लेवल पर कॉन्टेंट पर हस्ताक्षर करने के लिए तय किया गया है.
अनुरोध और जवाब, "कॉम्पैक्ट सीरियलाइज़ेशन" विकल्प के साथ एसिमेट्रिक (सार्वजनिक कुंजी) एन्क्रिप्शन का इस्तेमाल करके एन्क्रिप्ट किए गए JWE टोकन होंगे. JWE टोकन में, हस्ताक्षर किया गया पेलोड, JWS टोकन के तौर पर शामिल होगा. JWS, असिमेट्रिक कुंजियों का भी इस्तेमाल करता है. साइन करने के लिए निजी कुंजी और पुष्टि करने के लिए सार्वजनिक कुंजी.
कोई पेलोड भेजते समय, पहले उस पर हस्ताक्षर करें और फिर उसे एन्क्रिप्ट करें. कोई पेलोड मिलने पर, सबसे पहले उसे डिक्रिप्ट करें. इसके बाद, हस्ताक्षर की पुष्टि करें.
JWE का इस्तेमाल करते समय, पार्टनर को इन विकल्पों का इस्तेमाल करना होगा:
- कॉम्पैक्ट सीरियलाइज़ेशन.
- कई JWE पासकोड में से किसी एक से, पेलोड को डिक्रिप्ट करना.
- कुंजी मैनेजमेंट के लिए, RSA-OAEP, RSA-OAEP-256 या ECDH-ES एल्गोरिदम.
- यह जानकारी
alg
हेडर (rfc7518 सेक्शन 4.1) में अपने-आप भर जाती है.
- यह जानकारी
- कॉन्टेंट को एन्क्रिप्ट करने के लिए, A256GCM,
A128GCM, A128CBC-HS256 या
A256CBC-HS512 एल्गोरिदम.
enc
हेडर में अपने-आप भर जाता है.
kid
एन्क्रिप्शन की सार्वजनिक कुंजी की पहचान करने के लिए हेडर.- JWE एन्क्रिप्शन का इस्तेमाल करने वाले मैसेज के पेलोड के लिए, कॉन्टेंट टाइप के तौर पर, application/jose; charset=utf-8 का इस्तेमाल करना ज़रूरी है.
JWS का इस्तेमाल करते समय, पार्टनर को इन विकल्पों का इस्तेमाल करना होगा:
- कॉम्पैक्ट सीरियलाइज़ेशन.
- कई JWS पासकोड में से किसी एक से पेलोड की पुष्टि करना.
- हस्ताक्षर बनाने के लिए, HS256, HS384, HS512, RS256, RS384, RS512, ES256, PS256, PS384 या PS512 एल्गोरिदम.
- यह जानकारी
alg
हेडर (आरएफ़सी 7518 सेक्शन 3.1) में अपने-आप भर जाती है.
- यह जानकारी
- हस्ताक्षर करने के लिए इस्तेमाल की जाने वाली निजी कुंजी की पहचान करने के लिए
kid
हेडर.
JWE/JWS स्ट्रिंग को UTF-8 स्ट्रिंग के तौर पर एन्कोड किया जाएगा. साथ ही, उनके पेलोड में मनमुताबिक बाइट हो सकते हैं.
निजी कुंजियां, RSA/ECDH-ES कुंजियां होनी चाहिए. इनकी समयसीमा एक साल की होती है और ये ज़्यादा से ज़्यादा दो साल तक काम करती हैं. सभी निजी कुंजी की पहचान हमेशा पार्टनर के सर्वर पर होनी चाहिए. साथ ही, हस्ताक्षर की सभी वैल्यू का हिसाब भी पार्टनर के सर्वर पर लगाया जाना चाहिए.
डेवलपमेंट शुरू करने से पहले, आपको Google के साथ JWE और JWS पासकोड शेयर करने होंगे. कुंजियों को JWK फ़ॉर्मैट में एक्सचेंज किया जाना चाहिए, जैसा कि rfc7517 में बताया गया है. इस चरण में, आपको सार्वजनिक-निजी पासकोड का जोड़ा जनरेट करना होगा. इसके बाद, Google को सार्वजनिक पासकोड देना होगा और Google से सार्वजनिक पासकोड वापस पाना होगा. डेवलपमेंट के दौरान, आपको सिर्फ़ प्रोडक्शन के बाहर डेवलपमेंट और टेस्टिंग के लिए इस्तेमाल की जाने वाली सैंडबॉक्स कुंजियों को एक्सचेंज करना होगा. प्रोडक्शन टेस्टिंग और लॉन्च से पहले, आपको प्रोडक्शन पासकोड का एक और एक्सचेंज करना होगा.