Keychain — کلیدی تصورات، فن تعمیر اور یہ کیسے کام کرتا ہے

مصنف: IT Sectr اشاعت: 2026-03-14 مطالعے کا وقت: 10 منٹ

Keychain iOS، watchOS، macOS اور tvOS میں ایک محفوظ اسناد کا ذخیرہ ہے جو پاس ورڈز، کیز اور سرٹیفکیٹس کو ہارڈویئر سطح پر منظم کرتا ہے۔ UserDefaults کے برعکس، Keychain میں ڈیٹا کو انکرپٹ کیا جاتا ہے اور ایپلیکیشن سینڈباکس کے لحاظ سے الگ کیا جاتا ہے۔ Apple Developer Documentation کے مطابق، Keychain خفیہ معلومات کی حفاظت کے لیے Secure Enclave میکانزم اور AES-256 ہارڈویئر انکرپشن استعمال کرتا ہے۔

اہم نکات

  • Keychain — ہارڈویئر انکرپشن کے ساتھ پاس ورڈز، کیز اور سرٹیفکیٹس کے لیے iOS سسٹم اسٹوریج
  • Security framework Keychain کے ساتھ کام کرنے کے لیے C-فنکشنز SecItemAdd، SecItemCopyMatching اور SecItemDelete فراہم کرتا ہے
  • Keychain تک رسائی ایپلیکیشن سینڈباکس تک محدود ہے، لیکن keychain access groups کے ذریعے مشترکہ رسائی ممکن ہے
  • خصوصیت kSecAttrAccessible تحفظ کی سطح متعین کرتی ہے: Always سے WhenUnlockedThisDeviceOnly تک
  • Keychain پاس ورڈز، ہم آہنگ اور غیر ہم آہنگ کیز، X.509 سرٹیفکیٹس کے ذخیرہ کی حمایت کرتا ہے

Keychain کیا ہے؟

Keychain Apple آپریٹنگ سسٹم کا ایک محفوظ ڈیٹا بیس ہے جو پاس ورڈز، خفیہ نگاری کی کیز، سرٹیفکیٹس اور دیگر حساس ڈیٹا کے محفوظ ذخیرہ کے لیے ڈیزائن کیا گیا ہے۔ Keychain پہلی بار Mac OS 8.6 میں 1999 میں ظاہر ہوا، اور iOS پر — پہلے SDK ورژن سے۔

تعریف اور مقصد

Keychain موبائل ڈیولپمنٹ کا ایک بنیادی مسئلہ حل کرتا ہے: غیر محفوظ فائل سسٹم میں رازوں (ٹوکن، پاس ورڈ، انکرپشن کیز) کا ذخیرہ۔ UserDefaults یا SQLite کے برعکس، Keychain میں ڈیٹا انکرپٹڈ شکل میں محفوظ ہوتا ہے اور ڈسک پر لکھتے وقت خود بخود انکرپٹ ہو جاتا ہے۔

ہر iOS ایپلیکیشن ایک الگ تھلگ سینڈباکس میں کام کرتی ہے اور صرف اپنے keychain تک رسائی رکھتی ہے۔ تاہم، ڈیولپر keychain access groups کے ذریعے ایک ہی ڈیولپر کی ایپلیکیشنز کے درمیان مشترکہ Keychain رسائی ترتیب دے سکتا ہے۔ صارف کا iCloud Keychain اینڈ ٹو اینڈ انکرپشن کے ذریعے آلات کے درمیان ڈیٹا کو مطابقت پذیر کرتا ہے۔

Apple Security White Paper (2025) کے مطابق، Keychain ڈیوائس کے منفرد شناخت کنندہ (UID) سے منسلک کلید کے ساتھ AES-256 ہارڈویئر انکرپشن استعمال کرتا ہے، جس سے ڈیوائس سے نکالنے پر ڈیٹا ناقابل رسائی ہو جاتا ہے۔

iOS پر Keychain کیسے کام کرتا ہے؟

