Ma question concerne les trousseaux de clés dans iOS (iPhone, iPad, ...). Je pense (mais je n'en suis pas sûr) que l'implémentation des trousseaux sous Mac OS X pose la même question avec la même réponse.
iOS propose cinq types (classes) de porte-clés. Vous devez choisir l'une de ces cinq valeurs pour la clé kSecClass
pour 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 avoir longuement lu la documentation sur les pommes, les blogs et les articles de forum, j'ai découvert qu'un élément de trousseau de clés du type kSecClassGenericPassword
tire son unicité des attributs kSecAttrAccessGroup
, kSecAttrAccount
y kSecAttrService
.
Si les trois attributs de la demande 1 sont les mêmes que ceux de la demande 2, vous recevrez le même porte-clés générique pour mot de passe, quels que soient les autres attributs. Si l'un (ou deux ou tous) de ces attributs change de valeur, alors vous recevez des articles différents.
Mais kSecAttrService
est uniquement disponible pour les éléments de type kSecClassGenericPassword
Il ne peut donc pas faire partie de la "clé unique" d'un article d'un autre type, et aucune documentation ne semble indiquer clairement quels attributs déterminent de manière unique un article de trousseau.
L'exemple de code dans la classe "KeychainItemWrapper" de "GenericKeychain" utilise l'attribut kSecAttrGeneric
pour rendre un objet unique, mais c'est un bug. Les deux entrées de cet exemple ne sont stockées que comme deux entrées distinctes, parce que leur kSecAttrAccessGroup
est différent (l'un 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 la méthode d'Apple, vous devez vous assurer que le mot de passe est libre. KeychainItemWrapper
vous échouerez.
Alors, s'il vous plaît, répondez à mes questions :
- Est-il vrai, que la combinaison de
kSecAttrAccessGroup
,kSecAttrAccount
ykSecAttrService
est la "clé unique" d'un élément du trousseau dont le kSecClass estkSecClassGenericPassword
? - Quels sont les attributs qui rendent un porte-clés unique si son
kSecClass
n'est paskSecClassGenericPassword
?
2 votes
Il existe un article de blog ici à ce sujet.