आईओएस पर डेटा एन्क्रिप्शन को समझना

आईओएस संवेदनशील डेटा की रक्षा के लिए कई परतों पर एन्क्रिप्शन लागू करता है। हार्डवेयर स्तर पर, सुरक्षित एन्क्लेव एन्क्रिप्शन कुंजी और क्रिप्टोग्राफिक ऑपरेशन का प्रबंधन करता है। ऑपरेटिंग सिस्टम स्तर पर, डेटा प्रोटेक्शन फ़ाइल स्तर एन्क्रिप्शन का उपयोग करता है जो डिवाइस के पासकोड के लिए एन्क्रिप्शन कुंजी से संबंधित है। ऐप-विशिष्ट डेटा के लिए, डेवलपर्स क्रिप्टोकीट, कॉमनक्रिप्टो और व्यक्तिगत रिकॉर्ड, फ़ाइलों या नेटवर्क पेलोड को एन्क्रिप्ट करने के लिए सुरक्षा ढांचे जैसे ढांचे का लाभ उठा सकते हैं।

एन्क्रिप्शन सादेटेक्स्ट को एक एल्गोरिथ्म और एक कुंजी का उपयोग करके सिफरटेक्स्ट में परिवर्तित करता है। सही कुंजी के बिना, डेटा अप्राप्य रहता है। Apple का iOS डेटा प्रोटेक्शन API] स्वचालित रूप से बाकी फाइलों को एन्क्रिप्ट करता है, लेकिन डेवलपर्स को संरक्षित फ़ाइल सिस्टम के बाहर संग्रहीत डेटा के लिए स्पष्ट एन्क्रिप्शन की आवश्यकता होती है - जैसे कि कोर डेटा, उपयोगकर्ताडिफ़ॉल्ट, या कस्टम कैश में।

कुंजी टेकअवे: ] जब भी यह डिवाइस पर रहता है तो संवेदनशील डेटा को एन्क्रिप्ट करें , भले ही आईओएस एन्क्रिप्शन डिफ़ॉल्ट रूप से सक्षम हो। यह भौतिक उपकरण पहुंच, फोरेंसिक निष्कर्षण, या उसी सैंडबॉक्स में चल रहे दुर्भावनापूर्ण ऐप्स के खिलाफ सुरक्षा सुनिश्चित करता है।

आईओएस एन्क्रिप्शन फ्रेमवर्क और एपीआई

एप्पल कई क्रिप्टोग्राफिक पुस्तकालयों को प्रदान करता है। सही चुनना तैनाती लक्ष्य और आवश्यक नियंत्रण स्तर पर निर्भर करता है।

CryptoKit – Modern Swift API

IOS 13 में पेश किया गया CryptoKit सममित और विषम क्रिप्टोग्राफी, हैशिंग और प्रमुख समझौते के लिए एक स्विफ्ट-नेटिव इंटरफेस प्रदान करता है। यह प्रमाणित एन्क्रिप्शन के लिए AES-GCM का उपयोग करता है, जो गोपनीयता और अखंडता दोनों की रक्षा करता है। नीचे एक विशिष्ट एन्क्रिप्शन और डिक्रिप्शन पैटर्न है:

import CryptoKit

func encryptSensitiveData(_ plaintext: String, using key: SymmetricKey) throws -> Data {
 let inputData = Data(plaintext.utf8)
 let sealedBox = try AES.GCM.seal(inputData, using: key)
 return sealedBox.combined
}

func decryptSensitiveData(_ encryptedData: Data, using key: SymmetricKey) throws -> String {
 let sealedBox = try AES.GCM.SealedBox(combined: encryptedData)
 let decryptedData = try AES.GCM.open(sealedBox, using: key)
 return String(decoding: decryptedData, as: UTF8.self)
}

हमेशा कीचेन में को स्टोर करें, उपयोगकर्ताडिफ़ॉल्ट या एक सादे फ़ाइल में नहीं। का उपयोग के साथ ] डिवाइस और उपयोगकर्ता की उपस्थिति की कुंजी को टाई करने के लिए करें।

कॉमनक्रिप्टो - सी-आधारित लचीलापन