Keychain ایک درجہ بند خدمت کے طور پر کام کرتا ہے: ایپلیکیشن Security framework تک رسائی حاصل کرتی ہے، جو securityd ڈیمون کے ساتھ بات چیت کرتا ہے جو انکرپٹڈ SQLite Keychain ڈیٹا بیس کا انتظام کرتا ہے۔ ہر ریکارڈ ایک الگ کلید سے انکرپٹ کیا جاتا ہے، اور کیز خود A7 چپ اور نئے آلات پر Secure Enclave ہارڈویئر ماڈیول کے ذریعے محفوظ ہوتی ہیں۔

Security framework کا فن تعمیر

Security framework Keychain Services کے ساتھ کام کرنے کے لیے C انٹرفیس فراہم کرتا ہے۔ اہم فنکشنز: SecItemAdd (شامل کرنا)، SecItemCopyMatching (تلاش کرنا)، SecItemUpdate (اپ ڈیٹ کرنا) اور SecItemDelete (حذف کرنا)۔ ہر آپریشن درخواست کی قسم کو بیان کرنے والا CFDictionaryRef خصوصیات کی لغت قبول کرتا ہے۔

ڈیٹا کو کلاسز میں درجہ بند کیا جاتا ہے: kSecClassGenericPassword (صوابدیدی پاس ورڈ)، kSecClassInternetPassword (انٹرنیٹ سروس پاس ورڈ)، kSecClassCertificate (سرٹیفکیٹ)، kSecClassKey (خفیہ نگاری کی کلید) اور kSecClassIdentity (کلید اور سرٹیفکیٹ جوڑا)۔

ڈیٹا محفوظ کرنے کا عمل

پاس ورڈ محفوظ کرتے وقت، ایپلیکیشن خصوصیات کے ساتھ ایک لغت بناتی ہے: سروس، اکاؤنٹ، رسائی کی سطح، لیبل۔ Security framework ڈیٹا کو securityd ڈیمون کو بھیجتا ہے، جو ریکارڈ کو ڈیوائس سے منسلک کلید سے انکرپٹ کرتا ہے اور Keychain SQLite میں محفوظ کرتا ہے۔ بازیافت اسی طرح کام کرتی ہے: خصوصیات کے ذریعے استفسار، تلاش، ڈیکرپشن اور ڈیٹا کی واپسی۔

ایک اہم خصوصیت: جب ایپلیکیشن حذف کی جاتی ہے، iOS خود بخود اس ایپلیکیشن کے بنائے گئے Keychain ریکارڈز کو صاف کرتا ہے (iOS 10.3+ سے)۔ ایپلیکیشن دوبارہ انسٹال کرنے پر، پچھلی انسٹالیشن کا Keychain ڈیٹا دستیاب نہیں ہوتا جب تک کہ iCloud Keychain استعمال نہ کیا گیا ہو۔

swift
import Security

func savePassword(service: String, account: String, password: Data) {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrService as String: service,
        kSecAttrAccount as String: account,
        kSecValueData as String: password,
        kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlocked
    ]
    SecItemAdd(query as CFDictionary, nil)
}

Keychain میں ڈیٹا کی اقسام

Keychain پانچ اہم ڈیٹا کلاسز کو سپورٹ کرتا ہے، ہر ایک کا اپنا خصوصیات کا سیٹ اور اطلاق کا دائرہ کار ہے۔ کلاس کا انتخاب طے کرتا ہے کہ کون سی تلاش کی کیز دستیاب ہیں اور ڈیٹا کیسے انکرپٹ ہوتا ہے۔

پاس ورڈز اور اکاؤنٹس

kSecClassGenericPassword اور kSecClassInternetPassword کلاسز سٹرنگ پاس ورڈز کو ذخیرہ کرنے کے لیے ڈیزائن کی گئی ہیں۔ انٹرنیٹ ورژن اضافی طور پر سرور ڈیٹا محفوظ کرتا ہے: ڈومین، پروٹوکول، پورٹ اور تصدیقی راستہ۔ GenericPassword سرور سے منسلکی کے بغیر کسی بھی پاس ورڈ کو ذخیرہ کرنے کے لیے استعمال ہوتا ہے۔

انٹرنیٹ پاس ورڈ محفوظ کرتے وقت، آپ kSecAttrServer (ڈومین)، kSecAttrProtocol (HTTPS، FTP، وغیرہ)، kSecAttrPort اور kSecAttrPath بتا سکتے ہیں۔ یہ AutoFill کے ذریعے خودکار بھرائی کے دوران ریکارڈ کی درست شناخت کی اجازت دیتا ہے۔

