Ma question concerne les porte-clés sous iOS (iPhone, iPad, ...). Je pense (mais je ne suis pas sûr) que l'implémentation de keychains sous Mac OS X soulève la même question avec la même réponse.
iOS fournit cinq types (classes) d'éléments de trousseau. Vous devez choisir l'une de ces cinq valeurs pour la clé kSecClass
afin de déterminer le type:
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)
Après une longue période de documentation des pommes de lecture, blogs et forum-entrées, j'ai découvert qu'un élément clé de type kSecClassGenericPassword
obtient son unicité des attributs kSecAttrAccessGroup
, kSecAttrAccount
et kSecAttrService
.
Si ces trois attributs dans la demande 1 sont les mêmes que dans la demande 2, vous recevez le même élément de trousseau de mot de passe générique, quels que soient les autres attributs. Si un (ou deux ou tous) de ces attributs modifie sa valeur, vous obtenez des éléments différents.
Mais kSecAttrService
n'est disponible que pour les éléments de type kSecClassGenericPassword
, donc il ne peut pas faire partie de la "clé unique" d'un élément d'un autre type, et il ne semble y avoir aucune documentation indiquant clairement quels attributs déterminent de manière unique un élément de trousseau.
L'exemple de code dans la classe «KeychainItemWrapper» de «GenericKeychain» utilise l'attribut kSecAttrGeneric
pour rendre un élément unique, mais il s'agit d'un bogue. Les deux entrées de cet exemple uniquement sont stockées sous la forme de deux entrées distinctes, car elles kSecAttrAccessGroup
sont différentes (l'une a le groupe d'accès défini, l'autre le laisse libre). Si vous essayez d'ajouter un deuxième mot de passe sans groupe d'accès, en utilisant Apple KeychainItemWrapper
, vous échouerez.
Alors, s'il vous plaît, répondez à mes questions:
- Est-il vrai que la combinaison de
kSecAttrAccessGroup
,kSecAttrAccount
etkSecAttrService
est la "clé unique" d'un élément de trousseau dont kSecClass estkSecClassGenericPassword
? - Quels attributs rendent un élément de trousseau unique si ce
kSecClass
n'est pas le caskSecClassGenericPassword
?