PGP एन्क्रिप्शन
PGP, एन्क्रिप्शन, डिक्रिप्शन, और हस्ताक्षर करने के एल्गोरिदम का एक स्टैंडर्ड सेट है. यह क्रिप्टोग्राफ़िक निजता और पुष्टि करने की सुविधा देता है.
पे लोड को एन्क्रिप्ट (सुरक्षित) करने के लिए PGP का इस्तेमाल करते समय, पार्टनर को इन बातों का ध्यान रखना होगा:
- एक से ज़्यादा PGP कुंजियों की मदद से पेलोड को एन्क्रिप्ट (सुरक्षित) और डिक्रिप्ट करना.
- एक से ज़्यादा PGP कुंजियों से पेलोड पर हस्ताक्षर करना.
- एक से ज़्यादा हस्ताक्षर वाले पेलोड की पुष्टि करना. इनमें से कोई भी हस्ताक्षर, Google की ओर से दी गई कुंजी का हस्ताक्षर हो सकता है.
- वेब के लिए सुरक्षित base64 कोड में बदले गए पेलोड को डिक्रिप्ट करना.
Google को दी गई पीजीपी सार्वजनिक कुंजियों में, एन्क्रिप्शन के लिए इस्तेमाल की गई सब-की होनी चाहिए. सबकुंजी की मदद से, मुख्य कुंजी से अलग रोटेशन किया जा सकता है. प्राइमरी पासकोड का इस्तेमाल, पहचान की पुष्टि करने के लिए किया जाता है. निजी कुंजियां, 2048 (या इससे ज़्यादा) बिट आरएसए कुंजियां होनी चाहिए. इनकी समयसीमा एक साल होनी चाहिए और ज़्यादा से ज़्यादा दो साल होनी चाहिए.
डेवलपमेंट शुरू करने से पहले, आपको Google के साथ पीजीपी कुंजियां एक्सचेंज करनी होंगी. इस चरण में, PGP सार्वजनिक-निजी पासकोड का जोड़ा जनरेट किया जाता है. साथ ही, Google को सार्वजनिक पासकोड दिया जाता है और Google से सार्वजनिक पासकोड वापस लिया जाता है. डेवलपमेंट के दौरान, आपको सिर्फ़ सैंडबॉक्स कुंजियों को एक्सचेंज करना होगा. इनका इस्तेमाल डेवलपमेंट और प्रोडक्शन के बाहर टेस्टिंग के लिए किया जाता है. प्रोडक्शन टेस्टिंग और लॉन्च से पहले, आपको प्रोडक्शन की कुंजियों को फिर से बदलना होगा.
नई PGP कुंजी जनरेट करना
मान लें कि आपके सिस्टम पाथ में GPG बाइनरी है. ऐसे में, नई कुंजी जोड़ी बनाने के लिए, यहां दिए गए POSIX कमांड का इस्तेमाल किया जा सकता है.
$ gpg --full-generate-key
जब आपसे पूछा जाए, तब कम से कम 2048 बिट के एन्ट्रॉपी वाली आरएसए कुंजी चुनें. साथ ही, इसकी समयसीमा एक से दो साल होनी चाहिए. इस कमांड से, प्राइमरी कुंजी (SC के तौर पर लेबल की गई है, जिसका मतलब 'S'igning और 'C'ertificate जनरेशन है) और सबकुंजी (E के तौर पर लेबल की गई है, जिसका मतलब 'E'ncryption है), दोनों बननी चाहिए.
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 section 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हेडर (rfc 7518 सेक्शन 3.1) में अपने-आप भर जाती है.
- यह वैल्यू,
- निजी साइनिंग पासकोड की पहचान करने के लिए
kidहेडर.
JWE/JWS स्ट्रिंग को UTF-8 स्ट्रिंग के तौर पर एन्कोड किया जाएगा. साथ ही, उनके पेलोड में कोई भी बाइट हो सकती है.
निजी कुंजियां, RSA/ECDH-ES कुंजियां होनी चाहिए. इनकी समयसीमा एक साल होनी चाहिए और इनकी ज़्यादा से ज़्यादा समयसीमा दो साल होनी चाहिए. सभी निजी कुंजी की पहचान हमेशा पार्टनर के सर्वर पर होनी चाहिए. साथ ही, सभी हस्ताक्षर वैल्यू की गिनती पार्टनर के सर्वर पर की जानी चाहिए.
डेवलपमेंट शुरू करने से पहले, आपको Google के साथ JWE और JWS कुंजियां शेयर करनी होंगी. कुंजियों को JWK फ़ॉर्मैट में बदला जाना चाहिए. इसके बारे में rfc7517 में बताया गया है. इस चरण में, सार्वजनिक-निजी कुंजी का एक जोड़ा जनरेट किया जाता है. साथ ही, Google को सार्वजनिक कुंजी दी जाती है और Google से सार्वजनिक कुंजी वापस मिलती है. डेवलपमेंट के दौरान, आपको सिर्फ़ सैंडबॉक्स कुंजियों को एक्सचेंज करना होगा. इनका इस्तेमाल डेवलपमेंट और प्रोडक्शन के बाहर टेस्टिंग के लिए किया जाता है. प्रोडक्शन टेस्टिंग और लॉन्च से पहले, आपको प्रोडक्शन की कुंजियों को फिर से बदलना होगा.