Мой вопрос касается брелков в 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
?