पुराने आईओएस संस्करणों का समर्थन करने वाले ऐप्स के लिए या कस्टम ब्लॉक सिफर मोड (जैसे, एचमैक के साथ सीबीसी), कॉमनक्रिप्टो कम स्तर के सी कार्यों को प्रदान करता है। यह एईएस, डीईएस, 3 डीईएस और विभिन्न हैशिंग एल्गोरिदम का समर्थन करता है। एईएस-सीबीसी एन्क्रिप्शन का उदाहरण:

#include <CommonCrypto/CommonCryptor.h>

- (NSData *)aes256Encrypt:(NSData *)plaintext withKey:(NSData *)key iv:(NSData *)iv {
 size_t outLength;
 NSMutableData *ciphertext = [NSMutableData dataWithLength:plaintext.length + kCCBlockSizeAES128];
 CCCryptorStatus status = CCCrypt(kCCEncrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding,
 key.bytes, key.length, iv.bytes,
 plaintext.bytes, plaintext.length,
 ciphertext.mutableBytes, ciphertext.length,
 &outLength);
 if (status == kCCSuccess) {
 ciphertext.length = outLength;
 return ciphertext;
 }
 return nil;
}

कॉमनक्रिप्टो को प्रारंभिककरण वेक्टर (IVs) और प्रमाणीकरण टैग के मैनुअल प्रबंधन की आवश्यकता होती है। प्रमाणीकरण एन्क्रिप्शन के लिए, एक अलग HMAC के साथ AES-CBC को जोड़ा, या संभव होने पर CryptoKit के माध्यम से AES-GCM में स्विच करें।

सुरक्षा ढांचा और चाबी का गुच्छा

सुरक्षा ढांचा कुंजी, प्रमाणपत्र और पासवर्ड के सुरक्षित भंडारण के लिए कीचेन सेवाएं प्रदान करता है। सख्त एक्सेस कंट्रोल के साथ कुंजी को स्टोर करने के लिए का उपयोग करें (उदाहरण के लिए, बॉयोमीट्रिक्स के माध्यम से उपयोगकर्ता की उपस्थिति की आवश्यकता होती है)। सुरक्षित एन्क्लेव ईसीसी संचालन के लिए निजी कुंजी उत्पन्न और स्टोर कर सकता है, यह सुनिश्चित करता है कि कुंजी कभी हार्डवेयर को छोड़ न जाए।

विभिन्न डेटा प्रकारों के लिए एन्क्रिप्शन लागू करना

सभी डेटा को एक ही एन्क्रिप्शन रणनीति की आवश्यकता नहीं है। कैसे और कहाँ डेटा का उपयोग किया जाता है, इस दृष्टिकोण को दर्ज करें।

उपयोगकर्ता डिफ़ॉल्ट और कोर डेटा एन्क्रिप्ट करना

