Sorum iOS'taki (iPhone, iPad, ...) anahtar zincirleriyle ilgili. Mac OS X altında anahtar zincirlerinin uygulanmasının aynı soruyu aynı cevapla gündeme getirdiğini düşünüyorum (ama emin değilim).
iOS, beş tür (sınıf) anahtar zinciri öğesi sağlar. Türünü kSecClass
belirlemek için anahtar için şu beş değerden birini seçmelisiniz :
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)
Okuma elma dokümantasyon, bloglar ve forum-girişlerinin uzun süre sonra türde bir anahtarlık kalem öğrendim kSecClassGenericPassword
nitelikler onun benzersizliğini alır kSecAttrAccessGroup
, kSecAttrAccount
ve kSecAttrService
.
Talep 1'deki bu üç öznitelik, istek 2'deki ile aynıysa, diğer özniteliklerden bağımsız olarak aynı genel parola anahtar zinciri öğesini alırsınız. Bu özelliklerden biri (veya ikisi veya tümü) değerini değiştirirse, farklı öğeler alırsınız.
Ancak kSecAttrService
yalnızca türdeki öğeler için mevcuttur kSecClassGenericPassword
, bu nedenle başka türden bir öğenin "benzersiz anahtarının" parçası olamaz ve hangi özelliklerin bir anahtar zinciri öğesini benzersiz şekilde belirlediğini açıkça gösteren hiçbir belge yok gibi görünüyor.
"GenericKeychain" in "KeychainItemWrapper" sınıfındaki örnek kod, kSecAttrGeneric
bir öğeyi benzersiz kılmak için özniteliği kullanır , ancak bu bir hatadır. Bu örnekteki iki giriş yalnızca iki ayrı giriş olarak saklanır, çünkü bunların kSecAttrAccessGroup
farklıdır (biri erişim grubu setine sahip, diğeri serbest bırakıyor). Apple'ı kullanarak erişim grubu olmadan 2. bir parola eklemeye çalışırsanız KeychainItemWrapper
başarısız olursunuz.
Lütfen sorularıma cevap verin:
- O, doğru mu bu kombinasyonu
kSecAttrAccessGroup
,kSecAttrAccount
vekSecAttrService
kSecClass bir anahtarlık öğenin "eşsiz anahtar" dırkSecClassGenericPassword
? - Onun ise hangi nitelikleri bir anahtarlık öğesi eşsiz kılan
kSecClass
değilkSecClassGenericPassword
?