آئیو ایس پر محفوظ ڈیٹا سٹیج تک رسائی

یا ملکیتی معلومات کے تحفظ کے لیے درکار معلومات کو کنٹرول کرنے کی بنیادی ذمہ داری ہے.

آئیو ایس کیپچین کو سمجھنا

کلیدی معلوماتی نظام کے ذریعے کام کرنے والا ایک محفوظ ذخیرہ ذخیرہ ہے اس میں چھوٹی، حساس چیزوں کو ذخیرہ کیا جاتا ہے—جیسے کہ دفاع، فریاد آزرز، یا سند۔ اخذ کردہ ڈیٹا بیس میں کی گئی معلومات کو محفوظ کیا گیا ہے جب ڈیوائس بند ہو جاتی ہے. کلیدی صلاحیتوں کا احاطہ کریں:

  • بے چینی میں ہارڈ ویئر سے متاثرہ AES-256 استعمال کرتے ہوئے.
  • Access strol] آلات کے ذریعے پاس ورڈ، ٹوبہ شناخت یا فیس آئی ڈی۔
  • [Pers are are repir restalls (اگر انفنٹری) اور compression iCloud Sncing.)۔
  • Isolation [1] :fough, a app's Keychain objecties جب تک وہ کسی کلیدی گروہ کو حصہ نہ دیں

کیچکین بڑے بڑے بڑے بلبز کے لیے ڈیزائن نہیں کیا گیا؛ ہر چیز کو چند کلوبیس کے تحت محفوظ رکھیں۔ بڑے اعداد کے لیے ایپی یا کے ساتھ مل کر فریم ورکنگ کرنے پر غور کریں

کلیدی خدمات اے پی آئی او۔ تیسری پارتی لائبریریز۔

ایپل مقامی کیکچین سروسز [1] ایپ آئی (سی پی ٹی پر مبنی)، جو طاقتور مگر کم لفظ ہے، آپ اسے براہ راست استعمال کر سکتے ہیں یا مختصر سرمایہ کاری کی لائبریری میں شامل کر سکتے ہیں.

اُوپر والے حصے

کسی بھی چیز کو ذخیرہ کرنے سے پہلے آپ کو فیصلہ کرنا ہوگا Kychain آئٹم کلاس . سب سے زیادہ عام جینریکل پاسن . انٹرنیٹ مووی ڈیٹابیس (IMDT) کے لیے دیگر کلاسس ہیں. ہر چیز کا حوالہ ہوتا ہے جس میں خصوصیات (CDationary) کی ایک سیٹ کے ذریعے دیا گیا ہے۔

بنیادی بہاؤ ہمیشہ اس نمونے کی پیروی کرتے ہیں:

  1. آئٹم کلاس اور خصوصیات کیساتھ با دلوں کو ملا ئيں
  2. کام (، ، ، ، )، کو فون کیا جاتا ہے۔
  3. واپس لوٹنے [ یا غلطی کوڈ)۔

کوڈ لکھنے سے پہلے حفاظتی ماوراء درآمد کریں:

import Security
import Foundation // for Data and String utilities

کیپچان میں ڈیٹا کو مضبوط کرنا

ایک جینی‌کُن خفیہ لفظ لکھ لیں

موجودہ صارف کے لیے ایک علامت (مثلاً، ایک specent tepeT) محفوظ کرنے کے لیے:

func saveToken(_ token: String, forAccount account: String) -> Bool {
 guard let tokenData = token.data(using: .utf8) else { return false }

 let query: [String: Any] = [
 kSecClass as String: kSecClassGenericPassword,
 kSecAttrAccount as String: account,
 kSecValueData as String: tokenData,
 // Optional: restrict access to when device is unlocked
 kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlockedThisDeviceOnly
 ]

 // Delete any existing item first to avoid duplicates
 SecItemDelete(query as CFDictionary)

 let status = SecItemAdd(query as CFDictionary, nil)
 return status == errSecSuccess
}