خفیہ نگاری کی کیز اور سرٹیفکیٹس

kSecClassKey کلاس ہم آہنگ (AES) اور غیر ہم آہنگ (RSA، EC) کیز محفوظ کرتی ہے۔ kSecClassCertificate کلاس X.509 سرٹیفکیٹس محفوظ کرتی ہے۔ kSecClassIdentity کلاس ایک پرائیویٹ کلید اور اس سے متعلقہ سرٹیفکیٹ کو ایک ریکارڈ میں یکجا کرتی ہے۔

غیر ہم آہنگ کیز کے لیے، Keychain خصوصیات کو سپورٹ کرتا ہے: kSecAttrKeyType (RSA، EC)، kSecAttrKeySizeInBits (2048، 256)، kSecAttrIsPermanent (Keychain میں محفوظ کرنا ہے یا نہیں)۔ سرٹیفکیٹس کے لیے: kSecAttrLabel (انسانی پڑھنے کے قابل نام)، kSecAttrSubject (مالک کا DN)، kSecAttrIssuer (جاری کنندہ کا DN)۔

Keychain کلاسمقصدڈیٹا کی قسم
kSecClassGenericPasswordایپلیکیشن پاس ورڈData (NSString)
kSecClassInternetPasswordسرور پاس ورڈData + سرور کی خصوصیات
kSecClassCertificateX.509 سرٹیفکیٹSecCertificate
kSecClassKeyخفیہ نگاری کی کلیدSecKey
kSecClassIdentityکلید + سرٹیفکیٹSecIdentity

API کے ذریعے Keychain کے ساتھ کام کرنا

مقامی iOS کوڈ میں Keychain کے ساتھ تعامل کا بنیادی انٹرفیس Security framework کے فنکشنز ہیں۔ Swift اور Objective-C کے لیے، ایک واحد C انٹرفیس دستیاب ہے، جو آسان فنکشنز میں لپٹا ہوا ہے۔

بنیادی آپریشنز SecItemAdd اور SecItemCopyMatching

SecItemAdd فنکشن Keychain میں ایک نیا آئٹم شامل کرتا ہے۔ یہ کلاس، ڈیٹا اور خصوصیات کے ساتھ ایک لغت بطور ان پٹ لیتا ہے۔ errSecSuccess (0) سٹیٹس یا ایرر کوڈ لوٹاتا ہے۔ SecItemCopyMatching فنکشن خصوصیات کے ذریعے تلاش کرتا ہے اور ملنے والا ڈیٹا لوٹاتا ہے۔

تلاش کے لیے kSecReturnData فلیگ استعمال ہوتا ہے — اگر true ہے، فنکشن ریکارڈ کا مواد لوٹاتا ہے۔ kSecMatchLimit فلیگ نتائج کی تعداد متعین کرتا ہے: kSecMatchLimitOne (ایک) یا kSecMatchLimitAll (تمام)۔

swift
func readPassword(service: String, account: String) -> Data? {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrService as String: service,
        kSecAttrAccount as String: account,
        kSecReturnData as String: true,
        kSecMatchLimit as String: kSecMatchLimitOne
    ]
    var item: CFTypeRef?
    let status = SecItemCopyMatching(query as CFDictionary, &item)
    guard status == errSecSuccess else { return nil }
    return item as? Data
}

ریکارڈز کو حذف اور اپ ڈیٹ کرنا

SecItemUpdate موجودہ ریکارڈ کی خصوصیات یا ڈیٹا کو تبدیل کرنے کی اجازت دیتا ہے۔ SecItemDelete منتقل کردہ لغت سے مماثل تمام ریکارڈز کو حذف کرتا ہے۔ حذف کرتے وقت، کافی خصوصیات بتانا ضروری ہے تاکہ مشترکہ keychain میں دوسرے ریکارڈز غلطی سے حذف نہ ہوں۔

swift
func deletePassword(service: String, account: String) {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrService as String: service,
        kSecAttrAccount as String: account
    ]
    SecItemDelete(query as CFDictionary)
}

