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