کلیدی نکات:

  • بطور پرائمری کلید کام کرتا ہے؛ ایک منفرد تار (مثلاً صارف آئی ڈی یا ایک مسلسل) جیسے )۔
  • [strol sovers on the embord. استعمال کریں . [FLT]. [2] بہترین حفاظت کے لیے استعمال کریں; یہ iCloud backp اور stable تک رسائی کو روک دیتا ہے موجودہ اوزار تک رسائی۔
  • ہم کو فون کرتے ہیں تاکہ جمع کرنے سے پہلے آپ کو استعمال کیا جا سکے

رسائی کنٹرول (Biometry یا Pascode) شامل کرنا

انتہائی حساس اعداد و شمار کے لیے پڑھنے سے پہلے ٹوبہ ٹیک آئی ڈی یا فیس آئی ڈی درکار ہے:

let accessControl = SecAccessControlCreateWithFlags(
 nil,
 kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
 .userPresence, // requires passcode, Face ID, or Touch ID
 nil
)

let query: [String: Any] = [
 kSecClass as String: kSecClassGenericPassword,
 kSecAttrAccount as String: account,
 kSecValueData as String: tokenData,
 kSecAttrAccessControl as String: accessControl as Any
]
SecItemAdd(query as CFDictionary, nil)

اب کوئی بھی [[FLT:GAT] اس آئٹمس کے لئے درخواست دے گا بائیومیٹر یا عبوری ڈرافٹ کو منتقل کرے گا۔ استعمال کریں مقامیAUG کے ذریعے صارف کے داخلی عملے کو فعال کریں.

کیپیئن سے ڈیٹا کی بحالی

ذخیرہ العین پڑھنے کے لیے:

func retrieveToken(forAccount account: String) -> String? {
 let query: [String: Any] = [
 kSecClass as String: kSecClassGenericPassword,
 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,
 let data = item as? Data,
 let token = String(data: data, encoding: .utf8) else {
 return nil
 }
 return token
}

کو تک رسائی حاصل کرنے کے لئے . ایک نتیجہ اخذ کرنے کے لئے استعمال کریں. اگر آپ حد کو دیکھیں تو ایم پی ایل ٹی کو واپس لا سکتے ہیں۔

[Important: جب رسائی کنٹرول (biometry) استعمال کرتے ہیں تو واپس آ سکتے ہیں اگر صارف کو دوبارہ منسوخ کر دیا جائے تو یہ صورت الگ الگ ہو جاتی ہے اور کبھی بھی سادہ متن ذخیرہ کرنے میں نہیں گرتی۔

تسلی اور یقین‌دہانی

ایک خطرناک حقیقت

تبدیل کرنے اور دوبارہ دوبارہ استعمال کرنے کی بجائے استعمال کریں:

func updateToken(_ newToken: String, forAccount account: String) -> Bool {
 guard let newData = newToken.data(using: .utf8) else { return false }

 let query: [String: Any] = [
 kSecClass as String: kSecClassGenericPassword,
 kSecAttrAccount as String: account
 ]

 let attributesToUpdate: [String: Any] = [
 kSecValueData as String: newData
 ]

 let status = SecItemUpdate(query as CFDictionary, attributesToUpdate as CFDictionary)
 return status == errSecSuccess
}

یہ ایک خارج شدہ+add سے زیادہ مؤثر ہے اور یہ ممکنہ نسل کے حالات سے بچتا ہے۔

ایک اَور بات پر غور کریں

func deleteItem(forAccount account: String) -> Bool {
 let query: [String: Any] = [
 kSecClass as String: kSecClassGenericPassword,
 kSecAttrAccount as String: account
 ]
 let status = SecItemDelete(query as CFDictionary)
 return status == errSecSuccess
}

اگر آپ دوسروں کے ساتھ ایک ہی رسائی گروپ سے منسلک ہیں تو اس میں شامل ہونے والے چیزوں کو ختم کرنے کے لئے احتیاط نہ کریں ۔۔

رسائی اور اِس کے ساتھ ساتھ اِن پر قابو

مسلسل تعین جب کیپچان آئٹم پڑھ سکتے ہیں. سب سے زیادہ قابل استعمال انتخاب انتخاب انتخاب جو ابھی تک آپ کی ایپ کی ضروریات پوری کرتا ہے:

AttributeMeaning
kSecAttrAccessibleWhenUnlockedAvailable only while device is unlocked (default).
kSecAttrAccessibleAfterFirstUnlockAvailable after device boots and is unlocked once. Allows background access.
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnlyRequires a passcode to be set. Strictest option—prevents access even after unlock if passcode is removed.
kSecAttrAccessibleWhenUnlockedThisDeviceOnlySame as WhenUnlocked but does not back up to iCloud, and cannot be restored to another device.

زیادہ تر انسان کے لیے امن اور ہمہ گیر کے درمیان میں درست توازن کو متاثر کرتا ہے۔اگر پس منظر میں مواد پڑھنے کی ضرورت ہو تو آپ کو استعمال کرنا چاہیے(اور یہ تسلیم کرنا چاہیے کہ اعداد کو تھوڑا سا کم محفوظ ہے)۔

غلطی کا جال اور عام پَل

کام کرنے والے ہمیشہ چیک کریں اور ناکامیوں کو مناسب طور پر حل کریں۔

  • [(–25300) – کوئی آئٹم میچ نہیں.
  • [(–25299) – ایک ایسی چیز جس کا وجود پہلے سے موجود ہو (اگر آپ نے پہلی دفعہ حذف نہیں کیا)۔
  • [(–128) – صارف نے بائیومیٹرک کی منتقلی کی۔
  • [(–25293) – توثیق ناکام یا بائیومیٹرس دستیاب نہیں۔

غیر سکیورٹی حالت کو کبھی نظر انداز نہ کرنا۔ فضل خوارزم: غلطی کا پیغام یا رد عمل دکھا کر پیش کرنا مگر کبھی بھی حساس اعداد کو بطور ضلعی بیک وقت محفوظ نہ رکھنا. رسائی کی کوشش سے پہلے آپ استعمال کر سکتے ہیں۔

بہترین مشقیں اور پروڈکشن کے موضوعات پر غور کریں

  • منفرد، غیر مجاز حساب نام [1] صارف یا کسی بھی چیز کی نوعیت کو استعمال کرنے سے بچنے کے لیے.
  • کسی مرکب کو درست کرنے کے لیے کسی آلہ کو درست کرنا؛ ورنہ، نظامی تناسب () اطلاق کرنا، جو شاید مثالی نہیں ہو سکتا، کا اطلاق ہوتا ہے۔
  • Clear Kechichain data جب صارف لاگس آؤٹ تمام معروف حسابات اور حذف شدہ چیزوں پر Esports.
  • GECychain access Groups صرف اپنے آپ کے درمیان میں شراکت کرتے وقت ہی وسیع گروہوں سے گریز کریں۔
  • کبھی بھی غیر حساس اعداد و شمار کو محفوظ نہیں کیا [] (جیسا کہ صارف ترجیحات) کی کلیچاین میں—* یا ڈیٹا بیس۔
  • کے ساتھ ساتھ ترقی یافتہ ترقی یافتہ (macOS Catalyst) کے لیے استعمال کیا جانے والا آلہ۔
  • کسی حقیقی اوزار پر کرپشن؛ سیمولر ایک سافٹ ویئر کیپچان استعمال کرتا ہے جو ہارڈ ویئر سے مختلف طور پر ہٹ کر بنایا گیا ذخیرہ کاری سے۔

تیز UI اور Async/resc/ کے ساتھ Keychain کا استعمال کرتے ہوئے

جدید پلگ ان کے لیے، کلیدی دھاگے کو روکنے کے لیے ایک ایکٹر یا اسیکن محفوظ کلاس میں کلیدی سوراخ بند کرنے سے بچنے کے لئے کی گئی کارروائیوں کو لپیٹ. مثال کے طور پر استعمال کریں:

actor KeychainManager {
 func saveToken(_ token: String, for account: String) async -> Bool {
 // same implementation as above, but now it's safe to call from any context
 return saveToken(token, forAccount: account)
 }
}

اگر آپ بائیومیٹر استعمال کریں تو کو فون کر سکتے ہیں جبکہ صارف انٹرٹینمنٹ کا انتظار کرتے ہوئے. Wrap اسے پس منظر میں یا بہتر، کا طریقہ استعمال کریں

کُنَّا

The iOS Keychain is the correct place to store small, sensitive pieces of data. By using the native Keychain Services API, you gain direct control over encryption, accessibility, and authentication policies. Always pair your Keychain usage with solid error handling and remember to clear data when appropriate. For further reading, refer to the Apple Keychain Service Documentation and the Keychain Concepts overview. Adopting these practices will help you ship iOS apps that respect user privacy and withstand security scrutiny.