उपयोगकर्ताडिफ़ॉल्ट और कोर डेटा स्टोर्स तब तक सादे SQLite फाइलें हैं जब तक कि एन्क्रिप्ट नहीं किया गया। कोर डेटा के लिए, NSFileProtectionType] को स्टोर फ़ाइल पर विशेषता सक्षम करें। बारीकी के लिए, बचत से पहले व्यक्तिगत विशेषताओं या पूरी वस्तुओं को एन्क्रिप्ट करें:

  • कोर डेटा का प्रयोग करें transformable[ एक कस्टम मूल्य ट्रांसफार्मर के साथ गुण जो पढ़ने / लिखने पर एन्क्रिप्ट / डिक्रिप्ट करता है।
  • पूरे प्रबंधित ऑब्जेक्ट को JSON के रूप में क्रमबद्ध करें, इसे एन्क्रिप्ट करें और एक द्विआधारी विशेषता में सिफरटेक्स्ट को स्टोर करें।
  • उपयोगकर्ताडिफ़ॉल्ट के लिए, कभी कच्चे संवेदनशील स्ट्रिंग्स को स्टोर नहीं किया जाता है; प्रत्येक मूल्य को एन्क्रिप्ट और एन्क्रिप्टेड डेटा को स्टोर किया जाता है।

उपयोगकर्ताडिफ़ॉल्ट में एन्क्रिप्टेड डेटा को संग्रहीत करने का उदाहरण:

let key = SymmetricKey(size: .bits256)
let data = "user_ssn".data(using: .utf8)!
let sealedBox = try AES.GCM.seal(data, using: key)
UserDefaults.standard.set(sealedBox.combined, forKey: "encrypted_ssn")
UserDefaults.standard.synchronize()

फ़ाइल संरक्षण के साथ फ़ाइलें एन्क्रिप्ट करना

आईओएस फ़ाइल स्तर सुरक्षा कक्षाएं प्रदान करता है: , , और . फ़ाइलों को बनाने या स्थानांतरित करने के दौरान इन विशेषताओं को सेट करें:

let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("data.bin")
try FileManager.default.setAttributes([.protectionKey: FileProtectionType.complete], ofItemAtPath: fileURL.path)

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

एन्क्रिप्शन नेटवर्क डेटा (ट्रांसपोर्ट लेयर सिक्योरिटी)

ऐप ट्रांसपोर्ट सिक्योरिटी (ATS) डिफ़ॉल्ट रूप से HTTPS को लागू करता है। कस्टम टीसीपी कनेक्शन के लिए, टीएलएस के साथ का उपयोग करें या मैन-इन-मिडल हमलों को रोकने के लिए एसएसएल पिनिंग को लागू करें। अतिरिक्त रक्षा-इन-डेप्थ के लिए आवेदन परत पर पेलोड को एन्क्रिप्ट करें: भले ही टीएलएस समझौता हो, डेटा संरक्षित हो।

कुंजी प्रबंधन सर्वश्रेष्ठ अभ्यास

एन्क्रिप्शन केवल कुंजी प्रबंधन के रूप में मजबूत है। सुरक्षा को बनाए रखने के लिए इन दिशानिर्देशों का पालन करें:

  • ]]एक क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक संख्या जनरेटर का उपयोग कर जनरेट कुंजी - [[FLT: 12]] या [[FLT: 13]]]] का उपयोग करें।
  • ]]: ]]: ]]]: बैकअप को रोकता है और डिवाइस की कुंजी को टाई करता है।
  • ]]Use बॉयोमीट्रिक या पासकोड प्रमाणीकरण कुंजी को पुनः प्राप्त करने से पहले ] ] के साथ उपयोगकर्ता सत्यापन बलों.
  • ]]एक अनुसूची पर या एक सुरक्षा घटना के बाद कुंजी घुमाएँ - नई कुंजी के साथ डेटा को फिर से एन्क्रिप्ट करें और सुरक्षित रूप से पुरानी कुंजी को हटा दें।
  • ]Do not hardcode keys in सोर्स कोड या कॉन्फ़िगरेशन फ़ाइलों. उपयोगकर्ता पासवर्ड से कुंजी प्राप्त करें जब आवश्यक हो तो धीमी कुंजी विचलन समारोह (PBKDF2 या scrypt) का उपयोग करना.
  • ]Asymmetric key Generation के लिए सुरक्षित Enclave[ का लाभ उठाएं - निजी कुंजी निर्यात नहीं की जा सकती है, जिससे exfiltration को रोका जा सकता है।

अत्यधिक संवेदनशील डेटा को संभालने वाले ऐप्स के लिए, नेटवर्क सेवाओं के माध्यम से हार्डवेयर सुरक्षा मॉड्यूल (HSM) का उपयोग करने पर विचार करें, हालांकि यह विलंबता शुरू करता है और इंटरनेट कनेक्टिविटी की आवश्यकता होती है।

कुंजी रोटेशन और पुनः एन्क्रिप्शन

जब एक कुंजी समझौता हो जाती है या एक परिभाषित अवधि (जैसे हर 90 दिन) के बाद कुंजी घुमाती है। इसमें पुराने कुंजी के साथ सभी डेटा को डिक्रिप्ट करना शामिल है, जिससे एक नई कुंजी उत्पन्न होती है, और फिर से एन्क्रिप्टिंग होती है। बड़े डेटासेट के लिए, एक संस्करण कुंजी योजना लागू करें:

  1. प्रत्येक एन्क्रिप्टेड रिकॉर्ड के साथ एक कुंजी पहचानकर्ता (जैसे, UUID) स्टोर करें।
  2. कीचेन में वास्तविक कुंजी के लिए पहचानकर्ता का मानचित्रण रखें ( बाकी में एन्क्रिप्टेड)।
  3. रोटेशन के दौरान, सभी डेटा को तुरंत दोबारा एन्क्रिप्ट किए बिना एक नई प्रविष्टि जोड़ें। पहुंच पर लाज़ी को फिर से एन्क्रिप्ट करें।

अनुपालन और नियामक विचार

कई विनियम संवेदनशील डेटा के लिए अधिदेश एन्क्रिप्शन GDPR के लिए उचित तकनीकी उपायों की आवश्यकता होती है, और एन्क्रिप्शन एक मान्यता प्राप्त छद्म नामकरण तकनीक है। HIPAA]]] शेष और पारगमन में EPHI का अधिदेश एन्क्रिप्शन। PCI DSS]] को कार्डधारक डेटा के एन्क्रिप्शन की आवश्यकता होती है। आईओएस में, एप्लिकेशन-परत एन्क्रिप्शन के साथ संयुक्त एप्पल के डेटा संरक्षण दिशानिर्देशों का पालन करना सबसे अनुपालन आवश्यकताओं को संतुष्ट करता है। नियामक समीक्षा के लिए अपने कार्यान्वयन, प्रमुख जीवन चक्र नीतियों और ऑडिट ट्रेल्स को दस्तावेज दें।