رسائی کی سطحیں اور ڈیٹا کا تحفظ

ہر Keychain ریکارڈ میں kSecAttrAccessible خصوصیت ہوتی ہے، جو متعین کرتی ہے کہ ڈیٹا پڑھنے کے لیے کب دستیاب ہے۔ یہ سیکیورٹی کے لیے انتہائی اہم ہے: غلط رسائی کی سطح ڈیٹا کو کمزور بنا سکتی ہے یا اس کے برعکس، ضرورت کے وقت ناقابل رسائی بنا سکتی ہے۔

دستیابی کے مستقل

kSecAttrAccessibleWhenUnlocked — ڈیٹا صرف اس وقت دستیاب ہوتا ہے جب ڈیوائس انلاک ہو۔ kSecAttrAccessibleAfterFirstUnlock — ریبوٹ کے بعد پہلے انلاک کے بعد دستیاب۔ kSecAttrAccessibleAlways — ہمیشہ دستیاب (سفارش نہیں کی جاتی)۔ ThisDeviceOnly لاحقہ بیک اپ کے ذریعے ڈیٹا کی منتقلی کو روکتا ہے۔

Secure Enclave والے آلات پر، Keychain انکرپشن کلید کو بائیو میٹرکس کے ذریعے اضافی طور پر محفوظ کیا جا سکتا ہے: kSecAccessControlBiometryCurrentSet یا kSecAccessControlUserPresence۔ یہ ہر پڑھنے کے آپریشن کے لیے Face ID یا Touch ID کی ضرورت شامل کرتا ہے۔

iCloud Keychain اور مطابقت پذیری

iCloud Keychain اینڈ ٹو اینڈ انکرپشن کے ذریعے Apple آلات کے درمیان ریکارڈز کو مطابقت پذیر کرتا ہے۔ Apple کے پاس ڈکرپٹڈ ڈیٹا تک رسائی نہیں ہے۔ مطابقت پذیری فعال کرنے کے لیے، kSecAttrSynchronizable خصوصیت کو kCFBooleanTrue ویلیو کے ساتھ شامل کریں۔

اہم: مطابقت پذیر ریکارڈز میں ThisDeviceOnly خصوصیت شامل نہیں ہو سکتی، کیونکہ انہیں دوسرے آلات پر دستیاب ہونا چاہیے۔ تمام آلات کھو جانے پر، iCloud Keychain کو بازیابی کوڈ یا iCloud بازیابی کلید کے ذریعے بحال کیا جا سکتا ہے۔

رسائی کی سطح کے انتخاب کے لیے بہترین طریقہ کار

تصدیقی ٹوکن کے لیے، kSecAttrAccessibleWhenUnlockedThisDeviceOnly استعمال کریں — ڈیٹا صرف ڈیوائس انلاک ہونے پر دستیاب ہوتا ہے اور بیک اپ میں کاپی نہیں ہوتا۔ سرٹیفکیٹس کے لیے جو پس منظر کے کاموں کے لیے دستیاب ہونے چاہئیں، kSecAttrAccessibleAfterFirstUnlock استعمال کریں۔ حساس ڈیٹا کے لیے kSecAttrAccessibleAlways کبھی استعمال نہ کریں۔

ان ڈیٹا کے لیے جو مطابقت پذیری کی ضرورت نہیں رکھتے، ہمیشہ ThisDeviceOnly لاحقہ شامل کرنے کی سفارش کی جاتی ہے۔ یہ iCloud یا iTunes بیک اپ میں رازوں کی اتفاقی کاپی کو روکتا ہے، جہاں وہ تجزیہ کے آلات سے نکالے جا سکتے ہیں۔ اہم ڈیٹا کے لیے، دستیابی کو kSecAccessControlUserPresence کے ساتھ ملائیں — یہ ریکارڈ ڈکرپشن کے لیے بائیو میٹرک یا پاس کوڈ کی ضرورت شامل کرتا ہے۔

iCloud Keychain استعمال کرتے وقت، ذہن میں رکھیں کہ مطابقت پذیر ریکارڈز صارف کے تمام آلات پر دستیاب ہوتے ہیں: اگر حملہ آور ایک ڈیوائس تک رسائی حاصل کر لے تو ڈیٹا تمام آلات پر سمجھوتہ ہو سکتا ہے۔ الگ تھلگ رازوں کے لیے، ThisDeviceOnly استعمال کریں۔

