La mia domanda riguarda i portachiavi in iOS (iPhone, iPad, ...). Penso (ma non sono sicuro) che l'implementazione dei portachiavi in Mac OS X solleva la stessa domanda con la stessa risposta.
iOS fornisce cinque tipi (classi) di elementi portachiavi. Devi scegliere uno di questi cinque valori per la chiave kSecClassper determinare il tipo:
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)
Dopo lungo periodo di documentazione di lettura mele, blog e forum-iscrizioni, ho scoperto che una voce di portachiavi di tipo kSecClassGenericPasswordottiene la sua unicità dagli attributi kSecAttrAccessGroup, kSecAttrAccounte kSecAttrService.
Se questi tre attributi nella richiesta 1 sono gli stessi della richiesta 2, si riceve lo stesso elemento portachiavi con password generica, indipendentemente da qualsiasi altro attributo. Se uno (o due o tutti) di questi attributi cambia il suo valore, otterrai elementi diversi.
Ma kSecAttrServiceè disponibile solo per elementi di tipo kSecClassGenericPassword, quindi non può far parte della "chiave univoca" di un elemento di qualsiasi altro tipo e non sembra esserci alcuna documentazione che indichi chiaramente quali attributi determinano in modo univoco un elemento portachiavi.
Il codice di esempio nella classe "KeychainItemWrapper" di "GenericKeychain" utilizza l'attributo kSecAttrGenericper rendere un elemento univoco, ma si tratta di un bug. Le due voci solo in questo esempio sono memorizzate come due voci distinte, perché la loro kSecAttrAccessGroupè diversa (una ha il gruppo di accesso impostato, l'altra lo lascia libero). Se provi ad aggiungere una seconda password senza un gruppo di accesso, utilizzando quello di Apple KeychainItemWrapper, fallirai.
Quindi, per favore, rispondi alle mie domande:
- E 'vero, che la combinazione di
kSecAttrAccessGroup,kSecAttrAccountedkSecAttrServiceè la "chiave unica" di un elemento portachiavi cui kSecClass èkSecClassGenericPassword? - Quali attributi rendono unico un oggetto portachiavi se
kSecClassnon lo èkSecClassGenericPassword?