ऐप्लिकेशन लेयर को एन्क्रिप्ट (सुरक्षित) करना

ऐप्लिकेशन लेयर एन्क्रिप्शन के लिए, Standard Payments API के साथ PGP या JWE काम करती है.

PGP एन्क्रिप्शन

PGP, एन्क्रिप्शन, डिक्रिप्शन, और साइनिंग एल्गोरिदम का एक स्टैंडर्ड सेट है. यह क्रिप्टोग्राफ़िक निजता और पुष्टि करने की सुविधा देता है.

पेलोड को एन्क्रिप्ट (सुरक्षित) करने के लिए, PGP का इस्तेमाल करते समय पार्टनर को इन चीज़ों का इस्तेमाल करना होगा:

  • एक से ज़्यादा PGP कुंजियों की मदद से, पेलोड को एन्क्रिप्ट (सुरक्षित) और डिक्रिप्ट करना.
  • एक से ज़्यादा PGP कुंजियों से पेलोड साइन करना.
  • एक से ज़्यादा हस्ताक्षर से पेलोड की पुष्टि करना. इनमें से कोई भी हस्ताक्षर, Google की ओर से दी गई कुंजी हो सकता है.
  • वेब के हिसाब से सुरक्षित, Base64 कोड में बदले गए पेलोड को डिक्रिप्ट करना.

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

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

नई PGP कुंजी जनरेट की जा रही है

मान लें कि आपके सिस्टम पाथ में जीपीजी बाइनरी है. नई कुंजी का जोड़ा बनाने के लिए, यहां दिए गए POSIX कमांड का इस्तेमाल किया जा सकता है.

$ gpg --full-generate-key

जब कहा जाए, तब एक आरएसए कुंजी चुनें जिसमें एंट्रॉपी के कम से कम 2048 बिट और एक से दो साल की समयसीमा हो. इस निर्देश से एक मास्टर कुंजी ('S'gning और 'C'ertif जिसका जनरेशन, जनरेट करने के लिए SC लेबल किया गया है) और एक सबकी ('E'ncryption के लिए E'लेबल), दोनों बनने चाहिए.

PGP लाइब्रेरी कॉन्फ़िगरेशन

पेलोड भेजे जा रहे हैं

  1. साइन करते समय, आपको डाइजेस्ट एल्गोरिदम के तौर पर SHA384 का इस्तेमाल करना चाहिए. SHA1या MD5 का इस्तेमाल न करें
  2. एन्क्रिप्ट करते समय, आपको सिमेट्रिक एन्क्रिप्शन एल्गोरिदम के तौर पर AES256 का इस्तेमाल करना चाहिए; CAST5 या IDEA का इस्तेमाल न करें
  3. मैसेज को एन्क्रिप्ट या साइन करते समय, पक्का करें कि आपने उसी मकसद से सब कुंजी चुनें. साइन करने के लिए, CAN_SIGN कुंजी और एन्क्रिप्ट करने के लिए ENCRYPT_COMMS/ENCRYPT_STORAGE कुंजी का इस्तेमाल करें

पेलोड मिल रहे हैं

  1. पेलोड की पुष्टि करते समय, यह पक्का करें कि आपकी लाइब्रेरी में SHA384 जैसे मॉडर्न हैश एल्गोरिदम काम करते हों. Google इसका इस्तेमाल 14 मई, 2023 से सभी नई कुंजियों पर करना शुरू कर देगा.
  2. पेलोड को डिक्रिप्ट करते समय, यह पक्का करें कि आपकी लाइब्रेरी में 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 कुंजियों में से किसी एक से पेलोड डिक्रिप्ट किया जा रहा है.
  • कुंजी को मैनेज करने के लिए, आरएसए-ओएईपी, आरएसए-ओएईपी-256 या ECDH-ES एल्गोरिदम.
  • कॉन्टेंट को एन्क्रिप्ट (सुरक्षित) करने के लिए, 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 का एल्गोरिदम.
  • kid हेडर, ताकि निजी साइनिंग पासकोड की पहचान की जा सके.

JWE/JWS स्ट्रिंग को UTF-8 स्ट्रिंग के तौर पर एन्कोड किया जाएगा और उनके पेलोड आर्बिट्ररी बाइट हो सकते हैं.

निजी कुंजियां, आरएसए/ईसीडीएच-ईएस की होनी चाहिए. इनकी समयसीमा एक साल में खत्म हो जाती है और ज़्यादा से ज़्यादा दो साल तक इसका इस्तेमाल किया जा सकता है. सभी निजी कुंजी की पहचान हमेशा पार्टनर के सर्वर पर होनी चाहिए. इसलिए, हस्ताक्षर की सभी वैल्यू का हिसाब पार्टनर के सर्वर पर लगाया जाना चाहिए.

डेवलपमेंट शुरू करने से पहले, आपको Google के साथ JWE और JWS कुंजियों की अदला-बदली करनी होगी. कुंजियों का लेन-देन JWK फ़ॉर्मैट में किया जाना चाहिए, जैसा कि rfc7517 में बताया गया है. इस चरण में, सार्वजनिक और निजी पासकोड का जोड़ा जनरेट किया जाता है, Google को सार्वजनिक कुंजी दी जाती है, और Google से वापस एक सार्वजनिक पासकोड मिलता है. डेवलपमेंट के दौरान, आपको सिर्फ़ प्रोडक्शन और टेस्टिंग के लिए इस्तेमाल की जाने वाली सैंडबॉक्स कुंजी की अदला-बदली करनी होगी. प्रोडक्शन टेस्ट और लॉन्च से पहले, आपको प्रोडक्शन कुंजियों का एक और लेन-देन करना होगा.