नवीनतम सिफारिशों के लिए आधिकारिक Apple प्रलेखन का संदर्भ लें: CryptoKit डेवलपर गाइड , कीचेन सर्विसेज , और उपयोगकर्ता गोपनीयता की रक्षा]. उद्योग मार्गदर्शन के लिए, देखें OWASP मोबाइल सुरक्षा परीक्षण गाइड]] और ]NIST SP 800-175B - Cryptographic Standards]].

परीक्षण और सत्यापन

एन्क्रिप्शन को लागू करने के बाद, यह सही ढंग से काम करता है सत्यापित करें:

  • इकाई परीक्षण लिखें जो ज्ञात सादेटेक्स्ट को एन्क्रिप्ट और आउटपुट पर जोर देते हैं।
  • टेस्ट एज केस: खाली डेटा, बहुत बड़े पेलोड और भ्रष्ट सिफरटेक्स्ट।
  • हमला परिदृश्यों को अनुकरण करने के लिए जेलब्रोक डिवाइस का उपयोग करके सुरक्षा परीक्षण करें - सत्यापित करें कि कुंजी प्रमाणीकरण के बिना दुर्गम बनी रहे।
  • कोई हार्डकोडेड कुंजी या कमजोर एल्गोरिदम सुनिश्चित करने के लिए स्थैतिक विश्लेषण उपकरण का उपयोग करें।
  • लॉग की समीक्षा करें - कभी सादेटेक्स्ट संवेदनशील डेटा या एन्क्रिप्शन कुंजी लॉग नहीं करते हैं।

निष्कर्ष

संवेदनशील आईओएस डेटा संग्रहण के लिए डेटा एन्क्रिप्शन को लागू करना एक बहु-परत प्रक्रिया है। आईओएस फ़ाइल सुरक्षा, CryptoKit या CommonCrypto के साथ आवेदन-परत एन्क्रिप्शन को जोड़कर, और चाबी का गुच्छा और सुरक्षित एन्क्लेव के माध्यम से सख्त कुंजी प्रबंधन, डेवलपर्स डेटा एक्सपोज़र के जोखिम को काफी कम कर सकते हैं। जीडीपीआर और HIPAA जैसे नियमों के अनुपालन में दस्तावेज, लेखा परीक्षा योग्य एन्क्रिप्शन प्रथाओं की आवश्यकता होती है। नियमित परीक्षण और कुंजी रोटेशन लंबी अवधि की सुरक्षा सुनिश्चित करता है। एक मजबूत एन्क्रिप्शन आर्किटेक्चर में निवेश न केवल उपयोगकर्ता डेटा की रक्षा करता है बल्कि ट्रस्ट का निर्माण करता है और नियामक अपेक्षाओं को पूरा करता है।