Что делает элемент цепочки для ключей уникальным (в iOS )?

Мой вопрос касается брелков в 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?
96
задан Lorenzo B 17 August 2016 в 21:49
поделиться