اکثر پوچھے گئے سوالات

Keychain UserDefaults سے کیسے مختلف ہے؟

UserDefaults ڈیٹا کو .plist فائل میں سادہ متن میں محفوظ کرتا ہے، جو IPA تجزیہ کے دوران قابل رسائی ہے۔ Keychain ہر ریکارڈ کو علیحدہ انکرپٹ کرتا ہے، ہارڈویئر انکرپشن استعمال کرتا ہے اور رسائی کی سطحوں، بائیو میٹرکس اور iCloud کے ذریعے مطابقت پذیری کو سپورٹ کرتا ہے۔

جانچ کے دوران Keychain کیسے صاف کریں؟

ہر iOS سمیولیٹر لانچ پر، Keychain صاف ہو جاتا ہے۔ حقیقی ڈیوائس پر، ایپلیکیشن حذف کریں — iOS اس ڈیولپر کے تمام Keychain ریکارڈز ہٹا دے گا۔ انتخابی صفائی کے لیے، مناسب خصوصیات کے ساتھ SecItemDelete کال کریں۔

کیا دو ایپلیکیشنز مشترکہ Keychain استعمال کر سکتی ہیں؟

ہاں، keychain access groups کے ذریعے۔ ایپلیکیشنز کے پاس پروویژننگ پروفائل میں ایک ہی team ID اور ایک ہی keychain-access-groups کے ساتھ entitlements ہونا چاہیے۔ ڈیولپر Xcode Capabilities میں مشترکہ رسائی ترتیب دیتا ہے۔

Keychain میں ڈیٹا کا زیادہ سے زیادہ سائز کیا ہے؟

Apple کوئی سخت حد دستاویز نہیں کرتا، لیکن عملی طور پر فی ریکارڈ 1–4 KB سے تجاوز نہ کرنے کی سفارش کی جاتی ہے۔ بڑی مقدار کے لیے، فائل انکرپشن استعمال کریں اور کلید کو Keychain میں محفوظ کریں، جبکہ ڈیٹا خود Documents میں رکھیں۔

کیا جیل بریک ڈیوائس پر Keychain محفوظ ہے؟

جیل بریک والی ڈیوائس پر، Keychain کا تحفظ کم ہو جاتا ہے کیونکہ حملہ آور کو روٹ رسائی مل جاتی ہے اور وہ براہ راست Keychain SQLite پڑھ سکتا ہے۔ اہم ڈیٹا کے لیے، سرور سے حاصل کردہ کلید کے ساتھ اضافی انکرپشن استعمال کریں۔

خلاصہ

  • Keychain — AES-256 ہارڈویئر انکرپشن کے ساتھ پاس ورڈز، کیز اور سرٹیفکیٹس کے لیے iOS محفوظ ذخیرہ
  • Security framework C-API فراہم کرتا ہے: لکھنے کے لیے SecItemAdd، پڑھنے کے لیے SecItemCopyMatching، حذف کرنے کے لیے SecItemDelete
  • Keychain ڈیٹا کلاسز: GenericPassword، InternetPassword، Certificate، Key، Identity — ہر ایک کا اپنا خصوصیات کا سیٹ
  • kSecAttrAccessible رسائی کی سطح کو کنٹرول کرتا ہے: WhenUnlocked، AfterFirstUnlock، Always، ThisDeviceOnly آپشن کے ساتھ
  • iCloud Keychain kSecAttrSynchronizable خصوصیت کے ساتھ اینڈ ٹو اینڈ انکرپشن کے ذریعے آلات کے درمیان ریکارڈز کو مطابقت پذیر کرتا ہے
  • بائیو میٹرکس (Face ID / Touch ID) kSecAccessControlBiometryCurrentSet کے ذریعے Keychain رسائی کی حفاظت کرتا ہے
  • OAuth ٹوکن، پاس ورڈز اور خفیہ نگاری کی کیز کے ذخیرہ کے لیے Keychain استعمال کریں — UserDefaults میں راز نہ رکھیں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں