Мой вопрос касается брелков в 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)
. После долгого чтения документации Apple, блогов и сообщений на форуме -я обнаружил, что элемент связки ключей типа kSecClassGenericPassword
получает свою уникальность от атрибутов kSecAttrAccessGroup
, kSecAttrAccount
и kSecAttrService
.
Если эти три атрибута в запросе 1 такие же, как и в запросе 2, вы получаете тот же элемент связки ключей общего пароля, независимо от любых других атрибутов. Если один (или два или все )этого атрибута меняют свое значение, то вы получаете разные предметы.
Но kSecAttrService
доступен только для элементов типа kSecClassGenericPassword
, поэтому он не может быть частью «уникального ключа» элемента любого другого типа, и, по-видимому, нет документации, четко указывающей, какие атрибуты являются уникальными. определить элемент брелка.
Пример кода в классе "KeychainItemWrapper" из "GenericKeychain" использует атрибут kSecAttrGeneric
, чтобы сделать элемент уникальным, но это ошибка. Только две записи в этом примере сохраняются как две отдельные записи, потому что их kSecAttrAccessGroup
разные (у одной установлена группа доступа, а у другой она разрешена ). Если вы попытаетесь добавить второй пароль без группы доступа, используя Apple KeychainItemWrapper
, вы потерпите неудачу.
Пожалуйста, ответьте на мои вопросы:
kSecAttrAccessGroup
, kSecAttrAccount
и kSecAttrService
является «уникальным ключом» элемента цепочки для ключей, чей kSecClass равен kSecClassGenericPassword
?kSecClass
не kSecClassGenericPassword
?