Keychain Services দিয়ে Secure Data Store গাইড ও নোট

Mobile App Development - আইওএস ডেভেলপমেন্ট (iOS) - iOS Security এবং Keychain Services
336

Keychain Services iOS-এ ডেটা সিকিউরভাবে সংরক্ষণ করার একটি শক্তিশালী ফ্রেমওয়ার্ক, যা সাধারণত সেনসিটিভ ইনফরমেশন (যেমন পাসওয়ার্ড, টোকেন, বা ক্রিপ্টোগ্রাফিক কী) সেভ করতে ব্যবহৃত হয়। Keychain একটি নিরাপদ স্টোরেজ স্পেস প্রদান করে, যা অ্যাপ বন্ধ বা ডিভাইস রিস্টার্ট হওয়ার পরেও ডেটা সুরক্ষিত রাখে।

Keychain এর সুবিধা

  • সিকিউরিটি: Keychain ডেটা এনক্রিপ্টেড আকারে সংরক্ষণ করে, যা এক্সেস করতে নির্দিষ্ট পদ্ধতি ব্যবহার করতে হয়।
  • পার্সিস্টেন্স: Keychain ডেটা অ্যাপ আনইনস্টল না করা পর্যন্ত এবং ম্যানুয়ালি ডিলিট না করা পর্যন্ত থাকে।
  • অ্যাক্সেস কন্ট্রোল: Keychain নির্দিষ্টভাবে অ্যাপ, অ্যাপ গ্রুপ বা আইক্লাউড অ্যাকাউন্টের জন্য অ্যাক্সেস কন্ট্রোল কনফিগার করতে দেয়।

Keychain এ ডেটা সংরক্ষণ ও রিড করার পদ্ধতি

iOS-এ Keychain এ ডেটা সেভ এবং রিড করতে Keychain Services API ব্যবহার করা হয়। নিচে আমি একটি সাধারণ উদাহরণ দিচ্ছি যেখানে Keychain-এ ডেটা সংরক্ষণ, রিড, আপডেট, এবং ডিলিট করা হয়েছে।

উদাহরণ: Keychain এ ডেটা সংরক্ষণ এবং ব্যবহারের জন্য Utility ফাংশন তৈরি করা

import Foundation
import Security

class KeychainService {
    
    // MARK: - Save Data to Keychain
    func save(key: String, value: String) -> Bool {
        // ডেটা কনভার্ট করে Data টাইপে
        guard let data = value.data(using: .utf8) else { return false }
        
        // Keychain আইটেম ডিকশনারি সেটআপ
        let query: [String: Any] = [
            kSecClass as String: kSecClassGenericPassword,
            kSecAttrAccount as String: key,
            kSecValueData as String: data
        ]
        
        // যদি আইটেম আগে থেকেই থাকে, তাহলে এটি আপডেট করতে হবে
        if SecItemCopyMatching(query as CFDictionary, nil) == errSecSuccess {
            let attributesToUpdate: [String: Any] = [
                kSecValueData as String: data
            ]
            let status = SecItemUpdate(query as CFDictionary, attributesToUpdate as CFDictionary)
            return status == errSecSuccess
        } else {
            // আইটেম সংরক্ষণ করা
            let status = SecItemAdd(query as CFDictionary, nil)
            return status == errSecSuccess
        }
    }
    
    // MARK: - Read Data from Keychain
    func read(key: String) -> String? {
        let query: [String: Any] = [
            kSecClass as String: kSecClassGenericPassword,
            kSecAttrAccount as String: key,
            kSecReturnData as String: true,
            kSecMatchLimit as String: kSecMatchLimitOne
        ]
        
        var item: CFTypeRef?
        let status = SecItemCopyMatching(query as CFDictionary, &item)
        
        guard status == errSecSuccess, let data = item as? Data, let value = String(data: data, encoding: .utf8) else {
            return nil
        }
        return value
    }
    
