Моє запитання стосується брелоків в iOS (iPhone, iPad, ...). Я думаю (але не впевнений), що реалізація брелоків під Mac OS X викликає те саме питання з тією ж відповіддю.
iOS надає п'ять типів (класів) елементів брелока. kSecClass
Для визначення типу потрібно вибрати одне з цих п'яти значень для ключа :
kSecClassGenericPassword used to store a generic password
kSecClassInternetPassword used to store an internet password
kSecClassCertificate used to store a certificate
kSecClassKey used to store a kryptographic key
kSecClassIdentity used to store an identity (certificate + private key)
Після довгого прочитання документації щодо яблук, блогів та записів на форумах я виявив, що елемент типу брелока kSecClassGenericPassword
отримує свою унікальність з атрибутів kSecAttrAccessGroup
, kSecAttrAccount
і kSecAttrService
.
Якщо ці три атрибути у запиті 1 такі ж, як у запиті 2, ви отримуєте той самий загальний ключ брелоку з паролем, незалежно від будь-яких інших атрибутів. Якщо один (або два чи всі) цього атрибута змінить його значення, то ви отримаєте різні предмети.
Але kSecAttrService
він доступний лише для елементів типу kSecClassGenericPassword
, тому він не може бути частиною "унікального ключа" предмета будь-якого іншого типу, і, здається, не існує жодної документації, яка б чітко вказувала, які атрибути однозначно визначають предмет брелока.
Зразок коду в класі "KeychainItemWrapper" "GenericKeychain" використовує атрибут kSecAttrGeneric
для створення елемента унікальним, але це помилка. Дві записи лише в цьому прикладі зберігаються у вигляді двох різних записів, оскільки їх kSecAttrAccessGroup
різний (один має набір групи доступу, а другий дозволяє звільнити його). Якщо ви спробуєте додати другий пароль без групи доступу, використовуючи Apple KeychainItemWrapper
, ви не зможете.
Тож, будь ласка, дайте відповіді на мої запитання:
- Чи вірно, що поєднання
kSecAttrAccessGroup
,kSecAttrAccount
іkSecAttrService
це «унікальний ключ» з брелка елемента якого kSecClass цеkSecClassGenericPassword
? - Які атрибути роблять предмет брелока унікальним, якщо його
kSecClass
немаєkSecClassGenericPassword
?