असुरक्षित क्रिप्टोग्राफ़िक एनक्रिप्शन को ठीक करने का तरीका

यह जानकारी ऐसे डेवलपर के लिए है जिनके ऐप्लिकेशन में असुरक्षित क्रिप्टोग्राफ़िक एनक्रिप्शन मौजूद है. इसमें ऐसे एनक्रिप्ट किए गए सादे पाठ शामिल हैं जो स्टैटिक कंप्यूटिंग वाली गुप्त कुंजी, सॉल्ट या इनीशियलाइज़ेशन वेक्टर (IV) से जनरेट किए गए हैं. आप अपने ऐप्लिकेशन की Play कंसोल सूचनाओं में जाकर, असुरक्षित क्रिप्टोग्राफ़िक एनक्रिप्शन की जगह की जानकारी देख सकते हैं. 

“असुरक्षित क्रिप्टोग्राफ़िक एन्क्रिप्शन पैटर्न” की चेतावनी कैसे ठीक करें 

अपने ऐप्लिकेशन की जांच करके स्टैटिक कंप्यूटिंग वाली गुप्त कुंजी, सॉल्ट या इनीशियलाइज़ेशन वेक्टर ढूंढें. इसके अलावा, वे सॉल्ट भी देखें जो क्रिप्टोग्राफ़िक एनक्रिप्शन ऑपरेशन में इस्तेमाल हुए हैं. साथ ही, पक्का करें कि ये मान सुरक्षित तरीके से बनाए गए हैं. उदाहरण के लिए, नीचे दिया गया कोड स्टैटिक तरीके से कंप्यूट की जा सकने वाली सुरक्षा कुंजी और साथ में स्टैटिक तरीके से कंप्यूट किया जा सकने वाला इनीशियलाइज़ेशन वेक्टर इस्तेमाल करता है:

   // Console alert refers to this method
  public byte[] encryptionUtil(String key, String iv, byte[] plainText) {
    Cipher cipher = Cipher.getInstance(“AES/GCM/NoPadding”);
    SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), “AES”);
    GCMParameterSpec paramSpec = new GCMParameterSpec(256, iv.getBytes());
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
    return cipher.doFinal(plainText);
  }

  // The unsafe key and initialization vector are here and should be changed
  byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);

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

Android के लिए सबसे सही तरीके
हमारा सुझाव है कि आप सिमेट्रिक क्रिप्टोग्राफ़ी के लिए Jetpack Security का इस्तेमाल करें. अगर आपका ऐप्लिकेशन API कुंजियां, व्यक्तिगत रूप से पहचान योग्य जानकारी (PII) या दूसरे संवेदनशील डेटा एनक्रिप्ट करता है, तो आप EncryptedSharedPreferences का इस्तेमाल करके, इस डेटा को सुरक्षित तरीके से सेव कर सकते हैं. साथ ही, इससे आपको सुरक्षा कुंजियों, इनीशियलाइज़ेशन वेक्टर, और सॉल्ट लागू करने के बारे में चिंता करने की ज़रूरत नहीं होगी. इसके अलावा, दूसरे सबसे सही तरीके और उदाहरण इस पेज पर उपलब्ध हैं. डेटा को दूसरे सिस्टम में सुरक्षित रूप से ट्रांसमिट करने के लिए, डेवलपर को अपने ट्रांसमिशन में TLS/SSL का इस्तेमाल करना चाहिए. 

Jetpack Security सेमेट्रिक तरीके से पुष्टि किए गए एन्क्रिप्शन को सुरक्षित रखने के लिए Google के ओपन सोर्स प्रोजेक्ट Tink का इस्तेमाल करता है. हमारा सुझाव है कि निचले स्तर के क्रिप्टोग्राफ़िक संचालन के बेहतर इस्तेमाल वाले मामलों के लिए सीधे Tink इस्तेमाल करें.

अगर Android के लिए ऊपर बताए गए सबसे अच्छे तरीके आपके इस्तेमाल के उदाहरण से नहीं मिलते और आपको साफ़ तौर पर कुंजियों, इनीशियलाइज़ेशन वेक्टर, और सॉल्ट को प्रबंधित करने की ज़रूरत है, तो हमारा सुझाव है कि नीचे दिए गए मानकों का पालन करें:

  1. गुप्त कुंजियां: सेमेट्रिक गुप्त कुंजियों का गुप्त और ऐसा होना ज़रूरी है कि उनका अनुमान न लगाया जा सके. स्थानीय डेटा को एनक्रिप्ट करने के लिए डेवलपर को क्रिप्टोग्राफ़िक तरीके वाली सिक्योर रैंडमनेस का इस्तेमाल करके सुरक्षा कुंजियां बनानी चाहिए (अगर PBEKeySpecs का इस्तेमाल कर रहे हैं, तो उपयोगकर्ताओं के जनरेट किए गए डेटा का इस्तेमाल करें). साथ ही, AndroidKeystore का इस्तेमाल करके कुंजियां सेव करें. 
  2. इनीशियलाइज़ेशन वेक्टर: इनीशियलाइज़ेशन वेक्टर का खास और ऐसा होना ज़रूरी है कि कई मैसेज की मदद से भी इनका अनुमान न लगाया जा सके. हालांकि, इनका गुप्त होना ज़रूरी नहीं है. डेवलपर को चाहिए कि वे क्रिप्टोग्राफ़िक तरीके वाली सिक्योर रैंडमनेस का इस्तेमाल करके इनीशियलाइज़ेशन वेक्टर बनाएं. डेवलपर को इनीशियलाइज़ेशन वेक्टर, सादे लेख से एनक्रिप्ट किए गए पाठ के साथ सुरक्षित करने चाहिए या उन्हें ट्रांसमिट करना चाहिए.
  3. सॉल्ट: सॉल्ट का खास और ऐसा होना ज़रूरी है कि कई हैश के साथ भी इसका अनुमान न लगाया जा सके. हालांकि, इसका गुप्त होना ज़रूरी नहीं है. डेवलपर को चाहिए कि वे क्रिप्टोग्राफ़िक तरीके वाली सिक्योर रैंडमनेस का इस्तेमाल करके सॉल्ट बनाएं. डेवलपर को सॉल्ट, उनसे संबंधित हैश के साथ सेव या ट्रांसमिट करने चाहिए.

अगले चरण

  1. ऊपर हाइलाइट किए गए कदमों के मुताबिक अपना ऐप्लिकेशन अपडेट करें.
  2. अपने Play Console में साइन इन करें और अपने ऐप्लिकेशन का अपडेट किया हुआ वर्शन सबमिट करें.
आपके ऐप्लिकेशन की फिर से जांच की जाएगी. अगर ऐप्लिकेशन को ठीक से अपडेट नहीं किया गया है, तो आपको अब भी चेतावनी दिखाई देगी. इस प्रक्रिया में कई घंटे लग सकते हैं.

हम मदद के लिए मौजूद हैं

अगर आप जोखिम से जुड़े तकनीकी सवाल पूछना चाहते हैं, तो आप Stack Overflow पर पोस्ट कर सकते हैं और “android-security” टैग का इस्तेमाल कर सकते हैं.
 
false
मुख्य मेन्यू
14013363778585964230
true
खोज मदद केंद्र
true
true
true
true
true
5016068
false
false