    // MARK: - Delete Data from Keychain
    func delete(key: String) -> Bool {
        let query: [String: Any] = [
            kSecClass as String: kSecClassGenericPassword,
            kSecAttrAccount as String: key
        ]
        
        let status = SecItemDelete(query as CFDictionary)
        return status == errSecSuccess
    }
}

উদাহরণ: Keychain এ ডেটা সংরক্ষণ, রিড, এবং ডিলিট করা

let keychain = KeychainService()

// ডেটা সংরক্ষণ করা
let isSaved = keychain.save(key: "userToken", value: "12345-abcde")
print("Data Saved: \(isSaved)")

// ডেটা রিড করা
if let token = keychain.read(key: "userToken") {
    print("Retrieved Token: \(token)")
} else {
    print("No data found for this key.")
}

// ডেটা ডিলিট করা
let isDeleted = keychain.delete(key: "userToken")
print("Data Deleted: \(isDeleted)")

ব্যাখ্যা:

  1. save(key:value:): এটি Keychain-এ ডেটা সংরক্ষণ করে। যদি ডেটা আগে থেকেই থাকে, তাহলে এটি আপডেট করে।
  2. read(key:): এটি Keychain থেকে ডেটা রিড করে। ডেটা না পাওয়া গেলে nil রিটার্ন করে।
  3. delete(key:): এটি Keychain থেকে নির্দিষ্ট ডেটা ডিলিট করে।

Keychain এ আইটেম সেভ করার সময় কিছু প্রয়োজনীয় বিষয়

  • kSecClass: Keychain আইটেমের ক্লাস যেমন kSecClassGenericPassword বা kSecClassInternetPassword
  • kSecAttrAccount: সেভ করা ডেটার জন্য একটি অ্যাকাউন্ট বা কী (অ্যাকাউন্টের নাম বা কাস্টম কী)।
  • kSecValueData: ডেটা যা সেভ করা হবে (এটি Data টাইপে থাকতে হবে)।
  • kSecAttrAccessible: অ্যাক্সেস কন্ট্রোল সেটিংস যা নির্ধারণ করে ডেটা কখন এবং কিভাবে অ্যাক্সেস করা যাবে। উদাহরণস্বরূপ:
    • kSecAttrAccessibleWhenUnlocked: ডেটা শুধুমাত্র যখন ডিভাইস আনলক করা হয় তখন অ্যাক্সেসযোগ্য।
    • kSecAttrAccessibleAfterFirstUnlock: ডিভাইস প্রথম আনলক হওয়ার পর থেকে ডেটা অ্যাক্সেসযোগ্য থাকে, এমনকি পরবর্তী লক অবস্থাতেও।

Keychain ব্যবহারের সেরা পদ্ধতি

  • অ্যাক্সেস কন্ট্রোল: সঠিকভাবে অ্যাক্সেস কন্ট্রোল সেট করুন, যেমন kSecAttrAccessibleWhenUnlocked বা kSecAttrAccessibleWhenUnlockedThisDeviceOnly
  • সেনসিটিভ ডেটা: শুধুমাত্র সেনসিটিভ ডেটা সংরক্ষণ করুন, যেমন পাসওয়ার্ড বা অথেন্টিকেশন টোকেন।
  • ব্যাকআপ: প্রয়োজন হলে iCloud Keychain ইন্টিগ্রেট করে ডেটা ব্যাকআপ এবং ডিভাইসগুলোতে সিঙ্ক করা যায়।
  • এনক্রিপশন: যদি ডেটা Keychain ছাড়াও অন্য কোথাও সেভ করতে হয়, তাহলে এনক্রিপশন ব্যবহার করা উচিত।

উপসংহার

Keychain Services ব্যবহার করে iOS অ্যাপে সেনসিটিভ ডেটা সুরক্ষিতভাবে সংরক্ষণ, রিড, এবং ম্যানেজ করা যায়। এটি অত্যন্ত সিকিউর এবং ডেটা পার্সিস্টেন্সের জন্য একটি নির্ভরযোগ্য পদ্ধতি, যা ইউজারের ইনফরমেশন সুরক্ষিত রাখতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...